On 10/13/2011 09:47 PM, Yuanhan Liu wrote:
v2: quote the spec; explicitly exclude the GL_BITMAP case to make code
more readable. (comments from Ian)

Signed-off-by: Yuanhan Liu<yuanhan....@linux.intel.com>
---
  src/mesa/main/pbo.c |   12 ++++++++++++
  1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/src/mesa/main/pbo.c b/src/mesa/main/pbo.c
index 4e7e6f9..6a4ae09 100644
--- a/src/mesa/main/pbo.c
+++ b/src/mesa/main/pbo.c
@@ -82,6 +82,18 @@ _mesa_validate_pbo_access(GLuint dimensions,
     } else {
        offset = ptr;
        sizeAddr = ((const GLubyte *) 0) + pack->BufferObj->Size;
+      /* The ARB_pixel_buffer_object spec says:
+       *    "INVALID_OPERATION is generated by ColorTable, ColorSubTable,
+       *    ConvolutionFilter2D, ConvolutionFilter1D, SeparableFilter2D,
+       *    TexImage1D, TexImage2D, TexImage3D, TexSubImage1D,
+       *    TexSubImage2D, TexSubImage3D, and DrawPixels if the current
+       *    PIXEL_UNPACK_BUFFER_BINDING_ARB value is non-zero and the data
+       *    parameter is not evenly divisible into the number of basic machine
+       *    units needed to store in memory a datum indicated by the type
+       *    parameter."
+       */
+      if (type != GL_BITMAP&&  ((GLuint)offset % _mesa_sizeof_type(type)))
+         return GL_FALSE;

Casting the 64-bit offset pointer to a 32-bit GLuint is going to cause compiler warnings.

Using GLintptr instead of GLuint there should do the trick.

-Brian
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to