From d04b0f31d328af95cebec816adfe683a6095bca8 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Mon, 1 May 2017 15:53:56 +0200 Subject: [PATCH] glsl: teach lower_ubo_reference about samplers inside structures MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Nicolai Hähnle Reviewed-by: Timothy Arceri --- 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 365b8ebc653..71188459cdd 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 -- 2.30.2