[Mesa-dev] [PATCH v2 33/42] glsl: Check for SSBO variable in SSBO atomic lowering
Jordan Justen
jordan.l.justen at intel.com
Tue Nov 17 21:55:05 PST 2015
When an atomic function is called, we need to check to see if it is
for an SSBO variable before lowering it to the SSBO specific intrinsic
function.
v2:
* is_in_buffer_block => is_in_shader_storage_block (Iago)
Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
Cc: Samuel Iglesias Gonsalvez <siglesias at igalia.com>
Cc: Iago Toral Quiroga <itoral at igalia.com>
Reviewed-by: Iago Toral Quiroga <itoral at igalia.com>
---
src/glsl/lower_ubo_reference.cpp | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/src/glsl/lower_ubo_reference.cpp b/src/glsl/lower_ubo_reference.cpp
index 915db6c..667a80e 100644
--- a/src/glsl/lower_ubo_reference.cpp
+++ b/src/glsl/lower_ubo_reference.cpp
@@ -862,6 +862,20 @@ lower_ubo_reference_visitor::lower_ssbo_atomic_intrinsic(ir_call *ir)
ir_call *
lower_ubo_reference_visitor::check_for_ssbo_atomic_intrinsic(ir_call *ir)
{
+ exec_list& params = ir->actual_parameters;
+
+ if (params.length() < 2)
+ return ir;
+
+ ir_rvalue *rvalue =
+ ((ir_instruction *) params.get_head())->as_rvalue();
+ if (!rvalue)
+ return ir;
+
+ ir_variable *var = rvalue->variable_referenced();
+ if (!var || !var->is_in_shader_storage_block())
+ return ir;
+
const char *callee = ir->callee_name();
if (!strcmp("__intrinsic_atomic_add", callee) ||
!strcmp("__intrinsic_atomic_min", callee) ||
--
2.6.2
More information about the mesa-dev
mailing list