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

Ian Romanick idr at freedesktop.org
Wed Oct 21 08:47:48 PDT 2015


On 10/20/2015 01:03 PM, Ilia Mirkin wrote:
> On Tue, Oct 20, 2015 at 10:19 AM, Marta Lofstedt
> <marta.lofstedt at linux.intel.com> wrote:
>> 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
> 
> 4.4,
> 
> I double-checked and you're right -- it was INVALID_OPERATION in GL
> 4.3, but INVALID_VALUE in GL 4.4. Weird.

We (Khronos) changed the error because, in fact, the value is invalid.
Generating GL_INVALID_VALUE is more consistent with other similar errors. :)

Since Khronos doesn't usually update older specs, we (Mesa) usually
interpret such changes as clarifications that should be retroactively
applied.  I really hate having a mess of "if this API generate this
error otherwise generate that error."

Let's just always generate GL_INVALID_VALUE.

> Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>
> 
> Should probably fix up the piglit test as well, if any.

Yes.  My recommendation would be to accept either error in desktop GL <=
4.3, but only accept GL_INVALID_VALUE in other versions / APIs.

>> +    * 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
>> mesa-dev at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev



More information about the mesa-dev mailing list