[Mesa-dev] [Mesa-stable] [PATCH 3/4] st/glsl_to_tgsi: avoid iterating past the head of the instruction list

Marek Olšák maraeo at gmail.com
Wed Mar 1 17:42:02 UTC 2017


On Wed, Mar 1, 2017 at 5:59 PM, Emil Velikov <emil.l.velikov at gmail.com> wrote:
> On 22 February 2017 at 19:04, Nicolai Hähnle <nhaehnle at gmail.com> wrote:
>> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
>>
>> exec_node::get_prev() does not guard against going past the beginning
>> of the list, so we need to add explicit checks here.
>>
>> Found by ASAN in piglit arb_shader_storage_buffer_object-rendering.
>>
>> Cc: mesa-stable at lists.freedesktop.org
>> ---
>>  src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 11 +++++++++--
>>  1 file changed, 9 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>> index 630f5af..fac41b8 100644
>> --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>> @@ -3603,24 +3603,31 @@ glsl_to_tgsi_visitor::visit_ssbo_intrinsic(ir_call *ir)
>>     }
>>
>>     /* The emit_asm() might have actually split the op into pieces, e.g. for
>>      * double stores. We have to go back and fix up all the generated ops.
>>      */
>>     unsigned op = inst->op;
>>     do {
>>        inst->resource = buffer;
>>        if (access)
>>           inst->buffer_access = access->value.u[0];
>> +
>> +      if (inst == this->instructions.get_head_raw())
>> +         break;
>>        inst = (glsl_to_tgsi_instruction *)inst->get_prev();
>> -      if (inst->op == TGSI_OPCODE_UADD)
>> +
>> +      if (inst->op == TGSI_OPCODE_UADD) {
>> +         if (inst == this->instructions.get_head_raw())
>> +            break;
>>           inst = (glsl_to_tgsi_instruction *)inst->get_prev();
>> -   } while (inst && inst->op == op && inst->resource.file == PROGRAM_UNDEFINED);
>> +      }
>> +   } while (inst->op == op && inst->resource.file == PROGRAM_UNDEFINED);
>>  }
>>
>
> Afaict the patch/equivalent has not landed in master. Short on review
> or simply superseded ?

It applies cleanly, so I'll test piglit and push if there are no regressions.

Marek


More information about the mesa-dev mailing list