
SPIR-V 1.6 added the LocalSizeId execution mode that allows using spec constants for setting the work-group size, however it does not deprecate the LocalSize mode. This change causes the LocalSizeId mode to only be used when at least one of the workgroup size is actually specified with a spec constant. Fixes #3200
386 lines
22 KiB
Plaintext
386 lines
22 KiB
Plaintext
hlsl.structcopylogical.comp
|
|
Shader version: 500
|
|
local_size = (128, 1, 1)
|
|
0:? Sequence
|
|
0:20 Function Definition: @main(u1; ( temp void)
|
|
0:20 Function Parameters:
|
|
0:20 'id' ( in uint)
|
|
0:? Sequence
|
|
0:21 move second child to first child ( temp structure{ temp uint a, temp uint b, temp uint c})
|
|
0:21 direct index ( temp structure{ temp uint a, temp uint b, temp uint c})
|
|
0:21 's' ( shared 128-element array of structure{ temp uint a, temp uint b, temp uint c})
|
|
0:21 Constant:
|
|
0:21 0 (const int)
|
|
0:21 Constant:
|
|
0:21 1 (const uint)
|
|
0:21 2 (const uint)
|
|
0:21 3 (const uint)
|
|
0:22 Sequence
|
|
0:22 move second child to first child ( temp uint)
|
|
0:22 'count' ( temp uint)
|
|
0:22 count: direct index for structure ( temp uint)
|
|
0:22 direct index (layout( row_major std430) buffer structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data})
|
|
0:22 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data})
|
|
0:22 'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data} @data})
|
|
0:22 Constant:
|
|
0:22 0 (const uint)
|
|
0:22 Constant:
|
|
0:22 0 (const int)
|
|
0:22 Constant:
|
|
0:22 0 (const int)
|
|
0:23 Sequence
|
|
0:23 move second child to first child ( temp structure{ temp uint a, temp uint b, temp uint c})
|
|
0:23 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c})
|
|
0:23 Test condition and select ( temp structure{ temp uint a, temp uint b, temp uint c}): no shortcircuit
|
|
0:23 Condition
|
|
0:23 Compare Greater Than ( temp bool)
|
|
0:23 'id' ( in uint)
|
|
0:23 'count' ( temp uint)
|
|
0:23 true case
|
|
0:23 indirect index ( temp structure{ temp uint a, temp uint b, temp uint c})
|
|
0:23 's' ( shared 128-element array of structure{ temp uint a, temp uint b, temp uint c})
|
|
0:23 subtract ( temp uint)
|
|
0:23 'id' ( in uint)
|
|
0:23 'count' ( temp uint)
|
|
0:23 false case
|
|
0:23 indirect index ( temp structure{ temp uint a, temp uint b, temp uint c})
|
|
0:23 data: direct index for structure ( temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c})
|
|
0:23 direct index (layout( row_major std430) buffer structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data})
|
|
0:23 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data})
|
|
0:23 'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data} @data})
|
|
0:23 Constant:
|
|
0:23 0 (const uint)
|
|
0:23 Constant:
|
|
0:23 0 (const int)
|
|
0:23 Constant:
|
|
0:23 1 (const int)
|
|
0:23 'id' ( in uint)
|
|
0:25 AtomicAdd ( temp uint)
|
|
0:25 a: direct index for structure ( temp uint)
|
|
0:25 direct index (layout( row_major std430) buffer structure{ temp uint a, temp uint b, temp uint c})
|
|
0:25 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c})
|
|
0:25 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data})
|
|
0:25 Constant:
|
|
0:25 0 (const uint)
|
|
0:25 Constant:
|
|
0:25 0 (const int)
|
|
0:25 Constant:
|
|
0:25 0 (const int)
|
|
0:25 a: direct index for structure ( temp uint)
|
|
0:25 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c})
|
|
0:25 Constant:
|
|
0:25 0 (const int)
|
|
0:26 AtomicAdd ( temp uint)
|
|
0:26 b: direct index for structure ( temp uint)
|
|
0:26 direct index (layout( row_major std430) buffer structure{ temp uint a, temp uint b, temp uint c})
|
|
0:26 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c})
|
|
0:26 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data})
|
|
0:26 Constant:
|
|
0:26 0 (const uint)
|
|
0:26 Constant:
|
|
0:26 0 (const int)
|
|
0:26 Constant:
|
|
0:26 1 (const int)
|
|
0:26 b: direct index for structure ( temp uint)
|
|
0:26 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c})
|
|
0:26 Constant:
|
|
0:26 1 (const int)
|
|
0:27 AtomicAdd ( temp uint)
|
|
0:27 c: direct index for structure ( temp uint)
|
|
0:27 direct index (layout( row_major std430) buffer structure{ temp uint a, temp uint b, temp uint c})
|
|
0:27 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c})
|
|
0:27 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data})
|
|
0:27 Constant:
|
|
0:27 0 (const uint)
|
|
0:27 Constant:
|
|
0:27 0 (const int)
|
|
0:27 Constant:
|
|
0:27 2 (const int)
|
|
0:27 c: direct index for structure ( temp uint)
|
|
0:27 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c})
|
|
0:27 Constant:
|
|
0:27 2 (const int)
|
|
0:20 Function Definition: main( ( temp void)
|
|
0:20 Function Parameters:
|
|
0:? Sequence
|
|
0:20 move second child to first child ( temp uint)
|
|
0:? 'id' ( temp uint)
|
|
0:? 'id' ( in uint LocalInvocationIndex)
|
|
0:20 Function Call: @main(u1; ( temp void)
|
|
0:? 'id' ( temp uint)
|
|
0:? Linker Objects
|
|
0:? 'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data} @data})
|
|
0:? 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data})
|
|
0:? 's' ( shared 128-element array of structure{ temp uint a, temp uint b, temp uint c})
|
|
0:? 'deflt' ( const structure{ temp uint a, temp uint b, temp uint c})
|
|
0:? 1 (const uint)
|
|
0:? 2 (const uint)
|
|
0:? 3 (const uint)
|
|
0:? 'id' ( in uint LocalInvocationIndex)
|
|
|
|
|
|
Linked compute stage:
|
|
|
|
|
|
Shader version: 500
|
|
local_size = (128, 1, 1)
|
|
0:? Sequence
|
|
0:20 Function Definition: @main(u1; ( temp void)
|
|
0:20 Function Parameters:
|
|
0:20 'id' ( in uint)
|
|
0:? Sequence
|
|
0:21 move second child to first child ( temp structure{ temp uint a, temp uint b, temp uint c})
|
|
0:21 direct index ( temp structure{ temp uint a, temp uint b, temp uint c})
|
|
0:21 's' ( shared 128-element array of structure{ temp uint a, temp uint b, temp uint c})
|
|
0:21 Constant:
|
|
0:21 0 (const int)
|
|
0:21 Constant:
|
|
0:21 1 (const uint)
|
|
0:21 2 (const uint)
|
|
0:21 3 (const uint)
|
|
0:22 Sequence
|
|
0:22 move second child to first child ( temp uint)
|
|
0:22 'count' ( temp uint)
|
|
0:22 count: direct index for structure ( temp uint)
|
|
0:22 direct index (layout( row_major std430) buffer structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data})
|
|
0:22 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data})
|
|
0:22 'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data} @data})
|
|
0:22 Constant:
|
|
0:22 0 (const uint)
|
|
0:22 Constant:
|
|
0:22 0 (const int)
|
|
0:22 Constant:
|
|
0:22 0 (const int)
|
|
0:23 Sequence
|
|
0:23 move second child to first child ( temp structure{ temp uint a, temp uint b, temp uint c})
|
|
0:23 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c})
|
|
0:23 Test condition and select ( temp structure{ temp uint a, temp uint b, temp uint c}): no shortcircuit
|
|
0:23 Condition
|
|
0:23 Compare Greater Than ( temp bool)
|
|
0:23 'id' ( in uint)
|
|
0:23 'count' ( temp uint)
|
|
0:23 true case
|
|
0:23 indirect index ( temp structure{ temp uint a, temp uint b, temp uint c})
|
|
0:23 's' ( shared 128-element array of structure{ temp uint a, temp uint b, temp uint c})
|
|
0:23 subtract ( temp uint)
|
|
0:23 'id' ( in uint)
|
|
0:23 'count' ( temp uint)
|
|
0:23 false case
|
|
0:23 indirect index ( temp structure{ temp uint a, temp uint b, temp uint c})
|
|
0:23 data: direct index for structure ( temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c})
|
|
0:23 direct index (layout( row_major std430) buffer structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data})
|
|
0:23 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data})
|
|
0:23 'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data} @data})
|
|
0:23 Constant:
|
|
0:23 0 (const uint)
|
|
0:23 Constant:
|
|
0:23 0 (const int)
|
|
0:23 Constant:
|
|
0:23 1 (const int)
|
|
0:23 'id' ( in uint)
|
|
0:25 AtomicAdd ( temp uint)
|
|
0:25 a: direct index for structure ( temp uint)
|
|
0:25 direct index (layout( row_major std430) buffer structure{ temp uint a, temp uint b, temp uint c})
|
|
0:25 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c})
|
|
0:25 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data})
|
|
0:25 Constant:
|
|
0:25 0 (const uint)
|
|
0:25 Constant:
|
|
0:25 0 (const int)
|
|
0:25 Constant:
|
|
0:25 0 (const int)
|
|
0:25 a: direct index for structure ( temp uint)
|
|
0:25 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c})
|
|
0:25 Constant:
|
|
0:25 0 (const int)
|
|
0:26 AtomicAdd ( temp uint)
|
|
0:26 b: direct index for structure ( temp uint)
|
|
0:26 direct index (layout( row_major std430) buffer structure{ temp uint a, temp uint b, temp uint c})
|
|
0:26 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c})
|
|
0:26 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data})
|
|
0:26 Constant:
|
|
0:26 0 (const uint)
|
|
0:26 Constant:
|
|
0:26 0 (const int)
|
|
0:26 Constant:
|
|
0:26 1 (const int)
|
|
0:26 b: direct index for structure ( temp uint)
|
|
0:26 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c})
|
|
0:26 Constant:
|
|
0:26 1 (const int)
|
|
0:27 AtomicAdd ( temp uint)
|
|
0:27 c: direct index for structure ( temp uint)
|
|
0:27 direct index (layout( row_major std430) buffer structure{ temp uint a, temp uint b, temp uint c})
|
|
0:27 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c})
|
|
0:27 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data})
|
|
0:27 Constant:
|
|
0:27 0 (const uint)
|
|
0:27 Constant:
|
|
0:27 0 (const int)
|
|
0:27 Constant:
|
|
0:27 2 (const int)
|
|
0:27 c: direct index for structure ( temp uint)
|
|
0:27 'ms' ( temp structure{ temp uint a, temp uint b, temp uint c})
|
|
0:27 Constant:
|
|
0:27 2 (const int)
|
|
0:20 Function Definition: main( ( temp void)
|
|
0:20 Function Parameters:
|
|
0:? Sequence
|
|
0:20 move second child to first child ( temp uint)
|
|
0:? 'id' ( temp uint)
|
|
0:? 'id' ( in uint LocalInvocationIndex)
|
|
0:20 Function Call: @main(u1; ( temp void)
|
|
0:? 'id' ( temp uint)
|
|
0:? Linker Objects
|
|
0:? 'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count, temp unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} data} @data})
|
|
0:? 'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a, temp uint b, temp uint c} @data})
|
|
0:? 's' ( shared 128-element array of structure{ temp uint a, temp uint b, temp uint c})
|
|
0:? 'deflt' ( const structure{ temp uint a, temp uint b, temp uint c})
|
|
0:? 1 (const uint)
|
|
0:? 2 (const uint)
|
|
0:? 3 (const uint)
|
|
0:? 'id' ( in uint LocalInvocationIndex)
|
|
|
|
// Module Version 10600
|
|
// Generated by (magic number): 8000b
|
|
// Id's are bound by 79
|
|
|
|
Capability Shader
|
|
1: ExtInstImport "GLSL.std.450"
|
|
MemoryModel Logical GLSL450
|
|
EntryPoint GLCompute 4 "main" 16 32 57 74
|
|
ExecutionMode 4 LocalSize 128 1 1
|
|
Source HLSL 500
|
|
Name 4 "main"
|
|
Name 10 "@main(u1;"
|
|
Name 9 "id"
|
|
Name 12 "MyStruct"
|
|
MemberName 12(MyStruct) 0 "a"
|
|
MemberName 12(MyStruct) 1 "b"
|
|
MemberName 12(MyStruct) 2 "c"
|
|
Name 16 "s"
|
|
Name 25 "count"
|
|
Name 26 "MyStruct"
|
|
MemberName 26(MyStruct) 0 "a"
|
|
MemberName 26(MyStruct) 1 "b"
|
|
MemberName 26(MyStruct) 2 "c"
|
|
Name 28 "MyStructs"
|
|
MemberName 28(MyStructs) 0 "count"
|
|
MemberName 28(MyStructs) 1 "data"
|
|
Name 30 "sb"
|
|
MemberName 30(sb) 0 "@data"
|
|
Name 32 "sb"
|
|
Name 37 "ms"
|
|
Name 55 "o"
|
|
MemberName 55(o) 0 "@data"
|
|
Name 57 "o"
|
|
Name 72 "id"
|
|
Name 74 "id"
|
|
Name 76 "param"
|
|
MemberDecorate 26(MyStruct) 0 Offset 0
|
|
MemberDecorate 26(MyStruct) 1 Offset 4
|
|
MemberDecorate 26(MyStruct) 2 Offset 8
|
|
Decorate 27 ArrayStride 12
|
|
MemberDecorate 28(MyStructs) 0 Offset 0
|
|
MemberDecorate 28(MyStructs) 1 Offset 4
|
|
Decorate 28(MyStructs) Block
|
|
Decorate 29 ArrayStride 16
|
|
MemberDecorate 30(sb) 0 NonWritable
|
|
MemberDecorate 30(sb) 0 Offset 0
|
|
Decorate 30(sb) Block
|
|
Decorate 32(sb) DescriptorSet 0
|
|
Decorate 32(sb) Binding 0
|
|
Decorate 54 ArrayStride 12
|
|
MemberDecorate 55(o) 0 NonWritable
|
|
MemberDecorate 55(o) 0 Offset 0
|
|
Decorate 55(o) Block
|
|
Decorate 57(o) DescriptorSet 0
|
|
Decorate 57(o) Binding 1
|
|
Decorate 74(id) BuiltIn LocalInvocationIndex
|
|
2: TypeVoid
|
|
3: TypeFunction 2
|
|
6: TypeInt 32 0
|
|
7: TypePointer Function 6(int)
|
|
8: TypeFunction 2 7(ptr)
|
|
12(MyStruct): TypeStruct 6(int) 6(int) 6(int)
|
|
13: 6(int) Constant 128
|
|
14: TypeArray 12(MyStruct) 13
|
|
15: TypePointer Workgroup 14
|
|
16(s): 15(ptr) Variable Workgroup
|
|
17: TypeInt 32 1
|
|
18: 17(int) Constant 0
|
|
19: 6(int) Constant 1
|
|
20: 6(int) Constant 2
|
|
21: 6(int) Constant 3
|
|
22:12(MyStruct) ConstantComposite 19 20 21
|
|
23: TypePointer Workgroup 12(MyStruct)
|
|
26(MyStruct): TypeStruct 6(int) 6(int) 6(int)
|
|
27: TypeRuntimeArray 26(MyStruct)
|
|
28(MyStructs): TypeStruct 6(int) 27
|
|
29: TypeRuntimeArray 28(MyStructs)
|
|
30(sb): TypeStruct 29
|
|
31: TypePointer StorageBuffer 30(sb)
|
|
32(sb): 31(ptr) Variable StorageBuffer
|
|
33: TypePointer StorageBuffer 6(int)
|
|
36: TypePointer Function 12(MyStruct)
|
|
40: TypeBool
|
|
47: 17(int) Constant 1
|
|
49: TypePointer StorageBuffer 26(MyStruct)
|
|
54: TypeRuntimeArray 26(MyStruct)
|
|
55(o): TypeStruct 54
|
|
56: TypePointer StorageBuffer 55(o)
|
|
57(o): 56(ptr) Variable StorageBuffer
|
|
61: 6(int) Constant 0
|
|
67: 17(int) Constant 2
|
|
73: TypePointer Input 6(int)
|
|
74(id): 73(ptr) Variable Input
|
|
4(main): 2 Function None 3
|
|
5: Label
|
|
72(id): 7(ptr) Variable Function
|
|
76(param): 7(ptr) Variable Function
|
|
75: 6(int) Load 74(id)
|
|
Store 72(id) 75
|
|
77: 6(int) Load 72(id)
|
|
Store 76(param) 77
|
|
78: 2 FunctionCall 10(@main(u1;) 76(param)
|
|
Return
|
|
FunctionEnd
|
|
10(@main(u1;): 2 Function None 8
|
|
9(id): 7(ptr) FunctionParameter
|
|
11: Label
|
|
25(count): 7(ptr) Variable Function
|
|
37(ms): 36(ptr) Variable Function
|
|
24: 23(ptr) AccessChain 16(s) 18
|
|
Store 24 22
|
|
34: 33(ptr) AccessChain 32(sb) 18 18 18
|
|
35: 6(int) Load 34
|
|
Store 25(count) 35
|
|
38: 6(int) Load 9(id)
|
|
39: 6(int) Load 25(count)
|
|
41: 40(bool) UGreaterThan 38 39
|
|
42: 6(int) Load 9(id)
|
|
43: 6(int) Load 25(count)
|
|
44: 6(int) ISub 42 43
|
|
45: 23(ptr) AccessChain 16(s) 44
|
|
46:12(MyStruct) Load 45
|
|
48: 6(int) Load 9(id)
|
|
50: 49(ptr) AccessChain 32(sb) 18 18 47 48
|
|
51:26(MyStruct) Load 50
|
|
52:12(MyStruct) CopyLogical 51
|
|
53:12(MyStruct) Select 41 46 52
|
|
Store 37(ms) 53
|
|
58: 33(ptr) AccessChain 57(o) 18 18 18
|
|
59: 7(ptr) AccessChain 37(ms) 18
|
|
60: 6(int) Load 59
|
|
62: 6(int) AtomicIAdd 58 19 61 60
|
|
63: 33(ptr) AccessChain 57(o) 18 18 47
|
|
64: 7(ptr) AccessChain 37(ms) 47
|
|
65: 6(int) Load 64
|
|
66: 6(int) AtomicIAdd 63 19 61 65
|
|
68: 33(ptr) AccessChain 57(o) 18 18 67
|
|
69: 7(ptr) AccessChain 37(ms) 67
|
|
70: 6(int) Load 69
|
|
71: 6(int) AtomicIAdd 68 19 61 70
|
|
Return
|
|
FunctionEnd
|