[Mesa-dev] [PATCH 4/4] vbo: fix VBO optimization regression

Brian Paul brianp at vmware.com
Thu Jan 18 22:11:10 UTC 2018


I just pushed it and updated 
https://bugs.freedesktop.org/show_bug.cgi?id=104690

-Brian

On 01/18/2018 03:10 PM, Ian Romanick wrote:
> Mark: Can you check that this fixes the G33 regression that you
> mentioned to me this morning?
> 
> On 01/17/2018 02:57 PM, Brian Paul wrote:
>> The optimization in change 8e4efdc895ea ("vbo: optimize some display
>> list drawing") missed the loopback case.  This is used when the
>> glBegin/End primitive doesn't have a uniform set of vertex attributes.
>> The new Piglit gl-1.0-dlist-materials test hits this.
>>
>> So check the aligned_vertex_buffer_offset(list) value and adjust the
>> buffer offset accordingly.
>>
>> We also need to remove the 'start == 0' assertion in the loopback
>> code since it no longer applies.
>> ---
>>   src/mesa/vbo/vbo_save_draw.c     | 5 ++++-
>>   src/mesa/vbo/vbo_save_loopback.c | 6 +++---
>>   2 files changed, 7 insertions(+), 4 deletions(-)
>>
>> diff --git a/src/mesa/vbo/vbo_save_draw.c b/src/mesa/vbo/vbo_save_draw.c
>> index 6bccc85..a63e067 100644
>> --- a/src/mesa/vbo/vbo_save_draw.c
>> +++ b/src/mesa/vbo/vbo_save_draw.c
>> @@ -240,8 +240,11 @@ loopback_vertex_list(struct gl_context *ctx,
>>                                    list->vertex_store->bufferobj,
>>                                    MAP_INTERNAL);
>>   
>> +   unsigned buffer_offset =
>> +      aligned_vertex_buffer_offset(list) ? 0 : list->buffer_offset;
>> +
>>      vbo_loopback_vertex_list(ctx,
>> -                            (const GLfloat *)(buffer + list->buffer_offset),
>> +                            (const GLfloat *) (buffer + buffer_offset),
>>                               list->attrsz,
>>                               list->prims,
>>                               list->prim_count,
>> diff --git a/src/mesa/vbo/vbo_save_loopback.c b/src/mesa/vbo/vbo_save_loopback.c
>> index 1dae91b..9c0e937 100644
>> --- a/src/mesa/vbo/vbo_save_loopback.c
>> +++ b/src/mesa/vbo/vbo_save_loopback.c
>> @@ -107,17 +107,17 @@ loopback_prim(struct gl_context *ctx,
>>      GLuint k;
>>   
>>      if (0)
>> -      printf("loopback prim %s(%s,%s) verts %d..%d\n",
>> +      printf("loopback prim %s(%s,%s) verts %d..%d  vsize %d\n",
>>                _mesa_lookup_prim_by_nr(prim->mode),
>>                prim->begin ? "begin" : "..",
>>                prim->end ? "end" : "..",
>> -             start, end);
>> +             start, end,
>> +             vertex_size);
>>   
>>      if (prim->begin) {
>>         CALL_Begin(GET_DISPATCH(), (prim->mode));
>>      }
>>      else {
>> -      assert(start == 0);
>>         start += wrap_count;
>>      }
>>   
>>
> 



More information about the mesa-dev mailing list