[Mesa-dev] [PATCH 2/4] mesa: Draw Indirect is not allowed when no vertex array binding exists.
Lofstedt, Marta
marta.lofstedt at intel.com
Wed Oct 21 05:32:34 PDT 2015
> -----Original Message-----
> From: mesa-dev [mailto:mesa-dev-bounces at lists.freedesktop.org] On
> Behalf Of Tapani Pälli
> Sent: Wednesday, October 21, 2015 1:25 PM
> To: Marek Olšák
> Cc: mesa-dev at lists.freedesktop.org
> Subject: Re: [Mesa-dev] [PATCH 2/4] mesa: Draw Indirect is not allowed
> when no vertex array binding exists.
>
> On 10/21/2015 01:41 PM, Marek Olšák wrote:
> > On Wed, Oct 21, 2015 at 7:16 AM, Tapani Pälli <tapani.palli at intel.com>
> wrote:
> >> On 10/20/2015 08:54 PM, Marek Olšák wrote:
> >>> On Tue, Oct 20, 2015 at 4:19 PM, Marta Lofstedt
> >>> <marta.lofstedt at linux.intel.com> wrote:
> >>>> From: Marta Lofstedt <marta.lofstedt at intel.com>
> >>>>
> >>>> OpenGL ES 3.1 spec. section 10.5:
> >>>> "An INVALID_OPERATION error is generated if zero is bound to
> >>>> VERTEX_ARRAY_BINDING, DRAW_INDIRECT_BUFFER or to any enabled
> vertex
> >>>> array."
> >>>>
> >>>> Signed-off-by: Marta Lofstedt <marta.lofstedt at linux.intel.com>
> >>>> ---
> >>>> src/mesa/main/api_validate.c | 14 ++++++++++++++
> >>>> 1 file changed, 14 insertions(+)
> >>>>
> >>>> diff --git a/src/mesa/main/api_validate.c
> >>>> b/src/mesa/main/api_validate.c index c5628f5..7062cbd 100644
> >>>> --- a/src/mesa/main/api_validate.c
> >>>> +++ b/src/mesa/main/api_validate.c
> >>>> @@ -711,6 +711,20 @@ valid_draw_indirect(struct gl_context *ctx,
> >>>> return GL_FALSE;
> >>>> }
> >>>>
> >>>> + /*
> >>>> + * OpenGL ES 3.1 spec. section 10.5:
> >>>> + * "An INVALID_OPERATION error is generated if zero is bound to
> >>>> + * VERTEX_ARRAY_BINDING, DRAW_INDIRECT_BUFFER or to any
> enabled
> >>>> + * vertex array."
> >>>> + * OpenGL 4.5 spec. section 10.4:
> >>>> + * "An INVALID_OPERATION error is generated if zero is bound to
> >>>> + * DRAW_INDIRECT_BUFFER, or if no element array buffer is bound"
> >>>> + */
> >>>> + if (!_mesa_is_bufferobj(ctx->Array.ArrayBufferObj)) {
> >>>> + _mesa_error(ctx, GL_INVALID_OPERATION,
> >>>> + "%s(No VBO is bound)", name);
> >>>> + }
> >>> NAK.
> >>>
> >>> VERTEX_ARRAY_BINDING is a VAO. Array.ArrayBufferObj is from
> glBindBuffer.
> >>
> >> This check is valid, it is not against VERTEX_ARRAY_BINDING. Note
> >> "any enabled vertex array", we hit this weird situation when client
> >> has a VAO bound and has enabled vertex attrib array but has not bound
> any VBO to it.
> > No, it's invalid. The check has absolutely nothing to do with enabled
> > vertex arrays and draw calls. Absolutely nothing. glBindBuffer changes
> > a latched state, which means it doesn't do anything by itself, it only
> > affects other functions that change states. The functions affected by
> > glBindBuffer(GL_ARRAY_BUFFER, ..) are glVertexAttribPointer, etc. not
> > glDraw*. If you called glBindBuffer(GL_ARRAY_BUFFER, ..) right before
> > a Draw call, it wouldn't do anything to vertex arrays and buffers, but
> > it would pass the check.
>
> OK my understanding was that reason why this change fixes the bug is that
> ctx->Array.ArrayBufferObj is 0 for the default VAO and never 0 when vertex
> array buffer binding has been set, and this would happen when we would
> have an VBO bound. I will spend some more time to understand this.
If you have access to the CTS it is these tests that this fixed:
ES31-CTS.draw_indirect.negative-noVBO-arrays
ES31-CTS.draw_indirect.negative-noVBO-elements
My understanding is as Tapanis above, I was trying to come up with a method
of not needing to loop through the VertexAttribPointers.
Also, I have mis-quoted the spec. I should have only quoted the:
"or any enabled vertex arrays" and limit to gles 3.1.
>
> > Now, where does this patch check "enabled vertex arrays"? Nowhere. It
> > doesn't check VERTEX_ARRAY_BINDING, it doesn't check
> > DRAW_INDIRECT_BUFFER, and it doesn't check enabled vertex arrays. That
> > whole comment is completely useless there.
> >
> > Sorry if I'm too direct, but you should really think more before
> > making such statements and giving Reviewed-by.
>
> // Tapani
>
> _______________________________________________
> 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