[Mesa-dev] [PATCH 3/4] mesa: Draw Indirect return wrong error code on unalinged

Marta Lofstedt marta.lofstedt at linux.intel.com
Tue Oct 20 07:19:39 PDT 2015


From: Marta Lofstedt <marta.lofstedt at intel.com>

>From OpenGL 4.4 specification, section 10.4 and
Open GL Es 3.1 section 10.5:
"An INVALID_VALUE error is generated if indirect is not a multiple
of the size, in basic machine units, of uint."

However, the current code follow the ARB_draw_indirect:
https://www.opengl.org/registry/specs/ARB/draw_indirect.txt
"INVALID_OPERATION is generated by DrawArraysIndirect and
DrawElementsIndirect if commands source data beyond the end
of a buffer object or if <indirect> is not word aligned."

Signed-off-by: Marta Lofstedt <marta.lofstedt at linux.intel.com>
---
 src/mesa/main/api_validate.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c
index 7062cbd..a084362 100644
--- a/src/mesa/main/api_validate.c
+++ b/src/mesa/main/api_validate.c
@@ -732,10 +732,19 @@ valid_draw_indirect(struct gl_context *ctx,
    /* From the ARB_draw_indirect specification:
     * "An INVALID_OPERATION error is generated [...] if <indirect> is no
     *  word aligned."
+    * However, from OpenGL version 4.4. section 10.5
+    * and OpenGL ES 3.1, section 10.6:
+    * "An INVALID_VALUE error is generated if indirect is not a multiple
+    * of the size, in basic machine units, of uint."
     */
    if ((GLsizeiptr)indirect & (sizeof(GLuint) - 1)) {
-      _mesa_error(ctx, GL_INVALID_OPERATION,
-                  "%s(indirect is not aligned)", name);
+      if ((_mesa_is_desktop_gl(ctx) && ctx->Version >= 44) ||
+          _mesa_is_gles31(ctx))
+         _mesa_error(ctx, GL_INVALID_VALUE,
+                     "%s(indirect is not aligned)", name);
+      else
+         _mesa_error(ctx, GL_INVALID_OPERATION,
+                     "%s(indirect is not aligned)", name);
       return GL_FALSE;
    }
 
-- 
2.1.4



More information about the mesa-dev mailing list