Add ES 320 support and additional error checks for SPV_NV_mesh_shader
- Add ES 320 support - Error out use of perprimitiveNV for non mesh/fragment shaders - Error out use of mesh/task shaders w/o use of NV_mesh_shader - Error out use of NV_mesh_shader for non task/mesh shaders - Error out use of perviewNV for non mesh shaders - Error out use of taskNV for non mesh/task shaders - Add test case for mesh shader with ES 320 profile
This commit is contained in:
		
							parent
							
								
									a8453d4bc0
								
							
						
					
					
						commit
						95e2d4ec02
					
				@ -1,203 +1,205 @@
 | 
			
		||||
spv.meshShaderUserDefined.mesh
 | 
			
		||||
// Module Version 10000
 | 
			
		||||
// Generated by (magic number): 80007
 | 
			
		||||
// Id's are bound by 138
 | 
			
		||||
// Id's are bound by 140
 | 
			
		||||
 | 
			
		||||
                              Capability MeshShadingNV
 | 
			
		||||
                              Extension  "SPV_NV_mesh_shader"
 | 
			
		||||
               1:             ExtInstImport  "GLSL.std.450"
 | 
			
		||||
                              MemoryModel Logical GLSL450
 | 
			
		||||
                              EntryPoint MeshNV 4  "main" 11 17 34 101
 | 
			
		||||
                              EntryPoint MeshNV 4  "main" 12 19 37 103
 | 
			
		||||
                              ExecutionMode 4 LocalSize 32 1 1
 | 
			
		||||
                              ExecutionMode 4 OutputVertices 81
 | 
			
		||||
                              ExecutionMode 4 OutputPrimitivesNV 32
 | 
			
		||||
                              ExecutionMode 4 OutputTrianglesNV
 | 
			
		||||
                              Source GLSL 450
 | 
			
		||||
                              Source ESSL 320
 | 
			
		||||
                              SourceExtension  "GL_NV_mesh_shader"
 | 
			
		||||
                              Name 4  "main"
 | 
			
		||||
                              Name 8  "iid"
 | 
			
		||||
                              Name 11  "gl_LocalInvocationID"
 | 
			
		||||
                              Name 16  "gid"
 | 
			
		||||
                              Name 17  "gl_WorkGroupID"
 | 
			
		||||
                              Name 30  "myblock"
 | 
			
		||||
                              MemberName 30(myblock) 0  "f"
 | 
			
		||||
                              MemberName 30(myblock) 1  "fArr"
 | 
			
		||||
                              MemberName 30(myblock) 2  "pos"
 | 
			
		||||
                              MemberName 30(myblock) 3  "posArr"
 | 
			
		||||
                              MemberName 30(myblock) 4  "m"
 | 
			
		||||
                              MemberName 30(myblock) 5  "mArr"
 | 
			
		||||
                              Name 34  "blk"
 | 
			
		||||
                              Name 97  "myblock2"
 | 
			
		||||
                              MemberName 97(myblock2) 0  "f"
 | 
			
		||||
                              MemberName 97(myblock2) 1  "pos"
 | 
			
		||||
                              MemberName 97(myblock2) 2  "m"
 | 
			
		||||
                              Name 101  "blk2"
 | 
			
		||||
                              Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
 | 
			
		||||
                              Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
 | 
			
		||||
                              MemberDecorate 30(myblock) 0 PerPrimitiveNV
 | 
			
		||||
                              MemberDecorate 30(myblock) 1 PerPrimitiveNV
 | 
			
		||||
                              MemberDecorate 30(myblock) 2 PerPrimitiveNV
 | 
			
		||||
                              MemberDecorate 30(myblock) 3 PerPrimitiveNV
 | 
			
		||||
                              MemberDecorate 30(myblock) 4 PerPrimitiveNV
 | 
			
		||||
                              MemberDecorate 30(myblock) 5 PerPrimitiveNV
 | 
			
		||||
                              Decorate 30(myblock) Block
 | 
			
		||||
                              Decorate 34(blk) Location 0
 | 
			
		||||
                              Decorate 97(myblock2) Block
 | 
			
		||||
                              Decorate 101(blk2) Location 20
 | 
			
		||||
                              Decorate 137 BuiltIn WorkgroupSize
 | 
			
		||||
                              Name 12  "gl_LocalInvocationID"
 | 
			
		||||
                              Name 18  "gid"
 | 
			
		||||
                              Name 19  "gl_WorkGroupID"
 | 
			
		||||
                              Name 33  "myblock"
 | 
			
		||||
                              MemberName 33(myblock) 0  "f"
 | 
			
		||||
                              MemberName 33(myblock) 1  "fArr"
 | 
			
		||||
                              MemberName 33(myblock) 2  "pos"
 | 
			
		||||
                              MemberName 33(myblock) 3  "posArr"
 | 
			
		||||
                              MemberName 33(myblock) 4  "m"
 | 
			
		||||
                              MemberName 33(myblock) 5  "mArr"
 | 
			
		||||
                              Name 37  "blk"
 | 
			
		||||
                              Name 99  "myblock2"
 | 
			
		||||
                              MemberName 99(myblock2) 0  "f"
 | 
			
		||||
                              MemberName 99(myblock2) 1  "pos"
 | 
			
		||||
                              MemberName 99(myblock2) 2  "m"
 | 
			
		||||
                              Name 103  "blk2"
 | 
			
		||||
                              Decorate 12(gl_LocalInvocationID) BuiltIn LocalInvocationId
 | 
			
		||||
                              Decorate 19(gl_WorkGroupID) BuiltIn WorkgroupId
 | 
			
		||||
                              MemberDecorate 33(myblock) 0 PerPrimitiveNV
 | 
			
		||||
                              MemberDecorate 33(myblock) 1 PerPrimitiveNV
 | 
			
		||||
                              MemberDecorate 33(myblock) 2 PerPrimitiveNV
 | 
			
		||||
                              MemberDecorate 33(myblock) 3 PerPrimitiveNV
 | 
			
		||||
                              MemberDecorate 33(myblock) 4 PerPrimitiveNV
 | 
			
		||||
                              MemberDecorate 33(myblock) 5 PerPrimitiveNV
 | 
			
		||||
                              Decorate 33(myblock) Block
 | 
			
		||||
                              Decorate 37(blk) Location 0
 | 
			
		||||
                              Decorate 99(myblock2) Block
 | 
			
		||||
                              Decorate 103(blk2) Location 20
 | 
			
		||||
                              Decorate 139 BuiltIn WorkgroupSize
 | 
			
		||||
               2:             TypeVoid
 | 
			
		||||
               3:             TypeFunction 2
 | 
			
		||||
               6:             TypeInt 32 0
 | 
			
		||||
               6:             TypeInt 32 1
 | 
			
		||||
               7:             TypePointer Function 6(int)
 | 
			
		||||
               9:             TypeVector 6(int) 3
 | 
			
		||||
              10:             TypePointer Input 9(ivec3)
 | 
			
		||||
11(gl_LocalInvocationID):     10(ptr) Variable Input
 | 
			
		||||
              12:      6(int) Constant 0
 | 
			
		||||
              13:             TypePointer Input 6(int)
 | 
			
		||||
17(gl_WorkGroupID):     10(ptr) Variable Input
 | 
			
		||||
              20:             TypeFloat 32
 | 
			
		||||
              21:      6(int) Constant 4
 | 
			
		||||
              22:             TypeArray 20(float) 21
 | 
			
		||||
              23:             TypeVector 20(float) 3
 | 
			
		||||
              24:             TypeVector 20(float) 4
 | 
			
		||||
              25:             TypeArray 24(fvec4) 21
 | 
			
		||||
              26:             TypeMatrix 24(fvec4) 4
 | 
			
		||||
              27:             TypeMatrix 23(fvec3) 3
 | 
			
		||||
              28:      6(int) Constant 2
 | 
			
		||||
              29:             TypeArray 27 28
 | 
			
		||||
     30(myblock):             TypeStruct 20(float) 22 23(fvec3) 25 26 29
 | 
			
		||||
              31:      6(int) Constant 32
 | 
			
		||||
              32:             TypeArray 30(myblock) 31
 | 
			
		||||
              33:             TypePointer Output 32
 | 
			
		||||
         34(blk):     33(ptr) Variable Output
 | 
			
		||||
              36:             TypeInt 32 1
 | 
			
		||||
              37:     36(int) Constant 0
 | 
			
		||||
              38:   20(float) Constant 1093664768
 | 
			
		||||
              39:             TypePointer Output 20(float)
 | 
			
		||||
              42:      6(int) Constant 1
 | 
			
		||||
              44:     36(int) Constant 1
 | 
			
		||||
              52:     36(int) Constant 2
 | 
			
		||||
              53:   20(float) Constant 1096810496
 | 
			
		||||
              54:   20(float) Constant 1097859072
 | 
			
		||||
              55:   20(float) Constant 1095761920
 | 
			
		||||
              56:   23(fvec3) ConstantComposite 53 54 55
 | 
			
		||||
              57:             TypePointer Output 23(fvec3)
 | 
			
		||||
              63:     36(int) Constant 3
 | 
			
		||||
              68:             TypePointer Output 24(fvec4)
 | 
			
		||||
              74:     36(int) Constant 4
 | 
			
		||||
              75:   20(float) Constant 1098907648
 | 
			
		||||
              76:   24(fvec4) ConstantComposite 55 53 54 75
 | 
			
		||||
              81:     36(int) Constant 5
 | 
			
		||||
              84:      6(int) Constant 3
 | 
			
		||||
              91:   20(float) Constant 1099431936
 | 
			
		||||
              92:   20(float) Constant 1099956224
 | 
			
		||||
              93:   20(float) Constant 1100480512
 | 
			
		||||
              94:   23(fvec3) ConstantComposite 91 92 93
 | 
			
		||||
              96:      6(int) Constant 264
 | 
			
		||||
    97(myblock2):             TypeStruct 20(float) 24(fvec4) 26
 | 
			
		||||
              98:      6(int) Constant 81
 | 
			
		||||
              99:             TypeArray 97(myblock2) 98
 | 
			
		||||
             100:             TypePointer Output 99
 | 
			
		||||
       101(blk2):    100(ptr) Variable Output
 | 
			
		||||
             107:   20(float) Constant 1101004800
 | 
			
		||||
             111:   20(float) Constant 1101529088
 | 
			
		||||
             112:   20(float) Constant 1102053376
 | 
			
		||||
             113:   20(float) Constant 1102577664
 | 
			
		||||
             114:   20(float) Constant 1103101952
 | 
			
		||||
             115:   24(fvec4) ConstantComposite 111 112 113 114
 | 
			
		||||
             127:   20(float) Constant 1105723392
 | 
			
		||||
             137:    9(ivec3) ConstantComposite 31 42 42
 | 
			
		||||
               9:             TypeInt 32 0
 | 
			
		||||
              10:             TypeVector 9(int) 3
 | 
			
		||||
              11:             TypePointer Input 10(ivec3)
 | 
			
		||||
12(gl_LocalInvocationID):     11(ptr) Variable Input
 | 
			
		||||
              13:      9(int) Constant 0
 | 
			
		||||
              14:             TypePointer Input 9(int)
 | 
			
		||||
19(gl_WorkGroupID):     11(ptr) Variable Input
 | 
			
		||||
              23:             TypeFloat 32
 | 
			
		||||
              24:      9(int) Constant 4
 | 
			
		||||
              25:             TypeArray 23(float) 24
 | 
			
		||||
              26:             TypeVector 23(float) 3
 | 
			
		||||
              27:             TypeVector 23(float) 4
 | 
			
		||||
              28:             TypeArray 27(fvec4) 24
 | 
			
		||||
              29:             TypeMatrix 27(fvec4) 4
 | 
			
		||||
              30:             TypeMatrix 26(fvec3) 3
 | 
			
		||||
              31:      9(int) Constant 2
 | 
			
		||||
              32:             TypeArray 30 31
 | 
			
		||||
     33(myblock):             TypeStruct 23(float) 25 26(fvec3) 28 29 32
 | 
			
		||||
              34:      9(int) Constant 32
 | 
			
		||||
              35:             TypeArray 33(myblock) 34
 | 
			
		||||
              36:             TypePointer Output 35
 | 
			
		||||
         37(blk):     36(ptr) Variable Output
 | 
			
		||||
              39:      6(int) Constant 0
 | 
			
		||||
              40:   23(float) Constant 1093664768
 | 
			
		||||
              41:             TypePointer Output 23(float)
 | 
			
		||||
              44:      6(int) Constant 1
 | 
			
		||||
              52:      6(int) Constant 2
 | 
			
		||||
              54:   23(float) Constant 1096810496
 | 
			
		||||
              55:   23(float) Constant 1097859072
 | 
			
		||||
              56:   23(float) Constant 1095761920
 | 
			
		||||
              57:   26(fvec3) ConstantComposite 54 55 56
 | 
			
		||||
              58:             TypePointer Output 26(fvec3)
 | 
			
		||||
              64:      6(int) Constant 3
 | 
			
		||||
              69:             TypePointer Output 27(fvec4)
 | 
			
		||||
              74:      6(int) Constant 4
 | 
			
		||||
              76:   23(float) Constant 1098907648
 | 
			
		||||
              77:   27(fvec4) ConstantComposite 56 54 55 76
 | 
			
		||||
              82:      6(int) Constant 5
 | 
			
		||||
              85:      9(int) Constant 3
 | 
			
		||||
              88:      9(int) Constant 1
 | 
			
		||||
              93:   23(float) Constant 1099431936
 | 
			
		||||
              94:   23(float) Constant 1099956224
 | 
			
		||||
              95:   23(float) Constant 1100480512
 | 
			
		||||
              96:   26(fvec3) ConstantComposite 93 94 95
 | 
			
		||||
              98:      9(int) Constant 264
 | 
			
		||||
    99(myblock2):             TypeStruct 23(float) 27(fvec4) 29
 | 
			
		||||
             100:      9(int) Constant 81
 | 
			
		||||
             101:             TypeArray 99(myblock2) 100
 | 
			
		||||
             102:             TypePointer Output 101
 | 
			
		||||
       103(blk2):    102(ptr) Variable Output
 | 
			
		||||
             109:   23(float) Constant 1101004800
 | 
			
		||||
             113:   23(float) Constant 1101529088
 | 
			
		||||
             114:   23(float) Constant 1102053376
 | 
			
		||||
             115:   23(float) Constant 1102577664
 | 
			
		||||
             116:   23(float) Constant 1103101952
 | 
			
		||||
             117:   27(fvec4) ConstantComposite 113 114 115 116
 | 
			
		||||
             129:   23(float) Constant 1105723392
 | 
			
		||||
             139:   10(ivec3) ConstantComposite 34 88 88
 | 
			
		||||
         4(main):           2 Function None 3
 | 
			
		||||
               5:             Label
 | 
			
		||||
          8(iid):      7(ptr) Variable Function
 | 
			
		||||
         16(gid):      7(ptr) Variable Function
 | 
			
		||||
              14:     13(ptr) AccessChain 11(gl_LocalInvocationID) 12
 | 
			
		||||
              15:      6(int) Load 14
 | 
			
		||||
                              Store 8(iid) 15
 | 
			
		||||
              18:     13(ptr) AccessChain 17(gl_WorkGroupID) 12
 | 
			
		||||
              19:      6(int) Load 18
 | 
			
		||||
                              Store 16(gid) 19
 | 
			
		||||
              35:      6(int) Load 8(iid)
 | 
			
		||||
              40:     39(ptr) AccessChain 34(blk) 35 37
 | 
			
		||||
                              Store 40 38
 | 
			
		||||
              41:      6(int) Load 8(iid)
 | 
			
		||||
              43:      6(int) IAdd 41 42
 | 
			
		||||
              45:      6(int) Load 16(gid)
 | 
			
		||||
              46:      6(int) Load 8(iid)
 | 
			
		||||
              47:     39(ptr) AccessChain 34(blk) 46 37
 | 
			
		||||
              48:   20(float) Load 47
 | 
			
		||||
              49:     39(ptr) AccessChain 34(blk) 43 44 45
 | 
			
		||||
                              Store 49 48
 | 
			
		||||
              50:      6(int) Load 8(iid)
 | 
			
		||||
              51:      6(int) UDiv 50 28
 | 
			
		||||
              58:     57(ptr) AccessChain 34(blk) 51 52
 | 
			
		||||
              59:   23(fvec3) Load 58
 | 
			
		||||
              60:   23(fvec3) VectorShuffle 59 56 5 3 4
 | 
			
		||||
                              Store 58 60
 | 
			
		||||
              61:      6(int) Load 8(iid)
 | 
			
		||||
              62:      6(int) IMul 61 28
 | 
			
		||||
              64:      6(int) Load 8(iid)
 | 
			
		||||
              65:      6(int) UDiv 64 28
 | 
			
		||||
              66:     57(ptr) AccessChain 34(blk) 65 52
 | 
			
		||||
              67:   23(fvec3) Load 66
 | 
			
		||||
              69:     68(ptr) AccessChain 34(blk) 62 63 44
 | 
			
		||||
              70:   24(fvec4) Load 69
 | 
			
		||||
              71:   24(fvec4) VectorShuffle 70 67 0 4 5 6
 | 
			
		||||
                              Store 69 71
 | 
			
		||||
              72:      6(int) Load 8(iid)
 | 
			
		||||
              73:      6(int) UDiv 72 21
 | 
			
		||||
              77:     68(ptr) AccessChain 34(blk) 73 74 52
 | 
			
		||||
              78:   24(fvec4) Load 77
 | 
			
		||||
              79:   24(fvec4) VectorShuffle 78 76 7 6 5 4
 | 
			
		||||
                              Store 77 79
 | 
			
		||||
              80:      6(int) Load 8(iid)
 | 
			
		||||
              82:      6(int) Load 8(iid)
 | 
			
		||||
              83:      6(int) UDiv 82 21
 | 
			
		||||
              85:     39(ptr) AccessChain 34(blk) 83 74 52 84
 | 
			
		||||
              86:   20(float) Load 85
 | 
			
		||||
              87:     39(ptr) AccessChain 34(blk) 80 81 37 44 42
 | 
			
		||||
                              Store 87 86
 | 
			
		||||
              88:      6(int) Load 8(iid)
 | 
			
		||||
              89:      6(int) IMul 88 21
 | 
			
		||||
              90:      6(int) Load 16(gid)
 | 
			
		||||
              95:     57(ptr) AccessChain 34(blk) 89 81 44 90
 | 
			
		||||
                              Store 95 94
 | 
			
		||||
                              MemoryBarrier 42 96
 | 
			
		||||
                              ControlBarrier 28 28 96
 | 
			
		||||
             102:      6(int) Load 8(iid)
 | 
			
		||||
             103:      6(int) Load 8(iid)
 | 
			
		||||
             104:      6(int) ISub 103 42
 | 
			
		||||
             105:     39(ptr) AccessChain 101(blk2) 104 37
 | 
			
		||||
             106:   20(float) Load 105
 | 
			
		||||
             108:   20(float) FAdd 106 107
 | 
			
		||||
             109:     39(ptr) AccessChain 101(blk2) 102 37
 | 
			
		||||
                              Store 109 108
 | 
			
		||||
             110:      6(int) Load 8(iid)
 | 
			
		||||
             116:     68(ptr) AccessChain 101(blk2) 110 44
 | 
			
		||||
                              Store 116 115
 | 
			
		||||
             117:      6(int) Load 8(iid)
 | 
			
		||||
             118:      6(int) IAdd 117 42
 | 
			
		||||
             119:      6(int) Load 16(gid)
 | 
			
		||||
             120:      6(int) Load 8(iid)
 | 
			
		||||
             121:     68(ptr) AccessChain 101(blk2) 120 44
 | 
			
		||||
             122:   24(fvec4) Load 121
 | 
			
		||||
             123:     68(ptr) AccessChain 101(blk2) 118 52 119
 | 
			
		||||
                              Store 123 122
 | 
			
		||||
             124:      6(int) Load 8(iid)
 | 
			
		||||
             125:      6(int) IAdd 124 42
 | 
			
		||||
             126:      6(int) Load 16(gid)
 | 
			
		||||
             128:     39(ptr) AccessChain 101(blk2) 125 52 126 28
 | 
			
		||||
                              Store 128 127
 | 
			
		||||
             129:      6(int) Load 8(iid)
 | 
			
		||||
             130:      6(int) IAdd 129 28
 | 
			
		||||
         18(gid):      7(ptr) Variable Function
 | 
			
		||||
              15:     14(ptr) AccessChain 12(gl_LocalInvocationID) 13
 | 
			
		||||
              16:      9(int) Load 15
 | 
			
		||||
              17:      6(int) Bitcast 16
 | 
			
		||||
                              Store 8(iid) 17
 | 
			
		||||
              20:     14(ptr) AccessChain 19(gl_WorkGroupID) 13
 | 
			
		||||
              21:      9(int) Load 20
 | 
			
		||||
              22:      6(int) Bitcast 21
 | 
			
		||||
                              Store 18(gid) 22
 | 
			
		||||
              38:      6(int) Load 8(iid)
 | 
			
		||||
              42:     41(ptr) AccessChain 37(blk) 38 39
 | 
			
		||||
                              Store 42 40
 | 
			
		||||
              43:      6(int) Load 8(iid)
 | 
			
		||||
              45:      6(int) IAdd 43 44
 | 
			
		||||
              46:      6(int) Load 18(gid)
 | 
			
		||||
              47:      6(int) Load 8(iid)
 | 
			
		||||
              48:     41(ptr) AccessChain 37(blk) 47 39
 | 
			
		||||
              49:   23(float) Load 48
 | 
			
		||||
              50:     41(ptr) AccessChain 37(blk) 45 44 46
 | 
			
		||||
                              Store 50 49
 | 
			
		||||
              51:      6(int) Load 8(iid)
 | 
			
		||||
              53:      6(int) SDiv 51 52
 | 
			
		||||
              59:     58(ptr) AccessChain 37(blk) 53 52
 | 
			
		||||
              60:   26(fvec3) Load 59
 | 
			
		||||
              61:   26(fvec3) VectorShuffle 60 57 5 3 4
 | 
			
		||||
                              Store 59 61
 | 
			
		||||
              62:      6(int) Load 8(iid)
 | 
			
		||||
              63:      6(int) IMul 62 52
 | 
			
		||||
              65:      6(int) Load 8(iid)
 | 
			
		||||
              66:      6(int) SDiv 65 52
 | 
			
		||||
              67:     58(ptr) AccessChain 37(blk) 66 52
 | 
			
		||||
              68:   26(fvec3) Load 67
 | 
			
		||||
              70:     69(ptr) AccessChain 37(blk) 63 64 44
 | 
			
		||||
              71:   27(fvec4) Load 70
 | 
			
		||||
              72:   27(fvec4) VectorShuffle 71 68 0 4 5 6
 | 
			
		||||
                              Store 70 72
 | 
			
		||||
              73:      6(int) Load 8(iid)
 | 
			
		||||
              75:      6(int) SDiv 73 74
 | 
			
		||||
              78:     69(ptr) AccessChain 37(blk) 75 74 52
 | 
			
		||||
              79:   27(fvec4) Load 78
 | 
			
		||||
              80:   27(fvec4) VectorShuffle 79 77 7 6 5 4
 | 
			
		||||
                              Store 78 80
 | 
			
		||||
              81:      6(int) Load 8(iid)
 | 
			
		||||
              83:      6(int) Load 8(iid)
 | 
			
		||||
              84:      6(int) SDiv 83 74
 | 
			
		||||
              86:     41(ptr) AccessChain 37(blk) 84 74 52 85
 | 
			
		||||
              87:   23(float) Load 86
 | 
			
		||||
              89:     41(ptr) AccessChain 37(blk) 81 82 39 44 88
 | 
			
		||||
                              Store 89 87
 | 
			
		||||
              90:      6(int) Load 8(iid)
 | 
			
		||||
              91:      6(int) IMul 90 74
 | 
			
		||||
              92:      6(int) Load 18(gid)
 | 
			
		||||
              97:     58(ptr) AccessChain 37(blk) 91 82 44 92
 | 
			
		||||
                              Store 97 96
 | 
			
		||||
                              MemoryBarrier 88 98
 | 
			
		||||
                              ControlBarrier 31 31 98
 | 
			
		||||
             104:      6(int) Load 8(iid)
 | 
			
		||||
             105:      6(int) Load 8(iid)
 | 
			
		||||
             106:      6(int) ISub 105 44
 | 
			
		||||
             107:     41(ptr) AccessChain 103(blk2) 106 39
 | 
			
		||||
             108:   23(float) Load 107
 | 
			
		||||
             110:   23(float) FAdd 108 109
 | 
			
		||||
             111:     41(ptr) AccessChain 103(blk2) 104 39
 | 
			
		||||
                              Store 111 110
 | 
			
		||||
             112:      6(int) Load 8(iid)
 | 
			
		||||
             118:     69(ptr) AccessChain 103(blk2) 112 44
 | 
			
		||||
                              Store 118 117
 | 
			
		||||
             119:      6(int) Load 8(iid)
 | 
			
		||||
             120:      6(int) IAdd 119 44
 | 
			
		||||
             121:      6(int) Load 18(gid)
 | 
			
		||||
             122:      6(int) Load 8(iid)
 | 
			
		||||
             123:     69(ptr) AccessChain 103(blk2) 122 44
 | 
			
		||||
             124:   27(fvec4) Load 123
 | 
			
		||||
             125:     69(ptr) AccessChain 103(blk2) 120 52 121
 | 
			
		||||
                              Store 125 124
 | 
			
		||||
             126:      6(int) Load 8(iid)
 | 
			
		||||
             127:      6(int) IAdd 126 44
 | 
			
		||||
             128:      6(int) Load 18(gid)
 | 
			
		||||
             130:     41(ptr) AccessChain 103(blk2) 127 52 128 31
 | 
			
		||||
                              Store 130 129
 | 
			
		||||
             131:      6(int) Load 8(iid)
 | 
			
		||||
             132:      6(int) IAdd 131 42
 | 
			
		||||
             133:      6(int) Load 16(gid)
 | 
			
		||||
             134:     68(ptr) AccessChain 101(blk2) 132 52 133
 | 
			
		||||
             135:   24(fvec4) Load 134
 | 
			
		||||
             136:     68(ptr) AccessChain 101(blk2) 130 52 63
 | 
			
		||||
                              Store 136 135
 | 
			
		||||
                              MemoryBarrier 42 96
 | 
			
		||||
                              ControlBarrier 28 28 96
 | 
			
		||||
             132:      6(int) IAdd 131 52
 | 
			
		||||
             133:      6(int) Load 8(iid)
 | 
			
		||||
             134:      6(int) IAdd 133 44
 | 
			
		||||
             135:      6(int) Load 18(gid)
 | 
			
		||||
             136:     69(ptr) AccessChain 103(blk2) 134 52 135
 | 
			
		||||
             137:   27(fvec4) Load 136
 | 
			
		||||
             138:     69(ptr) AccessChain 103(blk2) 132 52 64
 | 
			
		||||
                              Store 138 137
 | 
			
		||||
                              MemoryBarrier 88 98
 | 
			
		||||
                              ControlBarrier 31 31 98
 | 
			
		||||
                              Return
 | 
			
		||||
                              FunctionEnd
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
#version 450
 | 
			
		||||
#version 320 es
 | 
			
		||||
 | 
			
		||||
#define MAX_VER  81
 | 
			
		||||
#define MAX_PRIM 32
 | 
			
		||||
@ -36,8 +36,8 @@ layout(location=20) out myblock2 {
 | 
			
		||||
 | 
			
		||||
void main()
 | 
			
		||||
{
 | 
			
		||||
    uint iid = gl_LocalInvocationID.x;
 | 
			
		||||
    uint gid = gl_WorkGroupID.x;
 | 
			
		||||
    int iid = int(gl_LocalInvocationID.x);
 | 
			
		||||
    int gid = int(gl_WorkGroupID.x);
 | 
			
		||||
 | 
			
		||||
    blk[iid].f               = 11.0;
 | 
			
		||||
    blk[iid+1].fArr[gid]     = blk[iid].f;
 | 
			
		||||
 | 
			
		||||
@ -4878,7 +4878,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
 | 
			
		||||
            "void barrier();"
 | 
			
		||||
            );
 | 
			
		||||
#ifdef NV_EXTENSIONS
 | 
			
		||||
    if ((profile != EEsProfile && version >= 450) || esBarrier) {
 | 
			
		||||
    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
 | 
			
		||||
        stageBuiltins[EShLangMeshNV].append(
 | 
			
		||||
            "void barrier();"
 | 
			
		||||
            );
 | 
			
		||||
@ -4903,7 +4903,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
 | 
			
		||||
            );
 | 
			
		||||
    }
 | 
			
		||||
#ifdef NV_EXTENSIONS
 | 
			
		||||
    if (profile != EEsProfile && version >= 450) {
 | 
			
		||||
    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
 | 
			
		||||
        stageBuiltins[EShLangMeshNV].append(
 | 
			
		||||
            "void memoryBarrierShared();"
 | 
			
		||||
            "void groupMemoryBarrier();"
 | 
			
		||||
@ -5094,7 +5094,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Builtins for GL_NV_mesh_shader
 | 
			
		||||
    if (profile != EEsProfile && version >= 450) {
 | 
			
		||||
    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
 | 
			
		||||
        stageBuiltins[EShLangMeshNV].append(
 | 
			
		||||
            "void writePackedPrimitiveIndices4x8NV(uint, uint);"
 | 
			
		||||
            "\n");   
 | 
			
		||||
@ -5287,7 +5287,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
 | 
			
		||||
    //
 | 
			
		||||
    //============================================================================
 | 
			
		||||
 | 
			
		||||
    if (profile != EEsProfile && version >= 450) {
 | 
			
		||||
    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
 | 
			
		||||
        // per-vertex attributes
 | 
			
		||||
        stageBuiltins[EShLangMeshNV].append(
 | 
			
		||||
            "out gl_MeshPerVertexNV {"
 | 
			
		||||
@ -5328,17 +5328,8 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
 | 
			
		||||
            "in highp uvec3 gl_GlobalInvocationID;"
 | 
			
		||||
            "in highp uint gl_LocalInvocationIndex;"
 | 
			
		||||
 | 
			
		||||
            "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
 | 
			
		||||
            "in int gl_DrawIDARB;"             // GL_ARB_shader_draw_parameters
 | 
			
		||||
 | 
			
		||||
            "\n");
 | 
			
		||||
 | 
			
		||||
        if (version >= 460) {
 | 
			
		||||
            stageBuiltins[EShLangMeshNV].append(
 | 
			
		||||
                "in int gl_DrawID;"
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        stageBuiltins[EShLangTaskNV].append(
 | 
			
		||||
            "out uint gl_TaskCountNV;"
 | 
			
		||||
 | 
			
		||||
@ -5350,15 +5341,28 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
 | 
			
		||||
            "in highp uvec3 gl_GlobalInvocationID;"
 | 
			
		||||
            "in highp uint gl_LocalInvocationIndex;"
 | 
			
		||||
 | 
			
		||||
            "\n");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (profile != EEsProfile && version >= 450) {
 | 
			
		||||
        stageBuiltins[EShLangMeshNV].append(
 | 
			
		||||
            "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
 | 
			
		||||
            "in int gl_DrawIDARB;"             // GL_ARB_shader_draw_parameters
 | 
			
		||||
            "\n");
 | 
			
		||||
 | 
			
		||||
        stageBuiltins[EShLangTaskNV].append(
 | 
			
		||||
            "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
 | 
			
		||||
            "in int gl_DrawIDARB;"             // GL_ARB_shader_draw_parameters
 | 
			
		||||
            "\n");
 | 
			
		||||
 | 
			
		||||
        if (version >= 460) {
 | 
			
		||||
            stageBuiltins[EShLangMeshNV].append(
 | 
			
		||||
                "in int gl_DrawID;"
 | 
			
		||||
                "\n");
 | 
			
		||||
 | 
			
		||||
            stageBuiltins[EShLangTaskNV].append(
 | 
			
		||||
                "in int gl_DrawID;"
 | 
			
		||||
            );
 | 
			
		||||
                "\n");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
@ -7658,7 +7662,7 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf
 | 
			
		||||
 | 
			
		||||
#ifdef NV_EXTENSIONS
 | 
			
		||||
    // SPV_NV_mesh_shader
 | 
			
		||||
    if (profile != EEsProfile && version >= 450) {
 | 
			
		||||
    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
 | 
			
		||||
        snprintf(builtInConstant, maxSize, "const int gl_MaxMeshOutputVerticesNV = %d;", resources.maxMeshOutputVerticesNV);
 | 
			
		||||
        s.append(builtInConstant);
 | 
			
		||||
 | 
			
		||||
@ -8633,7 +8637,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
 | 
			
		||||
        } 
 | 
			
		||||
        break;
 | 
			
		||||
    case EShLangMeshNV:
 | 
			
		||||
        if (profile != EEsProfile && version >= 450) {
 | 
			
		||||
        if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
 | 
			
		||||
            // Per-vertex builtins
 | 
			
		||||
            BuiltInVariable("gl_MeshVerticesNV", "gl_Position",     EbvPosition,     symbolTable);
 | 
			
		||||
            BuiltInVariable("gl_MeshVerticesNV", "gl_PointSize",    EbvPointSize,    symbolTable);
 | 
			
		||||
@ -8681,7 +8685,9 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
 | 
			
		||||
            symbolTable.setFunctionExtensions("barrier",                      1, &E_GL_NV_mesh_shader);
 | 
			
		||||
            symbolTable.setFunctionExtensions("memoryBarrierShared",          1, &E_GL_NV_mesh_shader);
 | 
			
		||||
            symbolTable.setFunctionExtensions("groupMemoryBarrier",           1, &E_GL_NV_mesh_shader);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (profile != EEsProfile && version >= 450) {
 | 
			
		||||
            // GL_EXT_device_group
 | 
			
		||||
            symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group);
 | 
			
		||||
            BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
 | 
			
		||||
@ -8743,7 +8749,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
    case EShLangTaskNV:
 | 
			
		||||
        if (profile != EEsProfile && version >= 450) {
 | 
			
		||||
        if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
 | 
			
		||||
            symbolTable.setVariableExtensions("gl_TaskCountNV",          1, &E_GL_NV_mesh_shader);
 | 
			
		||||
            symbolTable.setVariableExtensions("gl_WorkGroupSize",        1, &E_GL_NV_mesh_shader);
 | 
			
		||||
            symbolTable.setVariableExtensions("gl_WorkGroupID",          1, &E_GL_NV_mesh_shader);
 | 
			
		||||
@ -8763,7 +8769,9 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
 | 
			
		||||
            symbolTable.setFunctionExtensions("barrier",                   1, &E_GL_NV_mesh_shader);
 | 
			
		||||
            symbolTable.setFunctionExtensions("memoryBarrierShared",       1, &E_GL_NV_mesh_shader);
 | 
			
		||||
            symbolTable.setFunctionExtensions("groupMemoryBarrier",        1, &E_GL_NV_mesh_shader);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (profile != EEsProfile && version >= 450) {
 | 
			
		||||
            // GL_EXT_device_group
 | 
			
		||||
            symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group);
 | 
			
		||||
            BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
 | 
			
		||||
@ -9379,12 +9387,12 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    case EShLangMeshNV:
 | 
			
		||||
        if (profile != EEsProfile && version >= 450) {
 | 
			
		||||
        if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
 | 
			
		||||
            symbolTable.relateToOperator("writePackedPrimitiveIndices4x8NV", EOpWritePackedPrimitiveIndices4x8NV);
 | 
			
		||||
        }
 | 
			
		||||
        // fall through
 | 
			
		||||
    case EShLangTaskNV:
 | 
			
		||||
        if (profile != EEsProfile && version >= 450) {
 | 
			
		||||
        if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
 | 
			
		||||
            symbolTable.relateToOperator("memoryBarrierShared", EOpMemoryBarrierShared);
 | 
			
		||||
            symbolTable.relateToOperator("groupMemoryBarrier", EOpGroupMemoryBarrier);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -3600,6 +3600,13 @@ void TParseContext::arraySizesCheck(const TSourceLoc& loc, const TQualifier& qua
 | 
			
		||||
                extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader))
 | 
			
		||||
                return;
 | 
			
		||||
        break;
 | 
			
		||||
#ifdef NV_EXTENSIONS
 | 
			
		||||
    case EShLangMeshNV:
 | 
			
		||||
        if (qualifier.storage == EvqVaryingOut)
 | 
			
		||||
            if ((profile == EEsProfile && version >= 320) ||
 | 
			
		||||
                extensionTurnedOn(E_GL_NV_mesh_shader))
 | 
			
		||||
                return;
 | 
			
		||||
#endif
 | 
			
		||||
    default:
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
@ -4460,6 +4467,12 @@ void TParseContext::finish()
 | 
			
		||||
        if (profile != EEsProfile && version < 430)
 | 
			
		||||
            requireExtensions(getCurrentLoc(), 1, &E_GL_ARB_compute_shader, "compute shaders");
 | 
			
		||||
        break;
 | 
			
		||||
#ifdef NV_EXTENSIONS
 | 
			
		||||
    case EShLangTaskNV:
 | 
			
		||||
    case EShLangMeshNV:
 | 
			
		||||
        requireExtensions(getCurrentLoc(), 1, &E_GL_NV_mesh_shader, "mesh shaders");
 | 
			
		||||
        break;
 | 
			
		||||
#endif
 | 
			
		||||
    default:
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
@ -4963,12 +4976,14 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
 | 
			
		||||
#ifdef NV_EXTENSIONS
 | 
			
		||||
    case EShLangMeshNV:
 | 
			
		||||
        if (id == "max_vertices") {
 | 
			
		||||
            requireExtensions(loc, 1, &E_GL_NV_mesh_shader, "max_vertices");
 | 
			
		||||
            publicType.shaderQualifiers.vertices = value;
 | 
			
		||||
            if (value > resources.maxMeshOutputVerticesNV)
 | 
			
		||||
                error(loc, "too large, must be less than gl_MaxMeshOutputVerticesNV", "max_vertices", "");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        if (id == "max_primitives") {
 | 
			
		||||
            requireExtensions(loc, 1, &E_GL_NV_mesh_shader, "max_primitives");
 | 
			
		||||
            publicType.shaderQualifiers.primitives = value;
 | 
			
		||||
            if (value > resources.maxMeshOutputPrimitivesNV)
 | 
			
		||||
                error(loc, "too large, must be less than gl_MaxMeshOutputPrimitivesNV", "max_primitives", "");
 | 
			
		||||
@ -4983,7 +4998,7 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
 | 
			
		||||
        if (id.compare(0, 11, "local_size_") == 0) {
 | 
			
		||||
#ifdef NV_EXTENSIONS
 | 
			
		||||
            if (language == EShLangMeshNV || language == EShLangTaskNV) {
 | 
			
		||||
                profileRequires(loc, ~EEsProfile, 450, E_GL_NV_mesh_shader, "gl_WorkGroupSize");
 | 
			
		||||
                requireExtensions(loc, 1, &E_GL_NV_mesh_shader, "gl_WorkGroupSize");
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@ -1591,8 +1591,9 @@ int TScanContext::tokenizeIdentifier()
 | 
			
		||||
    case PERPRIMITIVENV:
 | 
			
		||||
    case PERVIEWNV:
 | 
			
		||||
    case PERTASKNV:
 | 
			
		||||
        if (parseContext.profile != EEsProfile &&
 | 
			
		||||
            (parseContext.version >= 450 || parseContext.extensionTurnedOn(E_GL_NV_mesh_shader)))
 | 
			
		||||
        if ((parseContext.profile != EEsProfile && parseContext.version >= 450) ||
 | 
			
		||||
            (parseContext.profile == EEsProfile && parseContext.version >= 320) ||
 | 
			
		||||
            parseContext.extensionTurnedOn(E_GL_NV_mesh_shader))
 | 
			
		||||
            return keyword;
 | 
			
		||||
        return identifierOrType();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@ -361,13 +361,16 @@ bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable,  TS
 | 
			
		||||
        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangMissNV, source,
 | 
			
		||||
            infoSink, commonTable, symbolTables);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // check for mesh
 | 
			
		||||
    if (profile != EEsProfile && version >= 450)
 | 
			
		||||
    if ((profile != EEsProfile && version >= 450) ||
 | 
			
		||||
        (profile == EEsProfile && version >= 320))
 | 
			
		||||
        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangMeshNV, source,
 | 
			
		||||
                                   infoSink, commonTable, symbolTables);
 | 
			
		||||
 | 
			
		||||
    // check for task
 | 
			
		||||
    if (profile != EEsProfile && version >= 450)
 | 
			
		||||
    if ((profile != EEsProfile && version >= 450) ||
 | 
			
		||||
        (profile == EEsProfile && version >= 320))
 | 
			
		||||
        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTaskNV, source,
 | 
			
		||||
                                   infoSink, commonTable, symbolTables);
 | 
			
		||||
#endif
 | 
			
		||||
@ -609,11 +612,11 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo
 | 
			
		||||
        break;
 | 
			
		||||
    case EShLangMeshNV:
 | 
			
		||||
    case EShLangTaskNV:
 | 
			
		||||
        if ((profile == EEsProfile) ||
 | 
			
		||||
        if ((profile == EEsProfile && version < 320) ||
 | 
			
		||||
            (profile != EEsProfile && version < 450)) {
 | 
			
		||||
            correct = false;
 | 
			
		||||
            infoSink.info.message(EPrefixError, "#version: mesh/task shaders require non-es profile with version 450 or above");
 | 
			
		||||
            version = 450;
 | 
			
		||||
            infoSink.info.message(EPrefixError, "#version: mesh/task shaders require es profile with version 320 or above, or non-es profile with version 450 or above");
 | 
			
		||||
            version = profile == EEsProfile ? 320 : 450;
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
    default:
 | 
			
		||||
 | 
			
		||||
@ -834,6 +834,23 @@ void TParseVersions::updateExtensionBehavior(const char* extension, TExtensionBe
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef NV_EXTENSIONS
 | 
			
		||||
// Validate if extension name is used with correct shader stage.
 | 
			
		||||
bool TParseVersions::validateExtensionName(const TSourceLoc& loc, const char * const extension)
 | 
			
		||||
{
 | 
			
		||||
    int lNumErrors = getNumErrors();
 | 
			
		||||
 | 
			
		||||
    // GL_NV_mesh_shader extension is only allowed in task/mesh shaders
 | 
			
		||||
    if (strcmp(extension, "GL_NV_mesh_shader") == 0)
 | 
			
		||||
        requireStage(loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask),
 | 
			
		||||
                     "#extension GL_NV_mesh_shader");
 | 
			
		||||
 | 
			
		||||
    if (getNumErrors() > lNumErrors)
 | 
			
		||||
        return false;
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// Call for any operation needing full GLSL integer data-type support.
 | 
			
		||||
void TParseVersions::fullIntegerCheck(const TSourceLoc& loc, const char* op)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
@ -1158,7 +1158,9 @@ interpolation_qualifier
 | 
			
		||||
    | PERPRIMITIVENV {
 | 
			
		||||
#ifdef NV_EXTENSIONS
 | 
			
		||||
        parseContext.globalCheck($1.loc, "perprimitiveNV");
 | 
			
		||||
        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshNVMask), "perprimitiveNV");
 | 
			
		||||
        parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_NV_mesh_shader, "perprimitiveNV");
 | 
			
		||||
        parseContext.profileRequires($1.loc, EEsProfile, 320, E_GL_NV_mesh_shader, "perprimitiveNV");
 | 
			
		||||
        $$.init($1.loc);
 | 
			
		||||
        $$.qualifier.perPrimitiveNV = true;
 | 
			
		||||
#endif
 | 
			
		||||
@ -1166,7 +1168,9 @@ interpolation_qualifier
 | 
			
		||||
    | PERVIEWNV {
 | 
			
		||||
#ifdef NV_EXTENSIONS
 | 
			
		||||
        parseContext.globalCheck($1.loc, "perviewNV");
 | 
			
		||||
        parseContext.requireStage($1.loc, EShLangMeshNV, "perviewNV");
 | 
			
		||||
        parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_NV_mesh_shader, "perviewNV");
 | 
			
		||||
        parseContext.profileRequires($1.loc, EEsProfile, 320, E_GL_NV_mesh_shader, "perviewNV");
 | 
			
		||||
        $$.init($1.loc);
 | 
			
		||||
        $$.qualifier.perViewNV = true;
 | 
			
		||||
#endif
 | 
			
		||||
@ -1174,7 +1178,9 @@ interpolation_qualifier
 | 
			
		||||
    | PERTASKNV {
 | 
			
		||||
#ifdef NV_EXTENSIONS
 | 
			
		||||
        parseContext.globalCheck($1.loc, "taskNV");
 | 
			
		||||
        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask), "taskNV");
 | 
			
		||||
        parseContext.profileRequires($1.loc, ECoreProfile, 450, E_GL_NV_mesh_shader, "taskNV");
 | 
			
		||||
        parseContext.profileRequires($1.loc, EEsProfile, 320, E_GL_NV_mesh_shader, "taskNV");
 | 
			
		||||
        $$.init($1.loc);
 | 
			
		||||
        $$.qualifier.perTaskNV = true;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -103,6 +103,9 @@ public:
 | 
			
		||||
    virtual void requireSpv(const TSourceLoc&, const char* op);
 | 
			
		||||
    virtual bool checkExtensionsRequested(const TSourceLoc&, int numExtensions, const char* const extensions[], const char* featureDesc);
 | 
			
		||||
    virtual void updateExtensionBehavior(const char* const extension, TExtensionBehavior);
 | 
			
		||||
#ifdef NV_EXTENSIONS
 | 
			
		||||
    virtual bool validateExtensionName(const TSourceLoc&, const char* const extension);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    virtual void C_DECL error(const TSourceLoc&, const char* szReason, const char* szToken,
 | 
			
		||||
        const char* szExtraInfoFormat, ...) = 0;
 | 
			
		||||
 | 
			
		||||
@ -874,6 +874,11 @@ int TPpContext::CPPextension(TPpToken* ppToken)
 | 
			
		||||
        return token;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#ifdef NV_EXTENSIONS
 | 
			
		||||
    if (!parseContext.validateExtensionName(ppToken->loc, extensionName))
 | 
			
		||||
        return token;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    parseContext.updateExtensionBehavior(line, extensionName, ppToken->name);
 | 
			
		||||
    parseContext.notifyExtensionDirective(line, extensionName, ppToken->name);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user