[Mesa-dev] [PATCH 11/15] arb_gl_spirv: add calls to several nir lowerings

Alejandro PiƱeiro apinheiro at igalia.com
Fri Jul 20 15:08:40 UTC 2018

For now we are just adding nir lowerings that are needed/mandatory to
get things working. After everything is settled, we would start to add
good-to-have lowerings.

This patch adds the following calls:

  * nir_split_var_copits and nir_split_per_member_structs: as vulkan
    drivers are doing now. See commit
    b0c643d8f579a3e1e45a08f6d9de099f2c45898b ("spirv: Use NIR
    per-member splitting") for more info.

    Without this commit, piglit tests like this crashes:

    And in general most of the shaders that includes any kind of

   * nir_copy_prop: after nir_deref_instr introduction, function calls
    need this. See commit "nir,spirv: Rework function calls"
    (c11833ab24dcba26de1b0a5805e35a5d6761514e) for more info.

Technically this patch is not needed for XFB/Geometry Streams
support. But most of the tests for XFB we use include structs, and in
general is so basic that it makes sense to include in any
subseries. Additionally this is a really safe commit, as it is just
about calling existing nir lowerings.

 src/mesa/main/glspirv.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/mesa/main/glspirv.c b/src/mesa/main/glspirv.c
index ba4a8253671..269bbf4c9e2 100644
--- a/src/mesa/main/glspirv.c
+++ b/src/mesa/main/glspirv.c
@@ -238,6 +238,14 @@ _mesa_spirv_to_nir(struct gl_context *ctx,
+   NIR_PASS_V(nir, nir_copy_prop);
+   /* Split member structs.  We do this before lower_io_to_temporaries so that
+    * it doesn't lower system values to temporaries by accident.
+    */
+   NIR_PASS_V(nir, nir_split_var_copies);
+   NIR_PASS_V(nir, nir_split_per_member_structs);
    return nir;

More information about the mesa-dev mailing list