From: Jordan Justen Date: Sat, 10 Oct 2015 00:43:53 +0000 (-0700) Subject: glsl: Check for SSBO variable in SSBO atomic lowering X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c2e6cfbd78d25849a4e91e3ce3bb413b32ae337e;p=mesa.git glsl: Check for SSBO variable in SSBO atomic lowering 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 Reviewed-by: Iago Toral Quiroga Reviewed-by: Kristian Høgsberg --- diff --git a/src/glsl/lower_ubo_reference.cpp b/src/glsl/lower_ubo_reference.cpp index bbaf46160da..e088f4624be 100644 --- a/src/glsl/lower_ubo_reference.cpp +++ b/src/glsl/lower_ubo_reference.cpp @@ -979,6 +979,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) ||