[PATCH] etnaviv: Emit vertex buffers consecutively

Christian Gmeiner christian.gmeiner at gmail.com
Thu Nov 23 21:27:03 UTC 2017


I pushed this patch - looks we are fine to land the GC7000 patch series. I have
planed to this tomorrow.

2017-11-23 22:21 GMT+01:00 Christian Gmeiner <christian.gmeiner at gmail.com>:
> 2017-11-23 10:08 GMT+01:00 Wladimir J. van der Laan <laanwj at gmail.com>:
>> Vertex buffer legacy state is no longer picked up with new drawing
>> commands. Change to use different cases depending on the number of
>> vertex streams in the GPU specs.
>>
>> This results in slightly more compact state emission as well, on all
>> vivantes.
>>
>> This needs to go in before "etnaviv: Use only DRAW_INSTANCED on GC3000+"
>> (and thus before the GC7000 patch series).
>
> Reviewed-by: Christian Gmeiner <christian.gmeiner at gmail.com>
>
>> ---
>>  src/gallium/drivers/etnaviv/etnaviv_emit.c | 8 ++++----
>>  1 file changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/src/gallium/drivers/etnaviv/etnaviv_emit.c b/src/gallium/drivers/etnaviv/etnaviv_emit.c
>> index 999d2ca..41504ac 100644
>> --- a/src/gallium/drivers/etnaviv/etnaviv_emit.c
>> +++ b/src/gallium/drivers/etnaviv/etnaviv_emit.c
>> @@ -391,18 +391,18 @@ etna_emit_state(struct etna_context *ctx)
>>        /*00644*/ EMIT_STATE_RELOC(FE_INDEX_STREAM_BASE_ADDR, &ctx->index_buffer.FE_INDEX_STREAM_BASE_ADDR);
>>        /*00648*/ EMIT_STATE(FE_INDEX_STREAM_CONTROL, ctx->index_buffer.FE_INDEX_STREAM_CONTROL);
>>     }
>> -   if (likely(dirty & (ETNA_DIRTY_VERTEX_BUFFERS))) {
>> +   if (likely((dirty & (ETNA_DIRTY_VERTEX_BUFFERS) && ctx->specs.stream_count == 1))) {
>>        /*0064C*/ EMIT_STATE_RELOC(FE_VERTEX_STREAM_BASE_ADDR, &ctx->vertex_buffer.cvb[0].FE_VERTEX_STREAM_BASE_ADDR);
>>        /*00650*/ EMIT_STATE(FE_VERTEX_STREAM_CONTROL, ctx->vertex_buffer.cvb[0].FE_VERTEX_STREAM_CONTROL);
>>     }
>>     if (likely(dirty & (ETNA_DIRTY_INDEX_BUFFER))) {
>>        /*00674*/ EMIT_STATE(FE_PRIMITIVE_RESTART_INDEX, ctx->index_buffer.FE_PRIMITIVE_RESTART_INDEX);
>>     }
>> -   if (likely(dirty & (ETNA_DIRTY_VERTEX_BUFFERS))) {
>> -      for (int x = 1; x < ctx->vertex_buffer.count; ++x) {
>> +   if (likely((dirty & (ETNA_DIRTY_VERTEX_BUFFERS)) && ctx->specs.stream_count > 1)) {
>> +      for (int x = 0; x < ctx->vertex_buffer.count; ++x) {
>>           /*00680*/ EMIT_STATE_RELOC(FE_VERTEX_STREAMS_BASE_ADDR(x), &ctx->vertex_buffer.cvb[x].FE_VERTEX_STREAM_BASE_ADDR);
>>        }
>> -      for (int x = 1; x < ctx->vertex_buffer.count; ++x) {
>> +      for (int x = 0; x < ctx->vertex_buffer.count; ++x) {
>>           if (ctx->vertex_buffer.cvb[x].FE_VERTEX_STREAM_BASE_ADDR.bo) {
>>              /*006A0*/ EMIT_STATE(FE_VERTEX_STREAMS_CONTROL(x), ctx->vertex_buffer.cvb[x].FE_VERTEX_STREAM_CONTROL);
>>           }
>> --
>> 2.7.4
>>
>
>
>
> --
> greets
> --
> Christian Gmeiner, MSc
>
> https://christian-gmeiner.info



-- 
greets
--
Christian Gmeiner, MSc

https://christian-gmeiner.info


More information about the etnaviv mailing list