[Mesa-dev] [PATCH] r600g: add proper support for VGT_FLUSH

Alex Deucher alexdeucher at gmail.com
Fri Aug 28 07:15:12 PDT 2015


On Fri, Aug 28, 2015 at 12:35 AM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
> Just an observation... this was previously only done for EG+, while
> now R600/R700 will get this too.

VGT flush is valid on r6xx/r7xx too and probably should have been
applied for them as well originally.

Alex


>
> On Fri, Aug 28, 2015 at 12:31 AM, Dave Airlie <airlied at gmail.com> wrote:
>> From: Dave Airlie <airlied at redhat.com>
>>
>> The geom shader rings require a VGT FLUSH, but up until now
>> it was just hacked into the function, add proper support for it.
>>
>> Signed-off-by: Dave Airlie <airlied at redhat.com>
>> ---
>>  src/gallium/drivers/r600/evergreen_state.c | 9 +--------
>>  src/gallium/drivers/r600/r600_hw_context.c | 5 +++++
>>  src/gallium/drivers/r600/r600_pipe.h       | 3 ++-
>>  3 files changed, 8 insertions(+), 9 deletions(-)
>>
>> diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c
>> index 6a91d47..a44646a 100644
>> --- a/src/gallium/drivers/r600/evergreen_state.c
>> +++ b/src/gallium/drivers/r600/evergreen_state.c
>> @@ -2173,10 +2173,6 @@ static void evergreen_emit_gs_rings(struct r600_context *rctx, struct r600_atom
>>         struct r600_gs_rings_state *state = (struct r600_gs_rings_state*)a;
>>         struct r600_resource *rbuffer;
>>
>> -       r600_write_config_reg(cs, R_008040_WAIT_UNTIL, S_008040_WAIT_3D_IDLE(1));
>> -       radeon_emit(cs, PKT3(PKT3_EVENT_WRITE, 0, 0));
>> -       radeon_emit(cs, EVENT_TYPE(EVENT_TYPE_VGT_FLUSH));
>> -
>>         if (state->enable) {
>>                 rbuffer =(struct r600_resource*)state->esgs_ring.buffer;
>>                 r600_write_config_reg(cs, R_008C40_SQ_ESGS_RING_BASE,
>> @@ -2201,10 +2197,7 @@ static void evergreen_emit_gs_rings(struct r600_context *rctx, struct r600_atom
>>                 r600_write_config_reg(cs, R_008C44_SQ_ESGS_RING_SIZE, 0);
>>                 r600_write_config_reg(cs, R_008C4C_SQ_GSVS_RING_SIZE, 0);
>>         }
>> -
>> -       r600_write_config_reg(cs, R_008040_WAIT_UNTIL, S_008040_WAIT_3D_IDLE(1));
>> -       radeon_emit(cs, PKT3(PKT3_EVENT_WRITE, 0, 0));
>> -       radeon_emit(cs, EVENT_TYPE(EVENT_TYPE_VGT_FLUSH));
>> +       rctx->b.flags |= R600_CONTEXT_WAIT_3D_IDLE | R600_CONTEXT_VGT_FLUSH;
>>  }
>>
>>  void cayman_init_common_regs(struct r600_command_buffer *cb,
>> diff --git a/src/gallium/drivers/r600/r600_hw_context.c b/src/gallium/drivers/r600/r600_hw_context.c
>> index 6445151..5cef9dd 100644
>> --- a/src/gallium/drivers/r600/r600_hw_context.c
>> +++ b/src/gallium/drivers/r600/r600_hw_context.c
>> @@ -128,6 +128,11 @@ void r600_flush_emit(struct r600_context *rctx)
>>                 cs->buf[cs->cdw++] = EVENT_TYPE(EVENT_TYPE_PS_PARTIAL_FLUSH) | EVENT_INDEX(4);
>>         }
>>
>> +       if (rctx->b.flags & R600_CONTEXT_VGT_FLUSH) {
>> +               cs->buf[cs->cdw++] = PKT3(PKT3_EVENT_WRITE, 0, 0);
>> +               cs->buf[cs->cdw++] = EVENT_TYPE(EVENT_TYPE_VGT_FLUSH) | EVENT_INDEX(0);
>> +       }
>> +
>>         if (rctx->b.chip_class >= R700 &&
>>             (rctx->b.flags & R600_CONTEXT_FLUSH_AND_INV_CB_META)) {
>>                 cs->buf[cs->cdw++] = PKT3(PKT3_EVENT_WRITE, 0, 0);
>> diff --git a/src/gallium/drivers/r600/r600_pipe.h b/src/gallium/drivers/r600/r600_pipe.h
>> index 3247aba..b77d136 100644
>> --- a/src/gallium/drivers/r600/r600_pipe.h
>> +++ b/src/gallium/drivers/r600/r600_pipe.h
>> @@ -54,9 +54,10 @@
>>  #define R600_CONTEXT_PS_PARTIAL_FLUSH          (R600_CONTEXT_PRIVATE_FLAG << 8)
>>  #define R600_CONTEXT_WAIT_3D_IDLE              (R600_CONTEXT_PRIVATE_FLAG << 9)
>>  #define R600_CONTEXT_WAIT_CP_DMA_IDLE          (R600_CONTEXT_PRIVATE_FLAG << 10)
>> +#define R600_CONTEXT_VGT_FLUSH         (R600_CONTEXT_PRIVATE_FLAG << 11)
>>
>>  /* the number of CS dwords for flushing and drawing */
>> -#define R600_MAX_FLUSH_CS_DWORDS       16
>> +#define R600_MAX_FLUSH_CS_DWORDS       18
>>  #define R600_MAX_DRAW_CS_DWORDS                47
>>  #define R600_TRACE_CS_DWORDS           7
>>
>> --
>> 2.4.3
>>
>> _______________________________________________
>> 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