Fix for bug #3019 : That incorrectly removed perVertexEXT qualifier as arrayed IO
authorPankaj Mistry <pmistry@nvidia.com>
Mon, 26 Sep 2022 19:45:39 +0000 (12:45 -0700)
committerPankaj Mistry <pmistry@nvidia.com>
Mon, 26 Sep 2022 19:47:12 +0000 (12:47 -0700)
This bug got introduced as part of EXT_mesh_shader changes 228c672
Also updated barycentric test cases to add coverage for multiple pervertexEXT array inputs

Test/baseResults/spv.fragmentShaderBarycentric2.frag.out
Test/baseResults/spv.fragmentShaderBarycentric4.frag.out
Test/spv.fragmentShaderBarycentric2.frag
Test/spv.fragmentShaderBarycentric4.frag
glslang/Include/Types.h

index c097676..23926cd 100644 (file)
@@ -1,14 +1,14 @@
 spv.fragmentShaderBarycentric2.frag
 // Module Version 10000
 // Generated by (magic number): 8000a
-// Id's are bound by 42
+// Id's are bound by 62
 
                               Capability Shader
                               Capability FragmentBarycentricKHR
                               Extension  "SPV_NV_fragment_shader_barycentric"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 8 11 20
+                              EntryPoint Fragment 4  "main" 8 11 20 44
                               ExecutionMode 4 OriginUpperLeft
                               Source ESSL 320
                               SourceExtension  "GL_NV_fragment_shader_barycentric"
@@ -16,10 +16,13 @@ spv.fragmentShaderBarycentric2.frag
                               Name 8  "value"
                               Name 11  "gl_BaryCoordNoPerspNV"
                               Name 20  "vertexIDs"
+                              Name 44  "vertexIDs2"
                               Decorate 8(value) Location 1
                               Decorate 11(gl_BaryCoordNoPerspNV) BuiltIn BaryCoordNoPerspKHR
                               Decorate 20(vertexIDs) Location 0
                               Decorate 20(vertexIDs) PerVertexKHR
+                              Decorate 44(vertexIDs2) Location 1
+                              Decorate 44(vertexIDs2) PerVertexKHR
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -41,6 +44,7 @@ spv.fragmentShaderBarycentric2.frag
               29:     21(int) Constant 1
               34:     12(int) Constant 2
               37:     21(int) Constant 2
+  44(vertexIDs2):     19(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
               15:     14(ptr) AccessChain 11(gl_BaryCoordNoPerspNV) 13
@@ -61,5 +65,25 @@ spv.fragmentShaderBarycentric2.frag
               40:    6(float) FMul 36 39
               41:    6(float) FAdd 33 40
                               Store 8(value) 41
+              42:     14(ptr) AccessChain 11(gl_BaryCoordNoPerspNV) 13
+              43:    6(float) Load 42
+              45:     14(ptr) AccessChain 44(vertexIDs2) 22
+              46:    6(float) Load 45
+              47:    6(float) FMul 43 46
+              48:     14(ptr) AccessChain 11(gl_BaryCoordNoPerspNV) 26
+              49:    6(float) Load 48
+              50:     14(ptr) AccessChain 44(vertexIDs2) 29
+              51:    6(float) Load 50
+              52:    6(float) FMul 49 51
+              53:    6(float) FAdd 47 52
+              54:     14(ptr) AccessChain 11(gl_BaryCoordNoPerspNV) 34
+              55:    6(float) Load 54
+              56:     14(ptr) AccessChain 44(vertexIDs2) 37
+              57:    6(float) Load 56
+              58:    6(float) FMul 55 57
+              59:    6(float) FAdd 53 58
+              60:    6(float) Load 8(value)
+              61:    6(float) FAdd 60 59
+                              Store 8(value) 61
                               Return
                               FunctionEnd
index aaac6a4..9218646 100644 (file)
@@ -1,14 +1,14 @@
 spv.fragmentShaderBarycentric4.frag
 // Module Version 10000
 // Generated by (magic number): 8000a
-// Id's are bound by 42
+// Id's are bound by 62
 
                               Capability Shader
                               Capability FragmentBarycentricKHR
                               Extension  "SPV_KHR_fragment_shader_barycentric"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 8 11 20
+                              EntryPoint Fragment 4  "main" 8 11 20 44
                               ExecutionMode 4 OriginUpperLeft
                               Source ESSL 320
                               SourceExtension  "GL_EXT_fragment_shader_barycentric"
@@ -16,10 +16,13 @@ spv.fragmentShaderBarycentric4.frag
                               Name 8  "value"
                               Name 11  "gl_BaryCoordNoPerspEXT"
                               Name 20  "vertexIDs"
+                              Name 44  "vertexIDs2"
                               Decorate 8(value) Location 1
                               Decorate 11(gl_BaryCoordNoPerspEXT) BuiltIn BaryCoordNoPerspKHR
                               Decorate 20(vertexIDs) Location 0
                               Decorate 20(vertexIDs) PerVertexKHR
+                              Decorate 44(vertexIDs2) Location 1
+                              Decorate 44(vertexIDs2) PerVertexKHR
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -41,6 +44,7 @@ spv.fragmentShaderBarycentric4.frag
               29:     21(int) Constant 1
               34:     12(int) Constant 2
               37:     21(int) Constant 2
+  44(vertexIDs2):     19(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
               15:     14(ptr) AccessChain 11(gl_BaryCoordNoPerspEXT) 13
@@ -61,5 +65,25 @@ spv.fragmentShaderBarycentric4.frag
               40:    6(float) FMul 36 39
               41:    6(float) FAdd 33 40
                               Store 8(value) 41
+              42:     14(ptr) AccessChain 11(gl_BaryCoordNoPerspEXT) 13
+              43:    6(float) Load 42
+              45:     14(ptr) AccessChain 44(vertexIDs2) 22
+              46:    6(float) Load 45
+              47:    6(float) FMul 43 46
+              48:     14(ptr) AccessChain 11(gl_BaryCoordNoPerspEXT) 26
+              49:    6(float) Load 48
+              50:     14(ptr) AccessChain 44(vertexIDs2) 29
+              51:    6(float) Load 50
+              52:    6(float) FMul 49 51
+              53:    6(float) FAdd 47 52
+              54:     14(ptr) AccessChain 11(gl_BaryCoordNoPerspEXT) 34
+              55:    6(float) Load 54
+              56:     14(ptr) AccessChain 44(vertexIDs2) 37
+              57:    6(float) Load 56
+              58:    6(float) FMul 55 57
+              59:    6(float) FAdd 53 58
+              60:    6(float) Load 8(value)
+              61:    6(float) FAdd 60 59
+                              Store 8(value) 61
                               Return
                               FunctionEnd
index 4682e4e..2db44af 100644 (file)
@@ -4,6 +4,8 @@
 precision highp float;
 
 layout(location = 0) pervertexNV in float vertexIDs[3];
+layout(location = 1) pervertexNV in float vertexIDs2[3];
+
       
 layout(location = 1) out float value;
       
@@ -12,4 +14,8 @@ void main () {
              gl_BaryCoordNoPerspNV.y * vertexIDs[1] +
              gl_BaryCoordNoPerspNV.z * vertexIDs[2]);
 
+    value += (gl_BaryCoordNoPerspNV.x * vertexIDs2[0] +
+             gl_BaryCoordNoPerspNV.y * vertexIDs2[1] +
+             gl_BaryCoordNoPerspNV.z * vertexIDs2[2]);
+
 }
index 5b4510e..fd4902f 100644 (file)
@@ -4,6 +4,7 @@
 precision highp float;
 
 layout(location = 0) pervertexEXT in float vertexIDs[3];
+layout(location = 1) pervertexEXT in float vertexIDs2[3];
       
 layout(location = 1) out float value;
       
@@ -12,4 +13,8 @@ void main () {
              gl_BaryCoordNoPerspEXT.y * vertexIDs[1] +
              gl_BaryCoordNoPerspEXT.z * vertexIDs[2]);
 
+    value += (gl_BaryCoordNoPerspEXT.x * vertexIDs2[0] +
+             gl_BaryCoordNoPerspEXT.y * vertexIDs2[1] +
+             gl_BaryCoordNoPerspEXT.z * vertexIDs2[2]);
+
 }
index 05f90ac..a6f47e8 100644 (file)
@@ -875,7 +875,7 @@ public:
         case EShLangTessEvaluation:
             return ! patch && isPipeInput();
         case EShLangFragment:
-            return pervertexNV && isPipeInput();
+            return (pervertexNV || pervertexEXT) && isPipeInput();
         case EShLangMesh:
             return ! perTaskNV && isPipeOutput();