Not to be confused with variablePointersStorageBuffer which is the subset of VK_KHR_variable_pointers required to enable the extension. This gives us "full" support for variable pointers.
The approach chosen here was to do the lowering to _shared intrinsics directly in spirv_to_nir instead of using the _var intrinsics and using nir_lower_io. Pointers with a storage class of Workgroup are given an implicit std430 layout and now go through the same offset pointer paths as UBO and SSBO access. The whole thing really ended up working out rather cleanly. There are some downsides to this approach. One, is that we can't delete unused shared variables post-optimization. Also, the driver may be able to handle better than std430. Both of these can lead to some waisted SLM space. This also means that we can't do any deref-based load/store elimination optimizations on SLM but we didn't really before so that's no great loss; SLM is now exactly as hard to optimize as SSBOs. Connor, Yes, I know that this is not quite the approach you were suggesting on IRC. I considered how we might add some sort of deref intrinsic and I don't see a good way of doing so without rewriting large chunks of NIR. I think that rewrite is probably worth it some day but that day is not today. We people asking for this feature so I really don't want to delay on a major NIR rewrite. Cc: Connor Abbott <cwabbo...@gmail.com> Cc: Chad Versace <chadvers...@chromium.org> Cc: Dave Airlie <airl...@redhat.com> Jason Ekstrand (12): spirv: Drop the impl field from vtn_builder spirv: Only emit functions which are actually used spirv: Use a dereference instead of vtn_variable_resource_index spirv: Add a switch statement for the block store opcode spirv: Refactor the base case of offset_pointer_dereference spirv: Convert the supported_extensions struct to spirv_options spirv: Refactor a couple of pointer query helpers spirv: Use offset_pointer_dereference to instead of get_vulkan_resource_index spirv: Add theoretical support for single component pointers spirv: Rename get_shared_nir_atomic_op to get_var_nir_atomic_op spirv: Add support for lowering workgroup access to offsets anv: Add support for the variablePointers feature src/amd/vulkan/radv_shader.c | 23 ++-- src/compiler/spirv/nir_spirv.h | 34 ++++-- src/compiler/spirv/spirv_to_nir.c | 180 ++++++++++++++++++++++++----- src/compiler/spirv/vtn_cfg.c | 4 +- src/compiler/spirv/vtn_private.h | 30 +++-- src/compiler/spirv/vtn_variables.c | 229 ++++++++++++++++++++++++------------- src/intel/vulkan/anv_device.c | 2 +- src/intel/vulkan/anv_pipeline.c | 25 ++-- 8 files changed, 372 insertions(+), 155 deletions(-) -- 2.5.0.400.gff86faf _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev