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

Nicolai Hähnle nhaehnle at gmail.com
Thu May 4 12:45:12 UTC 2017


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?

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
>


-- 
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.


More information about the mesa-dev mailing list