glsl: keep track of ssbo variable being accessed, add access params
authorIlia Mirkin <imirkin@alum.mit.edu>
Mon, 28 Dec 2015 19:03:50 +0000 (14:03 -0500)
committerIlia Mirkin <imirkin@alum.mit.edu>
Sat, 30 Jan 2016 02:05:08 +0000 (21:05 -0500)
commit35f8488668fe055ffc8d0f9f897fa73e28e5e00d
tree7a87a460a916aadce6e9ce4df5f26211cbb1c893
parent2b089c7ffe2c46a5d5d01ec315fb3e5a07695d44
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>
src/compiler/glsl/lower_buffer_access.cpp
src/compiler/glsl/lower_buffer_access.h
src/compiler/glsl/lower_shared_reference.cpp
src/compiler/glsl/lower_ubo_reference.cpp
src/compiler/shader_enums.h