summaryrefslogtreecommitdiffstats
path: root/src/compiler/glsl/lower_shared_reference.cpp
diff options
context:
space:
mode:
authorIlia Mirkin <imirkin@alum.mit.edu>2015-12-28 14:03:50 -0500
committerIlia Mirkin <imirkin@alum.mit.edu>2016-01-29 21:05:08 -0500
commit35f8488668fe055ffc8d0f9f897fa73e28e5e00d (patch)
tree7a87a460a916aadce6e9ce4df5f26211cbb1c893 /src/compiler/glsl/lower_shared_reference.cpp
parent2b089c7ffe2c46a5d5d01ec315fb3e5a07695d44 (diff)
downloadexternal_mesa3d-35f8488668fe055ffc8d0f9f897fa73e28e5e00d.zip
external_mesa3d-35f8488668fe055ffc8d0f9f897fa73e28e5e00d.tar.gz
external_mesa3d-35f8488668fe055ffc8d0f9f897fa73e28e5e00d.tar.bz2
glsl: keep track of ssbo variable being accessed, add access params
Currently any access params (coherent/volatile/restrict) are being lost when lowering to the ssbo load/store intrinsics. Keep track of the variable being used, and bake its access params in as the last arg of the load/store intrinsics. If the variable is accessed via an instance block, then 'variable' points to the instance block variable and not the field inside the instance block that we are accessing. In order to check access parameters for the field itself we need to detect this case and keep track of the corresponding field struct so we can extract the specific field access information from there instead. Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Marek Olšák <marek.olsak@amd.com> (v1) v1 -> v2: add tracking of struct field v2 -> v3: minor adjustments based on Iago's feedback Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Diffstat (limited to 'src/compiler/glsl/lower_shared_reference.cpp')
-rw-r--r--src/compiler/glsl/lower_shared_reference.cpp6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/compiler/glsl/lower_shared_reference.cpp b/src/compiler/glsl/lower_shared_reference.cpp
index 533cd92..1249969 100644
--- a/src/compiler/glsl/lower_shared_reference.cpp
+++ b/src/compiler/glsl/lower_shared_reference.cpp
@@ -142,7 +142,7 @@ lower_shared_reference_visitor::handle_rvalue(ir_rvalue **rvalue)
setup_buffer_access(mem_ctx, var, deref,
&offset, &const_offset,
- &row_major, &matrix_columns, packing);
+ &row_major, &matrix_columns, NULL, packing);
/* Now that we've calculated the offset to the start of the
* dereference, walk over the type and emit loads into a temporary.
@@ -210,7 +210,7 @@ lower_shared_reference_visitor::handle_assignment(ir_assignment *ir)
setup_buffer_access(mem_ctx, var, deref,
&offset, &const_offset,
- &row_major, &matrix_columns, packing);
+ &row_major, &matrix_columns, NULL, packing);
deref = new(mem_ctx) ir_dereference_variable(store_var);
@@ -370,7 +370,7 @@ lower_shared_reference_visitor::lower_shared_atomic_intrinsic(ir_call *ir)
setup_buffer_access(mem_ctx, var, deref,
&offset, &const_offset,
- &row_major, &matrix_columns, packing);
+ &row_major, &matrix_columns, NULL, packing);
assert(offset);
assert(!row_major);