Mesa (master): mesa: generate error if pbo offset is not aligned with the size of specified type

Yuanhan Liu yliu at kemper.freedesktop.org
Tue Oct 18 18:33:58 PDT 2011


Module: Mesa
Branch: master
Commit: 9024d8af0ae832a0b4278eb6683bc0e76c69baac
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=9024d8af0ae832a0b4278eb6683bc0e76c69baac

Author: Yuanhan Liu <yuanhan.liu at linux.intel.com>
Date:   Mon Oct 17 09:57:36 2011 +0800

mesa: generate error if pbo offset is not aligned with the size of specified type

v2: quote the spec; explicitly exclude the GL_BITMAP case to make code
    more readable. (comments from Ian)

v3: Cast the offset by GLintptr to remove the compile warning(comments
    from Brian).

    I also found that I should use _mesa_sizeof_packed_type() instead,
    as it includes packed pixel type, like GL_UNSIGNED_SHORT_5_6_5.

Signed-off-by: Yuanhan Liu <yuanhan.liu at linux.intel.com>
Reviewed-by: Brian Paul <brianp at vmware.com>

---

 src/mesa/main/pbo.c |   13 +++++++++++++
 1 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/src/mesa/main/pbo.c b/src/mesa/main/pbo.c
index 4e7e6f9..41ff2ff 100644
--- a/src/mesa/main/pbo.c
+++ b/src/mesa/main/pbo.c
@@ -82,6 +82,19 @@ _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 &&
+          ((GLintptr)offset % _mesa_sizeof_packed_type(type)))
+         return GL_FALSE;
    }
 
    if (sizeAddr == 0)



More information about the mesa-commit mailing list