summaryrefslogtreecommitdiffstats
path: root/src/compiler/glsl
diff options
context:
space:
mode:
authorSamuel Pitoiset <[email protected]>2017-05-01 15:53:56 +0200
committerSamuel Pitoiset <[email protected]>2017-05-06 16:40:19 +0200
commitd04b0f31d328af95cebec816adfe683a6095bca8 (patch)
treee0f62302142c2cdd9522ab0866dc1b6ad171cfe9 /src/compiler/glsl
parentd550024a7ee2775b282acb761d81f1983ea15bcf (diff)
glsl: teach lower_ubo_reference about samplers inside structures
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 <[email protected]> Reviewed-by: Nicolai Hähnle <[email protected]> Reviewed-by: Timothy Arceri <[email protected]>
Diffstat (limited to 'src/compiler/glsl')
-rw-r--r--src/compiler/glsl/lower_ubo_reference.cpp15
1 files changed, 15 insertions, 0 deletions
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