[Mesa-dev] [PATCH 00/12] anv: Add support for the variablePointers feature

Kenneth Graunke kenneth at whitecape.org
Wed Nov 22 00:28:34 UTC 2017


On Thursday, October 19, 2017 11:04:02 AM PST Jason Ekstrand wrote:
> 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 <cwabbott0 at gmail.com>
> Cc: Chad Versace <chadversary at chromium.org>
> Cc: Dave Airlie <airlied at 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

Patches 1-7 (the above) and patch 10 (rename) are:
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

I'm planning to review the rest as well, but that's going to take a
little longer, so I figured I'd send this out now in case you want to
land the refactors sooner.

>   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(-)
> 
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part.
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20171121/c9028554/attachment.sig>


More information about the mesa-dev mailing list