[Mesa-dev] [PATCH 00/26] ARB_gl_spirv: ubo/ssbo support
Jason Ekstrand
jason at jlekstrand.net
Sat Sep 15 16:35:40 UTC 2018
On Sat, Sep 15, 2018 at 11:19 AM Alejandro Piñeiro <apinheiro at igalia.com>
wrote:
> Hi,
>
> this series adds the support for UBO and SSBO. The following patches
> can be classified as:
>
> * Patches 1-8: changes on spirv to nir to take into account ubo and
> ssbo, so it would be compatible to what OpenGL expects (like having
> a interface_type, the correct mode, etc).
>
> * Patch 09: some nir wrappers over glsl_types methods to be used
> later on the ARB_gl_spirv nir linker.
>
> * Patches 10-13: adding the explicit matrix stride, and the explicit
> array stride on glsl_types, their nir C-wrappers, and the proper
> filling up on the spirv to nir pass. This is needed because on
> ARB_gl_spirv the layouts are gone, and are mapped with explicits
> offsets/array strides/matrix strides. Spec quotes on their
> patches. The array stride patch was somewhat more intrusive that
> what I liked, but it was the best option we found.
>
I'm very confused as to why all this is needed. We already have that
information in vtn_type and not putting it in the glsl_type means that we
get type equality when two types have the same basic structure even if it's
not the same memory layout. Does ARB_gl_spirv need it in NIR for
introspection or linking or something? I thought the introspection was all
gone. It certainly doesn't need it to compute offsets because we're
already doing that in spirv_to_nir. What's so different about the way GL
uses SPIR-V?
--Jason
> * Patch 14: is_in_ubo/is_in_ssbo/is_in_block helpers on nir.h,
> equivalent to the already existing at ir.h
>
> * Patches 15-16: lowering of vulkan_resource_index. Right now the nir
> shader from spirv to nir includes this intrinsic. We found more
> easy to lower it to something that OpenGL could understand, instead
> of change spirv to nir to return one intrinsic or the other,
> depending if you are on vulkan or opengl.
>
> * Patch 17: add the code to link blocks on the ARB_gl_spirv
> codepath. This became a kind of uber patch, but we found more
> natural to keep in one commit, instead of split it. We are open to
> suggestions.
>
> * Patches 18-22: updates on the uniform linking, now that ubo/ssbos
> are supported.
>
> * Patch 23: add uniform blocks to the resource list.
>
> * Patches 24-25: call to the ARB_gl_spirv ubo/ssbo linking method on
> the i965 driver, plus a nitpicky clean-up.
>
> * Patch 26: add some name NULL checks when querying
> NUM_ACTIVE_VARIABLES. We added several of such queries on our
> tests, so it is somewhat unrelated nice to have.
>
> The tree for this series can be found on the following repository:
> https://github.com/Igalia/mesa/tree/arb_gl_spirv-series6-ubo-ssbo-v1
>
> And can be tested with the following piglit branch:
> https://github.com/Igalia/piglit/tree/arb_gl_spirv-series5-ubo-ssbo-v1
>
>
> Alejandro Piñeiro (22):
> spirv/nir: translate uniform blocks
> spirv/nir: translate ssbo
> spirv/nir: setting interface type for ubos/ssbos
> spirv/nir: fill up nir variable info for ubos and ssbo
> spirv/nir: include SPIR-V explicit offset on the glsl struct type
> spirv/nir: include row major coming from SPIR-V on the glsl type
> spirv/nir: don't set interface_type if it is not a struct
> nir/types: add three new wrapper helpers
> glsl_types/nir: add matrix_stride plus nir wrapper helpers
> spirv/nir: fill glsl_struct_field explicit_matrix_stride
> glsl_types/nir: add explicit_array_stride plus nir wrapper helpers
> spirv/nir: fill glsl_type array stride
> nir: add is_in_ubo/ssbo/block helpers
> nir/linker: add gl_nir_link_uniform_blocks.c
> nir/linker: fill is_shader_storage for uniforms
> nir/linker: use only the array element type for array of ssbo/ubo
> nir/linker: fill up uniform_storage with explicit data
> nir/linker: update already processed uniforms search for UBOs/SSBOs
> nir/linker: add program ubo/ssbo at the resource list
> i965: use GLboolean for all brw_link_shader returns
> i965: call to gl_nir_link_uniform_blocks
> mesa: add NULL name check for NUM_ACTIVE_VARIABLES query
>
> Antia Puentes (1):
> nir/linker: Set the uniform's block_index
>
> Neil Roberts (3):
> spirv/nir: Handle location decorations on block interface members
> nir/linker/i965: Lower vulkan_resource_index during linking
> nir/linker: handle non-ubo uses of vulkan_resource_index
>
> src/compiler/Makefile.sources | 2 +
> src/compiler/glsl/gl_nir.h | 4 +
> src/compiler/glsl/gl_nir_link_uniform_blocks.c | 713
> +++++++++++++++++++++
> src/compiler/glsl/gl_nir_link_uniforms.c | 160 ++++-
> src/compiler/glsl/gl_nir_linker.c | 14 +
> src/compiler/glsl/gl_nir_linker.h | 3 +
> src/compiler/glsl/gl_nir_lower_samplers_as_deref.c | 2 +-
> .../glsl/gl_nir_lower_vulkan_resource_index.c | 163 +++++
> src/compiler/glsl/meson.build | 2 +
> src/compiler/glsl_types.cpp | 31 +-
> src/compiler/glsl_types.h | 23 +-
> src/compiler/nir/nir.h | 22 +
> src/compiler/nir/nir_lower_io_arrays_to_elements.c | 3 +-
> src/compiler/nir/nir_split_per_member_structs.c | 3 +-
> src/compiler/nir/nir_split_vars.c | 3 +-
> src/compiler/nir_types.cpp | 47 +-
> src/compiler/nir_types.h | 20 +-
> src/compiler/spirv/spirv_to_nir.c | 24 +-
> src/compiler/spirv/vtn_private.h | 6 +
> src/compiler/spirv/vtn_variables.c | 90 ++-
> src/mesa/drivers/dri/i965/brw_link.cpp | 12 +-
> src/mesa/main/shader_query.cpp | 30 +-
> 22 files changed, 1301 insertions(+), 76 deletions(-)
> create mode 100644 src/compiler/glsl/gl_nir_link_uniform_blocks.c
> create mode 100644 src/compiler/glsl/gl_nir_lower_vulkan_resource_index.c
>
> --
> 2.14.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180915/62eafde1/attachment.html>
More information about the mesa-dev
mailing list