[Mesa-dev] [PATCH 15/15] radeonsi: properly destroy the GS copy shader and scratch_bo for compute

Marek Olšák maraeo at gmail.com
Sat Sep 27 10:30:22 PDT 2014


You can drop the scratch_bo line. Thanks.

Marek

On Sat, Sep 27, 2014 at 5:25 PM, Emil Velikov <emil.l.velikov at gmail.com> wrote:
> Hi Marek,
>
> On the 10.2 tree struct si_shader lacks the scratch_bo member, while
> gs_copy_shader is around. Can you let me know if we should drop the
> scratch_bo unref line or alternatively can you port the commit against 10.2
>
> Thanks
> Emil
>
> On 19/09/14 21:17, Marek Olšák wrote:
>> From: Marek Olšák <marek.olsak at amd.com>
>>
>> Cc: 10.2 10.3 <mesa-stable at lists.freedesktop.org>
>> ---
>>  src/gallium/drivers/radeonsi/si_shader.c | 4 ++++
>>  src/gallium/drivers/radeonsi/si_state.c  | 7 ++++---
>>  2 files changed, 8 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
>> index 7aa65c9..94db1dc 100644
>> --- a/src/gallium/drivers/radeonsi/si_shader.c
>> +++ b/src/gallium/drivers/radeonsi/si_shader.c
>> @@ -2973,5 +2973,9 @@ out:
>>
>>  void si_shader_destroy(struct pipe_context *ctx, struct si_shader *shader)
>>  {
>> +     if (shader->gs_copy_shader)
>> +             si_shader_destroy(ctx, shader->gs_copy_shader);
>> +
>>       r600_resource_reference(&shader->bo, NULL);
>> +     r600_resource_reference(&shader->scratch_bo, NULL);
>>  }
>> diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c
>> index 2aa9aad..ed90f13 100644
>> --- a/src/gallium/drivers/radeonsi/si_state.c
>> +++ b/src/gallium/drivers/radeonsi/si_state.c
>> @@ -2403,9 +2403,10 @@ static void si_delete_shader_selector(struct pipe_context *ctx,
>>
>>       while (p) {
>>               c = p->next_variant;
>> -             if (sel->type == PIPE_SHADER_GEOMETRY)
>> +             if (sel->type == PIPE_SHADER_GEOMETRY) {
>>                       si_pm4_delete_state(sctx, gs, p->pm4);
>> -             else if (sel->type == PIPE_SHADER_FRAGMENT)
>> +                     si_pm4_delete_state(sctx, vs, p->gs_copy_shader->pm4);
>> +             } else if (sel->type == PIPE_SHADER_FRAGMENT)
>>                       si_pm4_delete_state(sctx, ps, p->pm4);
>>               else if (p->key.vs.as_es)
>>                       si_pm4_delete_state(sctx, es, p->pm4);
>> @@ -2418,7 +2419,7 @@ static void si_delete_shader_selector(struct pipe_context *ctx,
>>
>>       free(sel->tokens);
>>       free(sel);
>> - }
>> +}
>>
>>  static void si_delete_vs_shader(struct pipe_context *ctx, void *state)
>>  {
>>
>


More information about the mesa-dev mailing list