[Mesa-dev] [PATCH v3 35/44] glsl: Check for SSBO variable in SSBO atomic lowering

Jordan Justen jordan.l.justen at intel.com
Tue Dec 1 00:19:53 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>
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 6c29009..d72ba78 100644
--- a/src/glsl/lower_ubo_reference.cpp
+++ b/src/glsl/lower_ubo_reference.cpp
@@ -860,6 +860,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 || params.length() > 3)
+      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