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

@ -346,13 +346,13 @@ gl_FragCoord origin is upper left
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 137
// Id's are bound by 143
Capability Shader
Capability Sampled1D
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 128
EntryPoint Fragment 4 "main" 134
ExecutionMode 4 OriginUpperLeft
Source HLSL 500
Name 4 "main"
@ -367,60 +367,62 @@ gl_FragCoord origin is upper left
Name 34 "not_flattened_a"
Name 42 "g_tex[1]"
Name 45 "g_samp[1]"
Name 61 "local_sampler_array"
Name 63 "g_samp[0]"
Name 68 "g_samp[2]"
Name 71 "local_texture_array"
Name 72 "g_tex[0]"
Name 77 "g_tex[2]"
Name 83 "local_float_array"
Name 89 "$Global"
MemberName 89($Global) 0 "g_mats"
MemberName 89($Global) 1 "g_mats_explicit"
MemberName 89($Global) 2 "g_floats"
Name 91 ""
Name 105 "aggShadow"
Name 112 "aggShadow"
Name 123 "ps_output"
Name 124 "param"
Name 128 "ps_output.color"
Name 131 "g_tex_explicit[0]"
Name 132 "g_tex_explicit[1]"
Name 133 "g_tex_explicit[2]"
Name 134 "g_samp_explicit[0]"
Name 135 "g_samp_explicit[1]"
Name 136 "g_samp_explicit[2]"
Name 63 "local_sampler_array"
Name 65 "g_samp[0]"
Name 70 "g_samp[2]"
Name 73 "local_texture_array"
Name 74 "g_tex[0]"
Name 79 "g_tex[2]"
Name 85 "local_float_array"
Name 91 "$Global"
MemberName 91($Global) 0 "g_mats"
MemberName 91($Global) 1 "g_mats_explicit"
MemberName 91($Global) 2 "g_floats"
Name 93 ""
Name 107 "aggShadow"
Name 114 "aggShadow"
Name 121 "param"
Name 123 "param"
Name 129 "ps_output"
Name 130 "param"
Name 134 "ps_output.color"
Name 137 "g_tex_explicit[0]"
Name 138 "g_tex_explicit[1]"
Name 139 "g_tex_explicit[2]"
Name 140 "g_samp_explicit[0]"
Name 141 "g_samp_explicit[1]"
Name 142 "g_samp_explicit[2]"
Decorate 42(g_tex[1]) DescriptorSet 0
Decorate 45(g_samp[1]) DescriptorSet 0
Decorate 63(g_samp[0]) DescriptorSet 0
Decorate 68(g_samp[2]) DescriptorSet 0
Decorate 72(g_tex[0]) DescriptorSet 0
Decorate 77(g_tex[2]) DescriptorSet 0
Decorate 86 ArrayStride 48
Decorate 87 ArrayStride 48
Decorate 88 ArrayStride 16
MemberDecorate 89($Global) 0 RowMajor
MemberDecorate 89($Global) 0 Offset 0
MemberDecorate 89($Global) 0 MatrixStride 16
MemberDecorate 89($Global) 1 RowMajor
MemberDecorate 89($Global) 1 Offset 192
MemberDecorate 89($Global) 1 MatrixStride 16
MemberDecorate 89($Global) 2 Offset 384
Decorate 89($Global) Block
Decorate 91 DescriptorSet 0
Decorate 128(ps_output.color) Location 0
Decorate 131(g_tex_explicit[0]) DescriptorSet 0
Decorate 131(g_tex_explicit[0]) Binding 1
Decorate 132(g_tex_explicit[1]) DescriptorSet 0
Decorate 132(g_tex_explicit[1]) Binding 2
Decorate 133(g_tex_explicit[2]) DescriptorSet 0
Decorate 133(g_tex_explicit[2]) Binding 3
Decorate 134(g_samp_explicit[0]) DescriptorSet 0
Decorate 134(g_samp_explicit[0]) Binding 5
Decorate 135(g_samp_explicit[1]) DescriptorSet 0
Decorate 135(g_samp_explicit[1]) Binding 6
Decorate 136(g_samp_explicit[2]) DescriptorSet 0
Decorate 136(g_samp_explicit[2]) Binding 7
Decorate 65(g_samp[0]) DescriptorSet 0
Decorate 70(g_samp[2]) DescriptorSet 0
Decorate 74(g_tex[0]) DescriptorSet 0
Decorate 79(g_tex[2]) DescriptorSet 0
Decorate 88 ArrayStride 48
Decorate 89 ArrayStride 48
Decorate 90 ArrayStride 16
MemberDecorate 91($Global) 0 RowMajor
MemberDecorate 91($Global) 0 Offset 0
MemberDecorate 91($Global) 0 MatrixStride 16
MemberDecorate 91($Global) 1 RowMajor
MemberDecorate 91($Global) 1 Offset 192
MemberDecorate 91($Global) 1 MatrixStride 16
MemberDecorate 91($Global) 2 Offset 384
Decorate 91($Global) Block
Decorate 93 DescriptorSet 0
Decorate 134(ps_output.color) Location 0
Decorate 137(g_tex_explicit[0]) DescriptorSet 0
Decorate 137(g_tex_explicit[0]) Binding 1
Decorate 138(g_tex_explicit[1]) DescriptorSet 0
Decorate 138(g_tex_explicit[1]) Binding 2
Decorate 139(g_tex_explicit[2]) DescriptorSet 0
Decorate 139(g_tex_explicit[2]) Binding 3
Decorate 140(g_samp_explicit[0]) DescriptorSet 0
Decorate 140(g_samp_explicit[0]) Binding 5
Decorate 141(g_samp_explicit[1]) DescriptorSet 0
Decorate 141(g_samp_explicit[1]) Binding 6
Decorate 142(g_samp_explicit[2]) DescriptorSet 0
Decorate 142(g_samp_explicit[2]) Binding 7
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@ -430,10 +432,10 @@ gl_FragCoord origin is upper left
12: TypeInt 32 0
13: 12(int) Constant 3
14: TypeArray 11 13
15: TypePointer UniformConstant 14
15: TypePointer Function 14
16: TypeSampler
17: TypeArray 16 13
18: TypePointer UniformConstant 17
18: TypePointer Function 17
19: TypeFunction 7(fvec4) 15(ptr) 18(ptr)
24(PS_OUTPUT): TypeStruct 7(fvec4)
25: TypePointer Function 24(PS_OUTPUT)
@ -455,48 +457,46 @@ gl_FragCoord origin is upper left
45(g_samp[1]): 44(ptr) Variable UniformConstant
47: TypeSampledImage 11
49: 6(float) Constant 1045220557
61(local_sampler_array): 18(ptr) Variable UniformConstant
62: 30(int) Constant 0
63(g_samp[0]): 44(ptr) Variable UniformConstant
68(g_samp[2]): 44(ptr) Variable UniformConstant
71(local_texture_array): 15(ptr) Variable UniformConstant
72(g_tex[0]): 41(ptr) Variable UniformConstant
77(g_tex[2]): 41(ptr) Variable UniformConstant
80: 12(int) Constant 4
81: TypeArray 6(float) 80
82: TypePointer Function 81
84: TypeVector 6(float) 3
85: TypeMatrix 84(fvec3) 3
86: TypeArray 85 80
87: TypeArray 85 80
88: TypeArray 6(float) 80
89($Global): TypeStruct 86 87 88
90: TypePointer Uniform 89($Global)
91: 90(ptr) Variable Uniform
92: TypePointer Uniform 88
96: TypePointer Function 6(float)
105(aggShadow): 15(ptr) Variable UniformConstant
112(aggShadow): 18(ptr) Variable UniformConstant
121: TypePointer Function 7(fvec4)
127: TypePointer Output 7(fvec4)
128(ps_output.color): 127(ptr) Variable Output
131(g_tex_explicit[0]): 41(ptr) Variable UniformConstant
132(g_tex_explicit[1]): 41(ptr) Variable UniformConstant
133(g_tex_explicit[2]): 41(ptr) Variable UniformConstant
134(g_samp_explicit[0]): 44(ptr) Variable UniformConstant
135(g_samp_explicit[1]): 44(ptr) Variable UniformConstant
136(g_samp_explicit[2]): 44(ptr) Variable UniformConstant
53: TypePointer Function 11
56: TypePointer Function 16
64: 30(int) Constant 0
65(g_samp[0]): 44(ptr) Variable UniformConstant
70(g_samp[2]): 44(ptr) Variable UniformConstant
74(g_tex[0]): 41(ptr) Variable UniformConstant
79(g_tex[2]): 41(ptr) Variable UniformConstant
82: 12(int) Constant 4
83: TypeArray 6(float) 82
84: TypePointer Function 83
86: TypeVector 6(float) 3
87: TypeMatrix 86(fvec3) 3
88: TypeArray 87 82
89: TypeArray 87 82
90: TypeArray 6(float) 82
91($Global): TypeStruct 88 89 90
92: TypePointer Uniform 91($Global)
93: 92(ptr) Variable Uniform
94: TypePointer Uniform 90
98: TypePointer Function 6(float)
127: TypePointer Function 7(fvec4)
133: TypePointer Output 7(fvec4)
134(ps_output.color): 133(ptr) Variable Output
137(g_tex_explicit[0]): 41(ptr) Variable UniformConstant
138(g_tex_explicit[1]): 41(ptr) Variable UniformConstant
139(g_tex_explicit[2]): 41(ptr) Variable UniformConstant
140(g_samp_explicit[0]): 44(ptr) Variable UniformConstant
141(g_samp_explicit[1]): 44(ptr) Variable UniformConstant
142(g_samp_explicit[2]): 44(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
123(ps_output): 25(ptr) Variable Function
124(param): 25(ptr) Variable Function
129(ps_output): 25(ptr) Variable Function
130(param): 25(ptr) Variable Function
Store 34(not_flattened_a) 40
125: 2 FunctionCall 28(@main(struct-PS_OUTPUT-vf41;) 124(param)
126:24(PS_OUTPUT) Load 124(param)
Store 123(ps_output) 126
129: 121(ptr) AccessChain 123(ps_output) 62
130: 7(fvec4) Load 129
Store 128(ps_output.color) 130
131: 2 FunctionCall 28(@main(struct-PS_OUTPUT-vf41;) 130(param)
132:24(PS_OUTPUT) Load 130(param)
Store 129(ps_output) 132
135: 127(ptr) AccessChain 129(ps_output) 64
136: 7(fvec4) Load 135
Store 134(ps_output.color) 136
Return
FunctionEnd
9(TestFn1(): 7(fvec4) Function None 8
@ -511,72 +511,82 @@ gl_FragCoord origin is upper left
20(l_tex): 15(ptr) FunctionParameter
21(l_samp): 18(ptr) FunctionParameter
23: Label
53: 41(ptr) AccessChain 20(l_tex) 36
54: 11 Load 53
55: 44(ptr) AccessChain 21(l_samp) 36
56: 16 Load 55
57: 47 SampledImage 54 56
58: 7(fvec4) ImageSampleImplicitLod 57 49
ReturnValue 58
54: 53(ptr) AccessChain 20(l_tex) 36
55: 11 Load 54
57: 56(ptr) AccessChain 21(l_samp) 36
58: 16 Load 57
59: 47 SampledImage 55 58
60: 7(fvec4) ImageSampleImplicitLod 59 49
ReturnValue 60
FunctionEnd
28(@main(struct-PS_OUTPUT-vf41;): 2 Function None 26
27(ps_output): 25(ptr) FunctionParameter
29: Label
83(local_float_array): 82(ptr) Variable Function
64: 16 Load 63(g_samp[0])
65: 44(ptr) AccessChain 61(local_sampler_array) 62
Store 65 64
66: 16 Load 45(g_samp[1])
67: 44(ptr) AccessChain 61(local_sampler_array) 35
63(local_sampler_array): 18(ptr) Variable Function
73(local_texture_array): 15(ptr) Variable Function
85(local_float_array): 84(ptr) Variable Function
107(aggShadow): 15(ptr) Variable Function
114(aggShadow): 18(ptr) Variable Function
121(param): 15(ptr) Variable Function
123(param): 18(ptr) Variable Function
66: 16 Load 65(g_samp[0])
67: 56(ptr) AccessChain 63(local_sampler_array) 64
Store 67 66
69: 16 Load 68(g_samp[2])
70: 44(ptr) AccessChain 61(local_sampler_array) 36
Store 70 69
73: 11 Load 72(g_tex[0])
74: 41(ptr) AccessChain 71(local_texture_array) 62
Store 74 73
75: 11 Load 42(g_tex[1])
76: 41(ptr) AccessChain 71(local_texture_array) 35
68: 16 Load 45(g_samp[1])
69: 56(ptr) AccessChain 63(local_sampler_array) 35
Store 69 68
71: 16 Load 70(g_samp[2])
72: 56(ptr) AccessChain 63(local_sampler_array) 36
Store 72 71
75: 11 Load 74(g_tex[0])
76: 53(ptr) AccessChain 73(local_texture_array) 64
Store 76 75
78: 11 Load 77(g_tex[2])
79: 41(ptr) AccessChain 71(local_texture_array) 36
Store 79 78
93: 92(ptr) AccessChain 91 36
94: 88 Load 93
95: 6(float) CompositeExtract 94 0
97: 96(ptr) AccessChain 83(local_float_array) 62
Store 97 95
98: 6(float) CompositeExtract 94 1
99: 96(ptr) AccessChain 83(local_float_array) 35
Store 99 98
100: 6(float) CompositeExtract 94 2
101: 96(ptr) AccessChain 83(local_float_array) 36
77: 11 Load 42(g_tex[1])
78: 53(ptr) AccessChain 73(local_texture_array) 35
Store 78 77
80: 11 Load 79(g_tex[2])
81: 53(ptr) AccessChain 73(local_texture_array) 36
Store 81 80
95: 94(ptr) AccessChain 93 36
96: 90 Load 95
97: 6(float) CompositeExtract 96 0
99: 98(ptr) AccessChain 85(local_float_array) 64
Store 99 97
100: 6(float) CompositeExtract 96 1
101: 98(ptr) AccessChain 85(local_float_array) 35
Store 101 100
102: 6(float) CompositeExtract 94 3
103: 96(ptr) AccessChain 83(local_float_array) 37
102: 6(float) CompositeExtract 96 2
103: 98(ptr) AccessChain 85(local_float_array) 36
Store 103 102
104: 7(fvec4) FunctionCall 9(TestFn1()
106: 11 Load 72(g_tex[0])
107: 41(ptr) AccessChain 105(aggShadow) 62
Store 107 106
108: 11 Load 42(g_tex[1])
109: 41(ptr) AccessChain 105(aggShadow) 35
104: 6(float) CompositeExtract 96 3
105: 98(ptr) AccessChain 85(local_float_array) 37
Store 105 104
106: 7(fvec4) FunctionCall 9(TestFn1()
108: 11 Load 74(g_tex[0])
109: 53(ptr) AccessChain 107(aggShadow) 64
Store 109 108
110: 11 Load 77(g_tex[2])
111: 41(ptr) AccessChain 105(aggShadow) 36
110: 11 Load 42(g_tex[1])
111: 53(ptr) AccessChain 107(aggShadow) 35
Store 111 110
113: 16 Load 63(g_samp[0])
114: 44(ptr) AccessChain 112(aggShadow) 62
Store 114 113
115: 16 Load 45(g_samp[1])
116: 44(ptr) AccessChain 112(aggShadow) 35
112: 11 Load 79(g_tex[2])
113: 53(ptr) AccessChain 107(aggShadow) 36
Store 113 112
115: 16 Load 65(g_samp[0])
116: 56(ptr) AccessChain 114(aggShadow) 64
Store 116 115
117: 16 Load 68(g_samp[2])
118: 44(ptr) AccessChain 112(aggShadow) 36
117: 16 Load 45(g_samp[1])
118: 56(ptr) AccessChain 114(aggShadow) 35
Store 118 117
119: 7(fvec4) FunctionCall 22(TestFn2(t11[3];p1[3];) 105(aggShadow) 112(aggShadow)
120: 7(fvec4) FAdd 104 119
122: 121(ptr) AccessChain 27(ps_output) 62
Store 122 120
119: 16 Load 70(g_samp[2])
120: 56(ptr) AccessChain 114(aggShadow) 36
Store 120 119
122: 14 Load 107(aggShadow)
Store 121(param) 122
124: 17 Load 114(aggShadow)
Store 123(param) 124
125: 7(fvec4) FunctionCall 22(TestFn2(t11[3];p1[3];) 121(param) 123(param)
126: 7(fvec4) FAdd 106 125
128: 127(ptr) AccessChain 27(ps_output) 64
Store 128 126
Return
FunctionEnd