[Mesa-dev] [PATCH] vbo: fix another GL_LINE_LOOP bug
Charmaine Lee
charmainel at vmware.com
Wed Nov 4 12:56:36 PST 2015
>________________________________________
>From: Brian Paul <brianp at vmware.com>
>Sent: Wednesday, November 4, 2015 12:03 PM
>To: Charmaine Lee; mesa-dev at lists.freedesktop.org
>Subject: Re: [Mesa-dev] [PATCH] vbo: fix another GL_LINE_LOOP bug
>On 11/04/2015 12:40 PM, Charmaine Lee wrote:
>>
>> I concur with Sinclair and Roland that the vbo code is quite tricky.
>> I do have a question, so when the line loop spans multiple vertex buffers,
>> where is 0th vertex stored exactly?
>It depends. If the line loop started in a new/empty VB, the 0th vertex
>is at the start of the buffer. But if the line loop started later in
>the buffer (because another primitive before it), the 0th vertex will be
>at the prim->start position.
>I didn't find the bug that this patch fixes earlier, because my test
>programs all hit the first case. We have to draw at least two
>primitives to hit some of the corner cases.
>> In vbo_exec_End, you are changing src = exec->vtx.buffer_map + last_prim->start * exec->vtx.vertex_size;
>> If the 0th vertex is always copied to the beginning of the buffer, why do you need this change?
>To account for the second case, above.
>> If it was not copied to the beginning of the buffer, couldn't it be overwritten by the subsequent vertices?
>This patch actually fixes a case where subsequent vertices _were_
>overwriting previous vertices when another primitive followed the line
>loop. That's the change at line 846.
So if last_prim->start is 100, and if the line loop spans 3 vertex buffers,
so at the second vbo_exec_wrap_buffers(), can't the original vertex 0 which
is at buffer_map + 100 * vertex_size be already overwritten by the
vertices that are now in the second vertex buffer?
-Charmaine
More information about the mesa-dev
mailing list