HLSL: various SPIR-V compute shader IDs must be a 3-vector of integers.
This PR forces the external definition of SV_GroupID variables to 3-vectors. The conversion process between the shader-declared type and the external type happens in wrapped main IO variable conversion. The same applies to SV_DispatchThreadID and SV_GroupThreadID. Fixes: #1371
This commit is contained in:
146
Test/baseResults/hlsl.groupid.comp.out
Normal file
146
Test/baseResults/hlsl.groupid.comp.out
Normal file
@@ -0,0 +1,146 @@
|
||||
hlsl.groupid.comp
|
||||
Shader version: 500
|
||||
local_size = (8, 8, 1)
|
||||
0:? Sequence
|
||||
0:7 Function Definition: @main(vu2; ( temp void)
|
||||
0:7 Function Parameters:
|
||||
0:7 'vGroupId' ( in 2-component vector of uint)
|
||||
0:? Sequence
|
||||
0:8 Sequence
|
||||
0:8 move second child to first child ( temp 4-component vector of float)
|
||||
0:8 'storeTemp' ( temp 4-component vector of float)
|
||||
0:? Constant:
|
||||
0:? 1.000000
|
||||
0:? 0.000000
|
||||
0:? 0.000000
|
||||
0:? 1.000000
|
||||
0:8 imageStore ( temp void)
|
||||
0:8 'OutputTexture' (layout( rgba32f) uniform image2D)
|
||||
0:8 vector swizzle ( temp 2-component vector of uint)
|
||||
0:8 'vGroupId' ( in 2-component vector of uint)
|
||||
0:8 Sequence
|
||||
0:8 Constant:
|
||||
0:8 0 (const int)
|
||||
0:8 Constant:
|
||||
0:8 1 (const int)
|
||||
0:8 'storeTemp' ( temp 4-component vector of float)
|
||||
0:8 'storeTemp' ( temp 4-component vector of float)
|
||||
0:7 Function Definition: main( ( temp void)
|
||||
0:7 Function Parameters:
|
||||
0:? Sequence
|
||||
0:7 move second child to first child ( temp 2-component vector of uint)
|
||||
0:? 'vGroupId' ( temp 2-component vector of uint)
|
||||
0:? Construct uvec2 ( temp 2-component vector of uint)
|
||||
0:? 'vGroupId' ( in 3-component vector of uint WorkGroupID)
|
||||
0:7 Function Call: @main(vu2; ( temp void)
|
||||
0:? 'vGroupId' ( temp 2-component vector of uint)
|
||||
0:? Linker Objects
|
||||
0:? 'OutputTexture' (layout( rgba32f) uniform image2D)
|
||||
0:? 'vGroupId' ( in 3-component vector of uint WorkGroupID)
|
||||
|
||||
|
||||
Linked compute stage:
|
||||
|
||||
|
||||
Shader version: 500
|
||||
local_size = (8, 8, 1)
|
||||
0:? Sequence
|
||||
0:7 Function Definition: @main(vu2; ( temp void)
|
||||
0:7 Function Parameters:
|
||||
0:7 'vGroupId' ( in 2-component vector of uint)
|
||||
0:? Sequence
|
||||
0:8 Sequence
|
||||
0:8 move second child to first child ( temp 4-component vector of float)
|
||||
0:8 'storeTemp' ( temp 4-component vector of float)
|
||||
0:? Constant:
|
||||
0:? 1.000000
|
||||
0:? 0.000000
|
||||
0:? 0.000000
|
||||
0:? 1.000000
|
||||
0:8 imageStore ( temp void)
|
||||
0:8 'OutputTexture' (layout( rgba32f) uniform image2D)
|
||||
0:8 vector swizzle ( temp 2-component vector of uint)
|
||||
0:8 'vGroupId' ( in 2-component vector of uint)
|
||||
0:8 Sequence
|
||||
0:8 Constant:
|
||||
0:8 0 (const int)
|
||||
0:8 Constant:
|
||||
0:8 1 (const int)
|
||||
0:8 'storeTemp' ( temp 4-component vector of float)
|
||||
0:8 'storeTemp' ( temp 4-component vector of float)
|
||||
0:7 Function Definition: main( ( temp void)
|
||||
0:7 Function Parameters:
|
||||
0:? Sequence
|
||||
0:7 move second child to first child ( temp 2-component vector of uint)
|
||||
0:? 'vGroupId' ( temp 2-component vector of uint)
|
||||
0:? Construct uvec2 ( temp 2-component vector of uint)
|
||||
0:? 'vGroupId' ( in 3-component vector of uint WorkGroupID)
|
||||
0:7 Function Call: @main(vu2; ( temp void)
|
||||
0:? 'vGroupId' ( temp 2-component vector of uint)
|
||||
0:? Linker Objects
|
||||
0:? 'OutputTexture' (layout( rgba32f) uniform image2D)
|
||||
0:? 'vGroupId' ( in 3-component vector of uint WorkGroupID)
|
||||
|
||||
// Module Version 10000
|
||||
// Generated by (magic number): 80006
|
||||
// Id's are bound by 37
|
||||
|
||||
Capability Shader
|
||||
1: ExtInstImport "GLSL.std.450"
|
||||
MemoryModel Logical GLSL450
|
||||
EntryPoint GLCompute 4 "main" 29
|
||||
ExecutionMode 4 LocalSize 8 8 1
|
||||
Source HLSL 500
|
||||
Name 4 "main"
|
||||
Name 11 "@main(vu2;"
|
||||
Name 10 "vGroupId"
|
||||
Name 16 "storeTemp"
|
||||
Name 22 "OutputTexture"
|
||||
Name 26 "vGroupId"
|
||||
Name 29 "vGroupId"
|
||||
Name 34 "param"
|
||||
Decorate 22(OutputTexture) DescriptorSet 0
|
||||
Decorate 29(vGroupId) BuiltIn WorkgroupId
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeInt 32 0
|
||||
7: TypeVector 6(int) 2
|
||||
8: TypePointer Function 7(ivec2)
|
||||
9: TypeFunction 2 8(ptr)
|
||||
13: TypeFloat 32
|
||||
14: TypeVector 13(float) 4
|
||||
15: TypePointer Function 14(fvec4)
|
||||
17: 13(float) Constant 1065353216
|
||||
18: 13(float) Constant 0
|
||||
19: 14(fvec4) ConstantComposite 17 18 18 17
|
||||
20: TypeImage 13(float) 2D nonsampled format:Rgba32f
|
||||
21: TypePointer UniformConstant 20
|
||||
22(OutputTexture): 21(ptr) Variable UniformConstant
|
||||
27: TypeVector 6(int) 3
|
||||
28: TypePointer Input 27(ivec3)
|
||||
29(vGroupId): 28(ptr) Variable Input
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
26(vGroupId): 8(ptr) Variable Function
|
||||
34(param): 8(ptr) Variable Function
|
||||
30: 27(ivec3) Load 29(vGroupId)
|
||||
31: 6(int) CompositeExtract 30 0
|
||||
32: 6(int) CompositeExtract 30 1
|
||||
33: 7(ivec2) CompositeConstruct 31 32
|
||||
Store 26(vGroupId) 33
|
||||
35: 7(ivec2) Load 26(vGroupId)
|
||||
Store 34(param) 35
|
||||
36: 2 FunctionCall 11(@main(vu2;) 34(param)
|
||||
Return
|
||||
FunctionEnd
|
||||
11(@main(vu2;): 2 Function None 9
|
||||
10(vGroupId): 8(ptr) FunctionParameter
|
||||
12: Label
|
||||
16(storeTemp): 15(ptr) Variable Function
|
||||
Store 16(storeTemp) 19
|
||||
23: 20 Load 22(OutputTexture)
|
||||
24: 7(ivec2) Load 10(vGroupId)
|
||||
25: 14(fvec4) Load 16(storeTemp)
|
||||
ImageWrite 23 24 25
|
||||
Return
|
||||
FunctionEnd
|
||||
Reference in New Issue
Block a user