[Mesa-dev] [PATCH v3 31/32] glsl: teach lower_ubo_reference about samplers inside structures

Samuel Pitoiset samuel.pitoiset at gmail.com
Thu May 4 13:06:10 UTC 2017



On 05/04/2017 02:45 PM, Nicolai Hähnle wrote:
> On 02.05.2017 22:53, Samuel Pitoiset wrote:
>> In a situation like:
>>
>> (tex vec4 (record_ref (var_ref f)  tex)  (constant vec2 (0.000000 
>> 0.000000))  0 1 () )
>>
>> The sampler needs to be lowered, otherwise this ends up with
>> "ir_dereference_variable @ 0x229a100 specifies undeclared variable
>> `ubo_load_temp' @ 0x2290440"
>>
>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> 
> I think this loses image format / memory qualifiers. That's 
> unfortunately not very easy to test for, but can you make sure the 
> qualifiers survive to the TGSI?

This is for samplers, not images.

About images, the qualifiers survive to the TGSI. I have two follow-up 
patches that I will submit after this series (to avoid too much 
confusion), but it's working fine.

> 
> Thanks,
> Nicolai
> 
> 
>> ---
>>  src/compiler/glsl/lower_ubo_reference.cpp | 15 +++++++++++++++
>>  1 file changed, 15 insertions(+)
>>
>> diff --git a/src/compiler/glsl/lower_ubo_reference.cpp 
>> b/src/compiler/glsl/lower_ubo_reference.cpp
>> index bfaddac3ad..72f0fcf432 100644
>> --- a/src/compiler/glsl/lower_ubo_reference.cpp
>> +++ b/src/compiler/glsl/lower_ubo_reference.cpp
>> @@ -104,6 +104,7 @@ public:
>>     ir_call *lower_ssbo_atomic_intrinsic(ir_call *ir);
>>     ir_call *check_for_ssbo_atomic_intrinsic(ir_call *ir);
>>     ir_visitor_status visit_enter(ir_call *ir);
>> +   ir_visitor_status visit_enter(ir_texture *ir);
>>
>>     struct gl_linked_shader *shader;
>>     bool clamp_block_indices;
>> @@ -1090,6 +1091,20 @@ 
>> lower_ubo_reference_visitor::visit_enter(ir_call *ir)
>>  }
>>
>>
>> +ir_visitor_status
>> +lower_ubo_reference_visitor::visit_enter(ir_texture *ir)
>> +{
>> +   ir_dereference *sampler = ir->sampler;
>> +
>> +   if (sampler->ir_type == ir_type_dereference_record) {
>> +      handle_rvalue((ir_rvalue **)&ir->sampler);
>> +      return visit_continue_with_parent;
>> +   }
>> +
>> +   return rvalue_visit(ir);
>> +}
>> +
>> +
>>  } /* unnamed namespace */
>>
>>  void
>>
> 
> 


More information about the mesa-dev mailing list