From: Marta Lofstedt <[email protected]> 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 <[email protected]> --- 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 _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
