From 3958927a5990e69606eb1101524015bd43bd0cb7 Mon Sep 17 00:00:00 2001 From: Sahil Parmar Date: Thu, 7 Feb 2019 14:28:12 -0800 Subject: [PATCH] Add missing support for gl_MeshViewCountNV/gl_MeshViewIndicesNV in task shaders --- Test/baseResults/spv.meshTaskShader.task.out | 284 +++++++++++++++------------ Test/spv.meshTaskShader.task | 5 + glslang/MachineIndependent/Initialize.cpp | 8 + 3 files changed, 166 insertions(+), 131 deletions(-) diff --git a/Test/baseResults/spv.meshTaskShader.task.out b/Test/baseResults/spv.meshTaskShader.task.out index 517cbea..a835d7f 100644 --- a/Test/baseResults/spv.meshTaskShader.task.out +++ b/Test/baseResults/spv.meshTaskShader.task.out @@ -1,14 +1,14 @@ spv.meshTaskShader.task // Module Version 10000 // Generated by (magic number): 80007 -// Id's are bound by 104 +// Id's are bound by 116 Capability StorageImageWriteWithoutFormat Capability MeshShadingNV Extension "SPV_NV_mesh_shader" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint TaskNV 4 "main" 11 17 80 101 + EntryPoint TaskNV 4 "main" 11 17 24 25 90 113 ExecutionMode 4 LocalSize 32 1 1 Source GLSL 450 SourceExtension "GL_NV_mesh_shader" @@ -17,34 +17,42 @@ spv.meshTaskShader.task Name 11 "gl_LocalInvocationID" Name 16 "gid" Name 17 "gl_WorkGroupID" - Name 20 "i" - Name 34 "mem" - Name 37 "block0" - MemberName 37(block0) 0 "uni_value" - Name 39 "" - Name 55 "uni_image" - Name 78 "Task" - MemberName 78(Task) 0 "dummy" - MemberName 78(Task) 1 "submesh" - Name 80 "mytask" - Name 101 "gl_TaskCountNV" + Name 20 "viewID" + Name 24 "gl_MeshViewIndicesNV" + Name 25 "gl_MeshViewCountNV" + Name 30 "i" + Name 44 "mem" + Name 47 "block0" + MemberName 47(block0) 0 "uni_value" + Name 49 "" + Name 65 "uni_image" + Name 88 "Task" + MemberName 88(Task) 0 "dummy" + MemberName 88(Task) 1 "submesh" + MemberName 88(Task) 2 "viewID" + Name 90 "mytask" + Name 113 "gl_TaskCountNV" Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId - MemberDecorate 37(block0) 0 Offset 0 - Decorate 37(block0) Block - Decorate 39 DescriptorSet 0 - Decorate 39 Binding 0 - Decorate 55(uni_image) DescriptorSet 0 - Decorate 55(uni_image) Binding 0 - Decorate 55(uni_image) NonReadable - Decorate 77 ArrayStride 8 - MemberDecorate 78(Task) 0 PerTaskNV - MemberDecorate 78(Task) 0 Offset 0 - MemberDecorate 78(Task) 1 PerTaskNV - MemberDecorate 78(Task) 1 Offset 8 - Decorate 78(Task) Block - Decorate 101(gl_TaskCountNV) BuiltIn TaskCountNV - Decorate 103 BuiltIn WorkgroupSize + Decorate 24(gl_MeshViewIndicesNV) BuiltIn MeshViewIndicesNV + Decorate 25(gl_MeshViewCountNV) BuiltIn MeshViewCountNV + MemberDecorate 47(block0) 0 Offset 0 + Decorate 47(block0) Block + Decorate 49 DescriptorSet 0 + Decorate 49 Binding 0 + Decorate 65(uni_image) DescriptorSet 0 + Decorate 65(uni_image) Binding 0 + Decorate 65(uni_image) NonReadable + Decorate 87 ArrayStride 8 + MemberDecorate 88(Task) 0 PerTaskNV + MemberDecorate 88(Task) 0 Offset 0 + MemberDecorate 88(Task) 1 PerTaskNV + MemberDecorate 88(Task) 1 Offset 8 + MemberDecorate 88(Task) 2 PerTaskNV + MemberDecorate 88(Task) 2 Offset 32 + Decorate 88(Task) Block + Decorate 113(gl_TaskCountNV) BuiltIn TaskCountNV + Decorate 115 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -55,119 +63,133 @@ spv.meshTaskShader.task 12: 6(int) Constant 0 13: TypePointer Input 6(int) 17(gl_WorkGroupID): 10(ptr) Variable Input - 27: 6(int) Constant 10 - 28: TypeBool - 30: TypeFloat 32 - 31: TypeVector 30(float) 4 - 32: TypeArray 31(fvec4) 27 - 33: TypePointer Workgroup 32 - 34(mem): 33(ptr) Variable Workgroup - 37(block0): TypeStruct 6(int) - 38: TypePointer Uniform 37(block0) - 39: 38(ptr) Variable Uniform - 40: TypeInt 32 1 - 41: 40(int) Constant 0 - 42: TypePointer Uniform 6(int) - 48: TypePointer Workgroup 31(fvec4) - 51: 40(int) Constant 1 - 53: TypeImage 30(float) 2D nonsampled format:Unknown - 54: TypePointer UniformConstant 53 - 55(uni_image): 54(ptr) Variable UniformConstant - 59: TypeVector 40(int) 2 - 69: 6(int) Constant 1 - 73: 6(int) Constant 264 - 74: 6(int) Constant 2 - 75: TypeVector 30(float) 2 - 76: 6(int) Constant 3 - 77: TypeArray 75(fvec2) 76 - 78(Task): TypeStruct 75(fvec2) 77 - 79: TypePointer Output 78(Task) - 80(mytask): 79(ptr) Variable Output - 81: 30(float) Constant 1106247680 - 82: 30(float) Constant 1106771968 - 83: 75(fvec2) ConstantComposite 81 82 - 84: TypePointer Output 75(fvec2) - 86: 30(float) Constant 1107296256 - 87: 30(float) Constant 1107558400 - 88: 75(fvec2) ConstantComposite 86 87 - 90: 30(float) Constant 1107820544 - 91: 30(float) Constant 1108082688 - 92: 75(fvec2) ConstantComposite 90 91 - 94: 40(int) Constant 2 - 100: TypePointer Output 6(int) -101(gl_TaskCountNV): 100(ptr) Variable Output - 102: 6(int) Constant 32 - 103: 9(ivec3) ConstantComposite 102 69 69 + 21: 6(int) Constant 4 + 22: TypeArray 6(int) 21 + 23: TypePointer Input 22 +24(gl_MeshViewIndicesNV): 23(ptr) Variable Input +25(gl_MeshViewCountNV): 13(ptr) Variable Input + 37: 6(int) Constant 10 + 38: TypeBool + 40: TypeFloat 32 + 41: TypeVector 40(float) 4 + 42: TypeArray 41(fvec4) 37 + 43: TypePointer Workgroup 42 + 44(mem): 43(ptr) Variable Workgroup + 47(block0): TypeStruct 6(int) + 48: TypePointer Uniform 47(block0) + 49: 48(ptr) Variable Uniform + 50: TypeInt 32 1 + 51: 50(int) Constant 0 + 52: TypePointer Uniform 6(int) + 58: TypePointer Workgroup 41(fvec4) + 61: 50(int) Constant 1 + 63: TypeImage 40(float) 2D nonsampled format:Unknown + 64: TypePointer UniformConstant 63 + 65(uni_image): 64(ptr) Variable UniformConstant + 69: TypeVector 50(int) 2 + 79: 6(int) Constant 1 + 83: 6(int) Constant 264 + 84: 6(int) Constant 2 + 85: TypeVector 40(float) 2 + 86: 6(int) Constant 3 + 87: TypeArray 85(fvec2) 86 + 88(Task): TypeStruct 85(fvec2) 87 6(int) + 89: TypePointer Output 88(Task) + 90(mytask): 89(ptr) Variable Output + 91: 40(float) Constant 1106247680 + 92: 40(float) Constant 1106771968 + 93: 85(fvec2) ConstantComposite 91 92 + 94: TypePointer Output 85(fvec2) + 96: 40(float) Constant 1107296256 + 97: 40(float) Constant 1107558400 + 98: 85(fvec2) ConstantComposite 96 97 + 100: 40(float) Constant 1107820544 + 101: 40(float) Constant 1108082688 + 102: 85(fvec2) ConstantComposite 100 101 + 104: 50(int) Constant 2 + 111: TypePointer Output 6(int) +113(gl_TaskCountNV): 111(ptr) Variable Output + 114: 6(int) Constant 32 + 115: 9(ivec3) ConstantComposite 114 79 79 4(main): 2 Function None 3 5: Label 8(iid): 7(ptr) Variable Function 16(gid): 7(ptr) Variable Function - 20(i): 7(ptr) Variable Function + 20(viewID): 7(ptr) Variable Function + 30(i): 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 - Store 20(i) 12 - Branch 21 - 21: Label - LoopMerge 23 24 None - Branch 25 - 25: Label - 26: 6(int) Load 20(i) - 29: 28(bool) ULessThan 26 27 - BranchConditional 29 22 23 - 22: Label - 35: 6(int) Load 20(i) - 36: 6(int) Load 20(i) - 43: 42(ptr) AccessChain 39 41 - 44: 6(int) Load 43 - 45: 6(int) IAdd 36 44 - 46: 30(float) ConvertUToF 45 - 47: 31(fvec4) CompositeConstruct 46 46 46 46 - 49: 48(ptr) AccessChain 34(mem) 35 - Store 49 47 - Branch 24 - 24: Label - 50: 6(int) Load 20(i) - 52: 6(int) IAdd 50 51 - Store 20(i) 52 - Branch 21 - 23: Label - 56: 53 Load 55(uni_image) - 57: 6(int) Load 8(iid) - 58: 40(int) Bitcast 57 - 60: 59(ivec2) CompositeConstruct 58 58 - 61: 6(int) Load 16(gid) - 62: 48(ptr) AccessChain 34(mem) 61 - 63: 31(fvec4) Load 62 - ImageWrite 56 60 63 - 64: 53 Load 55(uni_image) - 65: 6(int) Load 8(iid) - 66: 40(int) Bitcast 65 - 67: 59(ivec2) CompositeConstruct 66 66 - 68: 6(int) Load 16(gid) - 70: 6(int) IAdd 68 69 - 71: 48(ptr) AccessChain 34(mem) 70 - 72: 31(fvec4) Load 71 - ImageWrite 64 67 72 - MemoryBarrier 69 73 - ControlBarrier 74 74 73 - 85: 84(ptr) AccessChain 80(mytask) 41 - Store 85 83 - 89: 84(ptr) AccessChain 80(mytask) 51 41 - Store 89 88 - 93: 84(ptr) AccessChain 80(mytask) 51 51 - Store 93 92 - 95: 6(int) Load 16(gid) - 96: 6(int) UMod 95 74 - 97: 84(ptr) AccessChain 80(mytask) 51 96 - 98: 75(fvec2) Load 97 - 99: 84(ptr) AccessChain 80(mytask) 51 94 + 26: 6(int) Load 25(gl_MeshViewCountNV) + 27: 6(int) UMod 26 21 + 28: 13(ptr) AccessChain 24(gl_MeshViewIndicesNV) 27 + 29: 6(int) Load 28 + Store 20(viewID) 29 + Store 30(i) 12 + Branch 31 + 31: Label + LoopMerge 33 34 None + Branch 35 + 35: Label + 36: 6(int) Load 30(i) + 39: 38(bool) ULessThan 36 37 + BranchConditional 39 32 33 + 32: Label + 45: 6(int) Load 30(i) + 46: 6(int) Load 30(i) + 53: 52(ptr) AccessChain 49 51 + 54: 6(int) Load 53 + 55: 6(int) IAdd 46 54 + 56: 40(float) ConvertUToF 55 + 57: 41(fvec4) CompositeConstruct 56 56 56 56 + 59: 58(ptr) AccessChain 44(mem) 45 + Store 59 57 + Branch 34 + 34: Label + 60: 6(int) Load 30(i) + 62: 6(int) IAdd 60 61 + Store 30(i) 62 + Branch 31 + 33: Label + 66: 63 Load 65(uni_image) + 67: 6(int) Load 8(iid) + 68: 50(int) Bitcast 67 + 70: 69(ivec2) CompositeConstruct 68 68 + 71: 6(int) Load 16(gid) + 72: 58(ptr) AccessChain 44(mem) 71 + 73: 41(fvec4) Load 72 + ImageWrite 66 70 73 + 74: 63 Load 65(uni_image) + 75: 6(int) Load 8(iid) + 76: 50(int) Bitcast 75 + 77: 69(ivec2) CompositeConstruct 76 76 + 78: 6(int) Load 16(gid) + 80: 6(int) IAdd 78 79 + 81: 58(ptr) AccessChain 44(mem) 80 + 82: 41(fvec4) Load 81 + ImageWrite 74 77 82 + MemoryBarrier 79 83 + ControlBarrier 84 84 83 + 95: 94(ptr) AccessChain 90(mytask) 51 + Store 95 93 + 99: 94(ptr) AccessChain 90(mytask) 61 51 Store 99 98 - MemoryBarrier 69 73 - ControlBarrier 74 74 73 - Store 101(gl_TaskCountNV) 76 + 103: 94(ptr) AccessChain 90(mytask) 61 61 + Store 103 102 + 105: 6(int) Load 16(gid) + 106: 6(int) UMod 105 84 + 107: 94(ptr) AccessChain 90(mytask) 61 106 + 108: 85(fvec2) Load 107 + 109: 94(ptr) AccessChain 90(mytask) 61 104 + Store 109 108 + 110: 6(int) Load 20(viewID) + 112: 111(ptr) AccessChain 90(mytask) 104 + Store 112 110 + MemoryBarrier 79 83 + ControlBarrier 84 84 83 + Store 113(gl_TaskCountNV) 86 Return FunctionEnd diff --git a/Test/spv.meshTaskShader.task b/Test/spv.meshTaskShader.task index c12b3bd..ff94e6d 100644 --- a/Test/spv.meshTaskShader.task +++ b/Test/spv.meshTaskShader.task @@ -1,5 +1,7 @@ #version 450 +#define MAX_VIEWS gl_MaxMeshViewCountNV + #define BARRIER() \ memoryBarrierShared(); \ barrier(); @@ -19,12 +21,14 @@ shared vec4 mem[10]; taskNV out Task { vec2 dummy; vec2 submesh[3]; + uint viewID; } mytask; void main() { uint iid = gl_LocalInvocationID.x; uint gid = gl_WorkGroupID.x; + uint viewID = gl_MeshViewIndicesNV[gl_MeshViewCountNV%MAX_VIEWS]; // 1. shared memory load and stores for (uint i = 0; i < 10; ++i) { @@ -41,6 +45,7 @@ void main() mytask.submesh[0] = vec2(32.0, 33.0); mytask.submesh[1] = vec2(34.0, 35.0); mytask.submesh[2] = mytask.submesh[gid%2]; + mytask.viewID = viewID; BARRIER(); diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index a71d5aa..e399ead 100755 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -5357,6 +5357,9 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in highp uvec3 gl_GlobalInvocationID;" "in highp uint gl_LocalInvocationIndex;" + "in uint gl_MeshViewCountNV;" + "in uint gl_MeshViewIndicesNV[4];" + "\n"); } @@ -8843,6 +8846,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_LocalInvocationID", 1, &E_GL_NV_mesh_shader); symbolTable.setVariableExtensions("gl_GlobalInvocationID", 1, &E_GL_NV_mesh_shader); symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_NV_mesh_shader); + symbolTable.setVariableExtensions("gl_MeshViewCountNV", 1, &E_GL_NV_mesh_shader); + symbolTable.setVariableExtensions("gl_MeshViewIndicesNV", 1, &E_GL_NV_mesh_shader); BuiltInVariable("gl_TaskCountNV", EbvTaskCountNV, symbolTable); BuiltInVariable("gl_WorkGroupSize", EbvWorkGroupSize, symbolTable); @@ -8850,8 +8855,11 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_LocalInvocationID", EbvLocalInvocationId, symbolTable); BuiltInVariable("gl_GlobalInvocationID", EbvGlobalInvocationId, symbolTable); BuiltInVariable("gl_LocalInvocationIndex", EbvLocalInvocationIndex, symbolTable); + BuiltInVariable("gl_MeshViewCountNV", EbvMeshViewCountNV, symbolTable); + BuiltInVariable("gl_MeshViewIndicesNV", EbvMeshViewIndicesNV, symbolTable); symbolTable.setVariableExtensions("gl_MaxTaskWorkGroupSizeNV", 1, &E_GL_NV_mesh_shader); + symbolTable.setVariableExtensions("gl_MaxMeshViewCountNV", 1, &E_GL_NV_mesh_shader); symbolTable.setFunctionExtensions("barrier", 1, &E_GL_NV_mesh_shader); symbolTable.setFunctionExtensions("memoryBarrierShared", 1, &E_GL_NV_mesh_shader); -- 2.7.4