[Mesa-dev] [PATCH] st/nir: Disable varying packing when doing transform feedback.

Eric Anholt eric at anholt.net
Thu Jun 21 23:48:29 UTC 2018


Timothy Arceri <tarceri at itsqueeze.com> writes:

> nir_compact_varyings() is meant to skip over varyings used by xfb:
>
>           /* We can't repack xfb varyings. */
>           if (var->data.always_active_io)
>              continue;
>
> Any idea why that isn't working in this case?

Looks like GLSL IR has that flag wrong.  points.7 has v_var6,7,8,9
transform feedback output, but the IR says:

decl_var shader_out INTERP_MODE_NONE SOMEACT vec4 gl_Position (VARYING_SLOT_POS, 0, 0)
decl_var shader_out INTERP_MODE_NONE SOMEACT float gl_PointSize (VARYING_SLOT_PSIZ.x, 0, 0)
decl_var shader_out INTERP_MODE_FLAT ALWAYSACT  vec4[1] v_var6 (VARYING_SLOT_VAR0, 0, 0)
decl_var shader_out INTERP_MODE_FLAT ALWAYSACT  ivec3 packed:v_var8 (VARYING_SLOT_VAR7.xyz, 0, 0)
decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var0 (VARYING_SLOT_VAR3.x, 0, 0)
decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var0 at 0 (VARYING_SLOT_VAR3.y, 0, 0)
decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var0 at 1 (VARYING_SLOT_VAR3.z, 0, 0)
decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var1 (VARYING_SLOT_VAR4.x, 0, 0)
decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var1 at 2 (VARYING_SLOT_VAR4.y, 0, 0)
decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var1 at 3 (VARYING_SLOT_VAR4.z, 0, 0)
decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var10,v_var9 (VARYING_SLOT_VAR1.x, 0, 0)
decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var10,v_var9 at 4 (VARYING_SLOT_VAR1.y, 0, 0)
decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var10,v_var9 at 5 (VARYING_SLOT_VAR1.z, 0, 0)
decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var10,v_var9 at 6 (VARYING_SLOT_VAR1.w, 0, 0)
decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var11[0] (VARYING_SLOT_VAR5.x, 0, 0)
decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var11[0]@7 (VARYING_SLOT_VAR5.y, 0, 0)
decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var11[0]@8 (VARYING_SLOT_VAR5.z, 0, 0)
decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var2,v_var5,v_var7[0],v_var7[1] (VARYING_SLOT_VAR2.x, 0, 0)
decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var2,v_var5,v_var7[0],v_var7[1]@9 (VARYING_SLOT_VAR2.y, 0, 0)
decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var2,v_var5,v_var7[0],v_var7[1]@10 (VARYING_SLOT_VAR2.z, 0, 0)
decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var2,v_var5,v_var7[0],v_var7[1]@11 (VARYING_SLOT_VAR2.w, 0, 0)
decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var3 (VARYING_SLOT_VAR6.x, 0, 0)
decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var3 at 12 (VARYING_SLOT_VAR6.y, 0, 0)
decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var3 at 13 (VARYING_SLOT_VAR6.z, 0, 0)
decl_var centroid shader_out INTERP_MODE_NONE SOMEACT float v_var4 (VARYING_SLOT_VAR8.x, 0, 0)
decl_var centroid shader_out INTERP_MODE_NONE SOMEACT float v_var4 at 14 (VARYING_SLOT_VAR8.y, 0, 0)
decl_var centroid shader_out INTERP_MODE_NONE SOMEACT float v_var4 at 15 (VARYING_SLOT_VAR8.z, 0, 0)
decl_var centroid shader_out INTERP_MODE_NONE SOMEACT float v_var4 at 16 (VARYING_SLOT_VAR8.w, 0, 0)

However, even if I make lower_packed_varyings.cpp flag those as always
active, I still get my varyings reordered if I revert my change to not
call nir_compact_varyings:

 decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var0 (VARYING_SLOT_VAR12.x, 5, 0)
 decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var0 at 0 (VARYING_SLOT_VAR12.y, 5, 0)
 decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var0 at 1 (VARYING_SLOT_VAR12.z, 5, 0)
-decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var1 (VARYING_SLOT_VAR13.x, 6, 0)
-decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var1 at 2 (VARYING_SLOT_VAR13.y, 6, 0)
+decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var1 (VARYING_SLOT_VAR12.w, 5, 0)
+decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var1 at 2 (VARYING_SLOT_VAR13.x, 6, 0)
 decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var1 at 3 (VARYING_SLOT_VAR13.z, 6, 0)
-decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var11[0] (VARYING_SLOT_VAR14.x, 7, 0)
-decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var11[0]@4 (VARYING_SLOT_VAR14.y, 7, 0)
-decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var11[0]@5 (VARYING_SLOT_VAR14.z, 7, 0)
-decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var3 (VARYING_SLOT_VAR15.x, 8, 0)
-decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var3 at 6 (VARYING_SLOT_VAR15.y, 8, 0)
-decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var3 at 7 (VARYING_SLOT_VAR15.z, 8, 0)
-decl_var shader_out INTERP_MODE_FLAT ALWAYSACT  ivec3 packed:v_var8 (VARYING_SLOT_VAR16.xyz, 9, 0)
-decl_var centroid shader_out INTERP_MODE_NONE SOMEACT float v_var4 (VARYING_SLOT_VAR17.x, 10, 0)
-decl_var centroid shader_out INTERP_MODE_NONE SOMEACT float v_var4 at 8 (VARYING_SLOT_VAR17.y, 10, 0)
-decl_var centroid shader_out INTERP_MODE_NONE SOMEACT float v_var4 at 9 (VARYING_SLOT_VAR17.z, 10, 0)
-decl_var centroid shader_out INTERP_MODE_NONE SOMEACT float v_var4 at 10 (VARYING_SLOT_VAR17.w, 10, 0)
+decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var11[0] (VARYING_SLOT_VAR13.y, 6, 0)
+decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var11[0]@4 (VARYING_SLOT_VAR13.w, 6, 0)
+decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var11[0]@5 (VARYING_SLOT_VAR14.x, 7, 0)
+decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var3 (VARYING_SLOT_VAR14.y, 7, 0)
+decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var3 at 6 (VARYING_SLOT_VAR14.z, 7, 0)
+decl_var shader_out INTERP_MODE_FLAT SOMEACT int packed:v_var3 at 7 (VARYING_SLOT_VAR14.w, 7, 0)
+decl_var shader_out INTERP_MODE_FLAT ALWAYSACT  ivec3 packed:v_var8 (VARYING_SLOT_VAR16.xyz, 8, 0)
+decl_var centroid shader_out INTERP_MODE_NONE SOMEACT float v_var4 (VARYING_SLOT_VAR17.x, 9, 0)
+decl_var centroid shader_out INTERP_MODE_NONE SOMEACT float v_var4 at 8 (VARYING_SLOT_VAR17.y, 9, 0)
+decl_var centroid shader_out INTERP_MODE_NONE SOMEACT float v_var4 at 9 (VARYING_SLOT_VAR17.z, 9, 0)
+decl_var centroid shader_out INTERP_MODE_NONE SOMEACT float v_var4 at 10 (VARYING_SLOT_VAR17.w, 9, 0)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180621/f4977c01/attachment.sig>


More information about the mesa-dev mailing list