HLSL: Fix #1163: treat buffers as references when calling functions.
This continues to prevent writing output buffers (out from a function), but fixes the problem where the copy-in/out was not getting done. Making everything work will require knowing both in/out-ness and bufferness, but these are currently mutually exclusive, because both are storage qualifiers.
This commit is contained in:
parent
1f89992423
commit
6a14f78061
4 changed files with 182 additions and 196 deletions
|
|
@ -135,14 +135,14 @@ local_size = (256, 1, 1)
|
|||
|
||||
// Module Version 10000
|
||||
// Generated by (magic number): 80002
|
||||
// Id's are bound by 62
|
||||
// Id's are bound by 61
|
||||
|
||||
Capability Shader
|
||||
Capability ImageBuffer
|
||||
Capability StorageImageExtendedFormats
|
||||
1: ExtInstImport "GLSL.std.450"
|
||||
MemoryModel Logical GLSL450
|
||||
EntryPoint GLCompute 4 "main" 57
|
||||
EntryPoint GLCompute 4 "main" 56
|
||||
ExecutionMode 4 LocalSize 256 1 1
|
||||
Source HLSL 500
|
||||
Name 4 "main"
|
||||
|
|
@ -155,14 +155,13 @@ local_size = (256, 1, 1)
|
|||
Name 18 "dispatchId"
|
||||
Name 22 "result"
|
||||
Name 25 "byteAddrTemp"
|
||||
Name 42 "result"
|
||||
Name 43 "result"
|
||||
Name 44 "g_input"
|
||||
Name 45 "param"
|
||||
Name 47 "param"
|
||||
Name 51 "g_output"
|
||||
Name 55 "dispatchId"
|
||||
Name 57 "dispatchId"
|
||||
Name 59 "param"
|
||||
Name 50 "g_output"
|
||||
Name 54 "dispatchId"
|
||||
Name 56 "dispatchId"
|
||||
Name 58 "param"
|
||||
Decorate 8 ArrayStride 4
|
||||
MemberDecorate 9 0 NonWritable
|
||||
MemberDecorate 9 0 Offset 0
|
||||
|
|
@ -170,16 +169,16 @@ local_size = (256, 1, 1)
|
|||
Decorate 14(buffer) NonWritable
|
||||
Decorate 44(g_input) DescriptorSet 0
|
||||
Decorate 44(g_input) Binding 0
|
||||
Decorate 51(g_output) DescriptorSet 0
|
||||
Decorate 51(g_output) Binding 1
|
||||
Decorate 57(dispatchId) BuiltIn GlobalInvocationId
|
||||
Decorate 50(g_output) DescriptorSet 0
|
||||
Decorate 50(g_output) Binding 1
|
||||
Decorate 56(dispatchId) BuiltIn GlobalInvocationId
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeInt 32 0
|
||||
7: TypePointer Function 6(int)
|
||||
8: TypeRuntimeArray 6(int)
|
||||
9: TypeStruct 8
|
||||
10: TypePointer Function 9(struct)
|
||||
10: TypePointer Uniform 9(struct)
|
||||
11: TypeVector 6(int) 2
|
||||
12: TypeFunction 11(ivec2) 7(ptr) 10(ptr)
|
||||
17: TypeFunction 2 7(ptr)
|
||||
|
|
@ -188,23 +187,23 @@ local_size = (256, 1, 1)
|
|||
24: TypePointer Function 23(int)
|
||||
27: 23(int) Constant 2
|
||||
29: 23(int) Constant 0
|
||||
34: 23(int) Constant 1
|
||||
43: TypePointer Uniform 9(struct)
|
||||
44(g_input): 43(ptr) Variable Uniform
|
||||
49: TypeImage 6(int) Buffer nonsampled format:Rg32ui
|
||||
50: TypePointer UniformConstant 49
|
||||
51(g_output): 50(ptr) Variable UniformConstant
|
||||
56: TypePointer Input 6(int)
|
||||
57(dispatchId): 56(ptr) Variable Input
|
||||
31: TypePointer Uniform 6(int)
|
||||
35: 23(int) Constant 1
|
||||
44(g_input): 10(ptr) Variable Uniform
|
||||
48: TypeImage 6(int) Buffer nonsampled format:Rg32ui
|
||||
49: TypePointer UniformConstant 48
|
||||
50(g_output): 49(ptr) Variable UniformConstant
|
||||
55: TypePointer Input 6(int)
|
||||
56(dispatchId): 55(ptr) Variable Input
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
55(dispatchId): 7(ptr) Variable Function
|
||||
59(param): 7(ptr) Variable Function
|
||||
58: 6(int) Load 57(dispatchId)
|
||||
Store 55(dispatchId) 58
|
||||
60: 6(int) Load 55(dispatchId)
|
||||
Store 59(param) 60
|
||||
61: 2 FunctionCall 19(@main(u1;) 59(param)
|
||||
54(dispatchId): 7(ptr) Variable Function
|
||||
58(param): 7(ptr) Variable Function
|
||||
57: 6(int) Load 56(dispatchId)
|
||||
Store 54(dispatchId) 57
|
||||
59: 6(int) Load 54(dispatchId)
|
||||
Store 58(param) 59
|
||||
60: 2 FunctionCall 19(@main(u1;) 58(param)
|
||||
Return
|
||||
FunctionEnd
|
||||
15(testLoad(u1;block--u1[0]1;): 11(ivec2) Function None 12
|
||||
|
|
@ -217,30 +216,29 @@ local_size = (256, 1, 1)
|
|||
28: 23(int) ShiftRightLogical 26 27
|
||||
Store 25(byteAddrTemp) 28
|
||||
30: 23(int) Load 25(byteAddrTemp)
|
||||
31: 7(ptr) AccessChain 14(buffer) 29 30
|
||||
32: 6(int) Load 31
|
||||
33: 23(int) Load 25(byteAddrTemp)
|
||||
35: 23(int) IAdd 33 34
|
||||
36: 7(ptr) AccessChain 14(buffer) 29 35
|
||||
37: 6(int) Load 36
|
||||
38: 11(ivec2) CompositeConstruct 32 37
|
||||
Store 22(result) 38
|
||||
39: 11(ivec2) Load 22(result)
|
||||
ReturnValue 39
|
||||
32: 31(ptr) AccessChain 14(buffer) 29 30
|
||||
33: 6(int) Load 32
|
||||
34: 23(int) Load 25(byteAddrTemp)
|
||||
36: 23(int) IAdd 34 35
|
||||
37: 31(ptr) AccessChain 14(buffer) 29 36
|
||||
38: 6(int) Load 37
|
||||
39: 11(ivec2) CompositeConstruct 33 38
|
||||
Store 22(result) 39
|
||||
40: 11(ivec2) Load 22(result)
|
||||
ReturnValue 40
|
||||
FunctionEnd
|
||||
19(@main(u1;): 2 Function None 17
|
||||
18(dispatchId): 7(ptr) FunctionParameter
|
||||
20: Label
|
||||
42(result): 21(ptr) Variable Function
|
||||
43(result): 21(ptr) Variable Function
|
||||
45(param): 7(ptr) Variable Function
|
||||
47(param): 10(ptr) Variable Function
|
||||
46: 6(int) Load 18(dispatchId)
|
||||
Store 45(param) 46
|
||||
48: 11(ivec2) FunctionCall 15(testLoad(u1;block--u1[0]1;) 45(param) 47(param)
|
||||
Store 42(result) 48
|
||||
52: 49 Load 51(g_output)
|
||||
53: 6(int) Load 18(dispatchId)
|
||||
54: 11(ivec2) Load 42(result)
|
||||
ImageWrite 52 53 54
|
||||
47: 11(ivec2) FunctionCall 15(testLoad(u1;block--u1[0]1;) 45(param) 44(g_input)
|
||||
Store 43(result) 47
|
||||
51: 48 Load 50(g_output)
|
||||
52: 6(int) Load 18(dispatchId)
|
||||
53: 11(ivec2) Load 43(result)
|
||||
ImageWrite 51 52 53
|
||||
Return
|
||||
FunctionEnd
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue