From 3ae0f583223061fef0bef88f34407b64fa1692e3 Mon Sep 17 00:00:00 2001 From: Sahil Parmar Date: Wed, 26 Sep 2018 13:38:25 -0700 Subject: [PATCH] changes based on feedback --- .../spv.320.meshShaderUserDefined.mesh.out | 205 ++++++++++ .../spv.meshShaderUserDefined.mesh.out | 360 +++++++++--------- Test/spv.320.meshShaderUserDefined.mesh | 59 +++ Test/spv.meshShaderUserDefined.mesh | 6 +- glslang/MachineIndependent/ParseHelper.cpp | 1 + glslang/MachineIndependent/Versions.cpp | 6 +- glslang/MachineIndependent/parseVersions.h | 2 +- .../MachineIndependent/preprocessor/Pp.cpp | 2 +- 8 files changed, 453 insertions(+), 188 deletions(-) create mode 100644 Test/baseResults/spv.320.meshShaderUserDefined.mesh.out create mode 100644 Test/spv.320.meshShaderUserDefined.mesh diff --git a/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out b/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out new file mode 100644 index 000000000..ef3990721 --- /dev/null +++ b/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out @@ -0,0 +1,205 @@ +spv.meshShaderUserDefined.mesh +// Module Version 10000 +// Generated by (magic number): 80007 +// 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" 12 19 37 103 + ExecutionMode 4 LocalSize 32 1 1 + ExecutionMode 4 OutputVertices 81 + ExecutionMode 4 OutputPrimitivesNV 32 + ExecutionMode 4 OutputTrianglesNV + Source ESSL 320 + SourceExtension "GL_NV_mesh_shader" + Name 4 "main" + Name 8 "iid" + 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 1 + 7: TypePointer Function 6(int) + 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 + 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 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 diff --git a/Test/baseResults/spv.meshShaderUserDefined.mesh.out b/Test/baseResults/spv.meshShaderUserDefined.mesh.out index ef3990721..c3ec91507 100644 --- a/Test/baseResults/spv.meshShaderUserDefined.mesh.out +++ b/Test/baseResults/spv.meshShaderUserDefined.mesh.out @@ -1,205 +1,203 @@ spv.meshShaderUserDefined.mesh // Module Version 10000 // Generated by (magic number): 80007 -// Id's are bound by 140 +// Id's are bound by 138 Capability MeshShadingNV Extension "SPV_NV_mesh_shader" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint MeshNV 4 "main" 12 19 37 103 + EntryPoint MeshNV 4 "main" 11 17 34 101 ExecutionMode 4 LocalSize 32 1 1 ExecutionMode 4 OutputVertices 81 ExecutionMode 4 OutputPrimitivesNV 32 ExecutionMode 4 OutputTrianglesNV - Source ESSL 320 + Source GLSL 450 SourceExtension "GL_NV_mesh_shader" Name 4 "main" Name 8 "iid" - 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 + 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 2: TypeVoid 3: TypeFunction 2 - 6: TypeInt 32 1 + 6: TypeInt 32 0 7: TypePointer Function 6(int) - 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 + 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 4(main): 2 Function None 3 5: Label 8(iid): 7(ptr) Variable Function - 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 + 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 131: 6(int) Load 8(iid) - 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 + 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 Return FunctionEnd diff --git a/Test/spv.320.meshShaderUserDefined.mesh b/Test/spv.320.meshShaderUserDefined.mesh new file mode 100644 index 000000000..60a145290 --- /dev/null +++ b/Test/spv.320.meshShaderUserDefined.mesh @@ -0,0 +1,59 @@ +#version 320 es + +#define MAX_VER 81 +#define MAX_PRIM 32 + +#define BARRIER() \ + memoryBarrierShared(); \ + barrier(); + +#extension GL_NV_mesh_shader : enable + +layout(local_size_x = 32) in; + +layout(max_vertices=MAX_VER) out; +layout(max_primitives=MAX_PRIM) out; +layout(triangles) out; + +// test use of user defined interface out blocks: + +// per-primitive block +perprimitiveNV layout(location=0) out myblock { + float f; + float fArr[4]; + vec3 pos; + vec4 posArr[4]; + mat4 m; + mat3 mArr[2]; +} blk[]; + +// per-vertex block +layout(location=20) out myblock2 { + float f; + vec4 pos; + mat4 m; +} blk2[]; + +void main() +{ + 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; + blk[iid/2].pos.yzx = vec3(14.0, 15.0, 13.0); + blk[iid*2].posArr[1].yzw = blk[iid/2].pos; + blk[iid/4].m[2].wzyx = vec4(13.0, 14.0, 15.0, 16.0); + blk[iid].mArr[0][1][1] = blk[iid/4].m[2].w; + blk[iid*4].mArr[1][gid] = vec3(17.0, 18.0, 19.0); + + BARRIER(); + + blk2[iid].f = blk2[iid-1].f + 20.0; + blk2[iid].pos = vec4(21.0, 22.0, 23.0, 24.0); + blk2[iid+1].m[gid] = blk2[iid].pos; + blk2[iid+1].m[gid][2] = 29.0; + blk2[iid+2].m[3] = blk2[iid+1].m[gid]; + + BARRIER(); +} diff --git a/Test/spv.meshShaderUserDefined.mesh b/Test/spv.meshShaderUserDefined.mesh index 60a145290..8b0937dbc 100644 --- a/Test/spv.meshShaderUserDefined.mesh +++ b/Test/spv.meshShaderUserDefined.mesh @@ -1,4 +1,4 @@ -#version 320 es +#version 450 #define MAX_VER 81 #define MAX_PRIM 32 @@ -36,8 +36,8 @@ layout(location=20) out myblock2 { void main() { - int iid = int(gl_LocalInvocationID.x); - int gid = int(gl_WorkGroupID.x); + uint iid = gl_LocalInvocationID.x; + uint gid = gl_WorkGroupID.x; blk[iid].f = 11.0; blk[iid+1].fArr[gid] = blk[iid].f; diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 3a0fa434d..9f9e5c5ca 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -3606,6 +3606,7 @@ void TParseContext::arraySizesCheck(const TSourceLoc& loc, const TQualifier& qua if ((profile == EEsProfile && version >= 320) || extensionTurnedOn(E_GL_NV_mesh_shader)) return; + break; #endif default: break; diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 4d7dd8b1f..6182f8104 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -835,8 +835,8 @@ 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) +// Check if extension is used with correct shader stage. +bool TParseVersions::checkShaderStageForNVExtensions(const TSourceLoc& loc, const char * const extension) { int lNumErrors = getNumErrors(); @@ -845,6 +845,8 @@ bool TParseVersions::validateExtensionName(const TSourceLoc& loc, const char * c requireStage(loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask), "#extension GL_NV_mesh_shader"); + // TODO: need to add error checks for other nvidia turing extensions + if (getNumErrors() > lNumErrors) return false; return true; diff --git a/glslang/MachineIndependent/parseVersions.h b/glslang/MachineIndependent/parseVersions.h index 3d36e5087..450480377 100644 --- a/glslang/MachineIndependent/parseVersions.h +++ b/glslang/MachineIndependent/parseVersions.h @@ -104,7 +104,7 @@ public: 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); + virtual bool checkShaderStageForNVExtensions(const TSourceLoc&, const char* const extension); #endif virtual void C_DECL error(const TSourceLoc&, const char* szReason, const char* szToken, diff --git a/glslang/MachineIndependent/preprocessor/Pp.cpp b/glslang/MachineIndependent/preprocessor/Pp.cpp index efc81fde3..7f39c34a0 100644 --- a/glslang/MachineIndependent/preprocessor/Pp.cpp +++ b/glslang/MachineIndependent/preprocessor/Pp.cpp @@ -875,7 +875,7 @@ int TPpContext::CPPextension(TPpToken* ppToken) } #ifdef NV_EXTENSIONS - if (!parseContext.validateExtensionName(ppToken->loc, extensionName)) + if (!parseContext.checkShaderStageForNVExtensions(ppToken->loc, extensionName)) return token; #endif