HLSL: Pass opaques by local copy, instead of by interface original.

Also, remove assumption that if something is opaque that it
must be in the UniformConstant storage class.

This allows function declarations to know all parameters will
be in the Function storage class.
This commit is contained in:
John Kessenich
2017-09-08 02:38:07 -06:00
committed by GregF
parent 15fa7ef5f5
commit bed4e4f7e4
12 changed files with 976 additions and 841 deletions

View File

@@ -139,12 +139,12 @@ gl_FragCoord origin is upper left
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 78
// Id's are bound by 83
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 63 66
EntryPoint Fragment 4 "main" 68 71
ExecutionMode 4 OriginUpperLeft
Source HLSL 500
Name 4 "main"
@@ -165,21 +165,24 @@ gl_FragCoord origin is upper left
Name 35 "@main(u1;"
Name 34 "pos"
Name 47 "sbuf2"
Name 48 "sbuf2@count"
Name 50 "sbuf"
Name 52 "param"
Name 49 "sbuf2@count"
Name 52 "sbuf"
Name 54 "param"
Name 55 "param"
Name 61 "pos"
Name 63 "pos"
Name 66 "@entryPointOutput"
Name 67 "param"
Name 70 "sbuf2@count"
MemberName 70(sbuf2@count) 0 "@count"
Name 72 "sbuf2@count"
Name 75 "sbuf3"
MemberName 75(sbuf3) 0 "@data"
Name 77 "sbuf3"
Name 57 "param"
Name 58 "param"
Name 59 "param"
Name 60 "param"
Name 66 "pos"
Name 68 "pos"
Name 71 "@entryPointOutput"
Name 72 "param"
Name 75 "sbuf2@count"
MemberName 75(sbuf2@count) 0 "@count"
Name 77 "sbuf2@count"
Name 80 "sbuf3"
MemberName 80(sbuf3) 0 "@data"
Name 82 "sbuf3"
Decorate 8 ArrayStride 16
MemberDecorate 9 0 NonWritable
MemberDecorate 9 0 Offset 0
@@ -190,72 +193,74 @@ gl_FragCoord origin is upper left
Decorate 18 BufferBlock
Decorate 21 BufferBlock
Decorate 47(sbuf2) DescriptorSet 0
Decorate 48(sbuf2@count) DescriptorSet 0
Decorate 50(sbuf) DescriptorSet 0
Decorate 50(sbuf) Binding 10
Decorate 63(pos) Flat
Decorate 63(pos) Location 0
Decorate 66(@entryPointOutput) Location 0
MemberDecorate 70(sbuf2@count) 0 Offset 0
Decorate 70(sbuf2@count) BufferBlock
Decorate 72(sbuf2@count) DescriptorSet 0
Decorate 74 ArrayStride 16
MemberDecorate 75(sbuf3) 0 NonWritable
MemberDecorate 75(sbuf3) 0 Offset 0
Decorate 75(sbuf3) BufferBlock
Decorate 77(sbuf3) DescriptorSet 0
Decorate 77(sbuf3) Binding 12
Decorate 49(sbuf2@count) DescriptorSet 0
Decorate 52(sbuf) DescriptorSet 0
Decorate 52(sbuf) Binding 10
Decorate 68(pos) Flat
Decorate 68(pos) Location 0
Decorate 71(@entryPointOutput) Location 0
MemberDecorate 75(sbuf2@count) 0 Offset 0
Decorate 75(sbuf2@count) BufferBlock
Decorate 77(sbuf2@count) DescriptorSet 0
Decorate 79 ArrayStride 16
MemberDecorate 80(sbuf3) 0 NonWritable
MemberDecorate 80(sbuf3) 0 Offset 0
Decorate 80(sbuf3) BufferBlock
Decorate 82(sbuf3) DescriptorSet 0
Decorate 82(sbuf3) Binding 12
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
7: TypeVector 6(int) 4
8: TypeRuntimeArray 7(ivec4)
9: TypeStruct 8
10: TypePointer Uniform 9(struct)
10: TypePointer Function 9(struct)
11: TypePointer Function 6(int)
12: TypeFunction 7(ivec4) 10(ptr) 11(ptr)
17: TypeRuntimeArray 7(ivec4)
18: TypeStruct 17
19: TypePointer Uniform 18(struct)
19: TypePointer Function 18(struct)
20: TypeInt 32 1
21: TypeStruct 20(int)
22: TypePointer Uniform 21(struct)
22: TypePointer Function 21(struct)
23: TypePointer Function 7(ivec4)
24: TypeFunction 2 19(ptr) 22(ptr) 11(ptr) 23(ptr)
31: TypeFloat 32
32: TypeVector 31(float) 4
33: TypeFunction 32(fvec4) 11(ptr)
37: 20(int) Constant 0
39: TypePointer Uniform 7(ivec4)
47(sbuf2): 19(ptr) Variable Uniform
48(sbuf2@count): 22(ptr) Variable Uniform
49: 6(int) Constant 2
50(sbuf): 10(ptr) Variable Uniform
51: 6(int) Constant 3
57: 31(float) Constant 0
58: 32(fvec4) ConstantComposite 57 57 57 57
62: TypePointer Input 6(int)
63(pos): 62(ptr) Variable Input
65: TypePointer Output 32(fvec4)
66(@entryPointOutput): 65(ptr) Variable Output
70(sbuf2@count): TypeStruct 20(int)
71: TypePointer Uniform 70(sbuf2@count)
72(sbuf2@count): 71(ptr) Variable Uniform
73: TypeVector 6(int) 3
74: TypeRuntimeArray 73(ivec3)
75(sbuf3): TypeStruct 74
76: TypePointer Uniform 75(sbuf3)
77(sbuf3): 76(ptr) Variable Uniform
46: TypePointer Uniform 18(struct)
47(sbuf2): 46(ptr) Variable Uniform
48: TypePointer Uniform 21(struct)
49(sbuf2@count): 48(ptr) Variable Uniform
50: 6(int) Constant 2
51: TypePointer Uniform 9(struct)
52(sbuf): 51(ptr) Variable Uniform
53: 6(int) Constant 3
62: 31(float) Constant 0
63: 32(fvec4) ConstantComposite 62 62 62 62
67: TypePointer Input 6(int)
68(pos): 67(ptr) Variable Input
70: TypePointer Output 32(fvec4)
71(@entryPointOutput): 70(ptr) Variable Output
75(sbuf2@count): TypeStruct 20(int)
76: TypePointer Uniform 75(sbuf2@count)
77(sbuf2@count): 76(ptr) Variable Uniform
78: TypeVector 6(int) 3
79: TypeRuntimeArray 78(ivec3)
80(sbuf3): TypeStruct 79
81: TypePointer Uniform 80(sbuf3)
82(sbuf3): 81(ptr) Variable Uniform
4(main): 2 Function None 3
5: Label
61(pos): 11(ptr) Variable Function
67(param): 11(ptr) Variable Function
64: 6(int) Load 63(pos)
Store 61(pos) 64
68: 6(int) Load 61(pos)
Store 67(param) 68
69: 32(fvec4) FunctionCall 35(@main(u1;) 67(param)
Store 66(@entryPointOutput) 69
66(pos): 11(ptr) Variable Function
72(param): 11(ptr) Variable Function
69: 6(int) Load 68(pos)
Store 66(pos) 69
73: 6(int) Load 66(pos)
Store 72(param) 73
74: 32(fvec4) FunctionCall 35(@main(u1;) 72(param)
Store 71(@entryPointOutput) 74
Return
FunctionEnd
15(get(block--vu4[0]1;u1;): 7(ivec4) Function None 12
@@ -263,9 +268,9 @@ gl_FragCoord origin is upper left
14(bufferOffset): 11(ptr) FunctionParameter
16: Label
38: 6(int) Load 14(bufferOffset)
40: 39(ptr) AccessChain 13(sb) 37 38
41: 7(ivec4) Load 40
ReturnValue 41
39: 23(ptr) AccessChain 13(sb) 37 38
40: 7(ivec4) Load 39
ReturnValue 40
FunctionEnd
29(set(block--vu4[0]1;u1;vu4;): 2 Function None 24
25(sb): 19(ptr) FunctionParameter
@@ -273,22 +278,25 @@ gl_FragCoord origin is upper left
27(bufferOffset): 11(ptr) FunctionParameter
28(data): 23(ptr) FunctionParameter
30: Label
44: 6(int) Load 27(bufferOffset)
45: 7(ivec4) Load 28(data)
46: 39(ptr) AccessChain 25(sb) 37 44
Store 46 45
43: 6(int) Load 27(bufferOffset)
44: 7(ivec4) Load 28(data)
45: 23(ptr) AccessChain 25(sb) 37 43
Store 45 44
Return
FunctionEnd
35(@main(u1;): 32(fvec4) Function None 33
34(pos): 11(ptr) FunctionParameter
36: Label
52(param): 11(ptr) Variable Function
54(param): 11(ptr) Variable Function
55(param): 23(ptr) Variable Function
Store 52(param) 51
53: 7(ivec4) FunctionCall 15(get(block--vu4[0]1;u1;) 50(sbuf) 52(param)
Store 54(param) 49
54(param): 10(ptr) Variable Function
55(param): 11(ptr) Variable Function
57(param): 19(ptr) Variable Function
58(param): 22(ptr) Variable Function
59(param): 11(ptr) Variable Function
60(param): 23(ptr) Variable Function
Store 55(param) 53
56: 2 FunctionCall 29(set(block--vu4[0]1;u1;vu4;) 47(sbuf2) 48(sbuf2@count) 54(param) 55(param)
ReturnValue 58
56: 7(ivec4) FunctionCall 15(get(block--vu4[0]1;u1;) 54(param) 55(param)
Store 59(param) 50
Store 60(param) 56
61: 2 FunctionCall 29(set(block--vu4[0]1;u1;vu4;) 57(param) 58(param) 59(param) 60(param)
ReturnValue 63
FunctionEnd