HLSL: support binary literals

Fixes #3089
This commit is contained in:
Dawid-Lorenz-Mobica 2023-07-18 17:35:36 +02:00 committed by GitHub
parent 9e41635d74
commit d5f3ad6c9a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 745 additions and 252 deletions

View File

@ -216,33 +216,98 @@ gl_FragCoord origin is upper left
0:39 Convert int to float ( temp float) 0:39 Convert int to float ( temp float)
0:39 'd' ( temp int) 0:39 'd' ( temp int)
0:39 'input' ( in 4-component vector of float) 0:39 'input' ( in 4-component vector of float)
0:41 Branch: Return with expression 0:40 Sequence
0:40 add ( temp 4-component vector of float) 0:40 move second child to first child ( temp uint)
0:40 add ( temp 4-component vector of float) 0:40 'g' ( temp uint)
0:40 add ( temp 4-component vector of float) 0:40 Test condition and select ( temp uint): no shortcircuit
0:40 add ( temp 4-component vector of float) 0:40 Condition
0:40 vector-scale ( temp 4-component vector of float) 0:40 Compare Greater Than ( temp bool)
0:40 Convert int to float ( temp float) 0:40 Convert int to float ( temp float)
0:40 'e' ( temp int) 0:40 'd' ( temp int)
0:40 'ret' ( temp 4-component vector of float) 0:40 Constant:
0:40 'f' ( temp 4-component vector of float) 0:40 0.000000
0:40 Function Call: vectorCond( ( temp 4-component vector of float) 0:40 true case
0:40 Function Call: scalarCond( ( temp 4-component vector of float) 0:40 Constant:
0:41 Construct vec4 ( temp 4-component vector of float) 0:40 21 (const uint)
0:41 Function Call: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float) 0:40 false case
0:40 Constant:
0:40 0 (const uint)
0:41 Sequence
0:41 move second child to first child ( temp uint)
0:41 'h' ( temp uint)
0:41 Test condition and select ( temp uint): no shortcircuit
0:41 Condition
0:41 Compare Greater Than ( temp bool)
0:41 Convert uint to float ( temp float)
0:41 'g' ( temp uint)
0:41 Constant: 0:41 Constant:
0:41 true (const bool) 0:41 0.000000
0:41 false (const bool) 0:41 true case
0:41 Constant: 0:41 Constant:
0:41 1.000000 0:41 63 (const uint)
0:41 2.000000 0:41 false case
0:41 Constant: 0:41 Constant:
0:41 3.000000 0:41 0 (const uint)
0:41 4.000000 0:42 Sequence
0:41 Constant: 0:42 move second child to first child ( temp uint)
0:41 10.000000 0:42 'i' ( temp uint)
0:41 Constant: 0:42 Test condition and select ( temp uint): no shortcircuit
0:41 10.000000 0:42 Condition
0:42 Compare Greater Than ( temp bool)
0:42 Convert uint to float ( temp float)
0:42 'h' ( temp uint)
0:42 Constant:
0:42 0.000000
0:42 true case
0:42 Constant:
0:42 5 (const uint)
0:42 false case
0:42 Constant:
0:42 1 (const uint)
0:43 Sequence
0:43 move second child to first child ( temp uint)
0:43 'j' ( temp uint)
0:43 Convert int to uint ( temp uint)
0:43 Test condition and select ( temp int): no shortcircuit
0:43 Condition
0:43 Compare Greater Than ( temp bool)
0:43 Convert uint to float ( temp float)
0:43 'i' ( temp uint)
0:43 Constant:
0:43 0.000000
0:43 true case
0:43 Constant:
0:43 43981 (const int)
0:43 false case
0:43 Constant:
0:43 48346 (const int)
0:45 Branch: Return with expression
0:44 add ( temp 4-component vector of float)
0:44 add ( temp 4-component vector of float)
0:44 add ( temp 4-component vector of float)
0:44 add ( temp 4-component vector of float)
0:44 vector-scale ( temp 4-component vector of float)
0:44 Convert int to float ( temp float)
0:44 'e' ( temp int)
0:44 'ret' ( temp 4-component vector of float)
0:44 'f' ( temp 4-component vector of float)
0:44 Function Call: vectorCond( ( temp 4-component vector of float)
0:44 Function Call: scalarCond( ( temp 4-component vector of float)
0:45 Construct vec4 ( temp 4-component vector of float)
0:45 Function Call: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float)
0:45 Constant:
0:45 true (const bool)
0:45 false (const bool)
0:45 Constant:
0:45 1.000000
0:45 2.000000
0:45 Constant:
0:45 3.000000
0:45 4.000000
0:45 Constant:
0:45 10.000000
0:45 Constant:
0:45 10.000000
0:27 Function Definition: PixelShaderFunction( ( temp void) 0:27 Function Definition: PixelShaderFunction( ( temp void)
0:27 Function Parameters: 0:27 Function Parameters:
0:? Sequence 0:? Sequence
@ -479,33 +544,98 @@ gl_FragCoord origin is upper left
0:39 Convert int to float ( temp float) 0:39 Convert int to float ( temp float)
0:39 'd' ( temp int) 0:39 'd' ( temp int)
0:39 'input' ( in 4-component vector of float) 0:39 'input' ( in 4-component vector of float)
0:41 Branch: Return with expression 0:40 Sequence
0:40 add ( temp 4-component vector of float) 0:40 move second child to first child ( temp uint)
0:40 add ( temp 4-component vector of float) 0:40 'g' ( temp uint)
0:40 add ( temp 4-component vector of float) 0:40 Test condition and select ( temp uint): no shortcircuit
0:40 add ( temp 4-component vector of float) 0:40 Condition
0:40 vector-scale ( temp 4-component vector of float) 0:40 Compare Greater Than ( temp bool)
0:40 Convert int to float ( temp float) 0:40 Convert int to float ( temp float)
0:40 'e' ( temp int) 0:40 'd' ( temp int)
0:40 'ret' ( temp 4-component vector of float) 0:40 Constant:
0:40 'f' ( temp 4-component vector of float) 0:40 0.000000
0:40 Function Call: vectorCond( ( temp 4-component vector of float) 0:40 true case
0:40 Function Call: scalarCond( ( temp 4-component vector of float) 0:40 Constant:
0:41 Construct vec4 ( temp 4-component vector of float) 0:40 21 (const uint)
0:41 Function Call: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float) 0:40 false case
0:40 Constant:
0:40 0 (const uint)
0:41 Sequence
0:41 move second child to first child ( temp uint)
0:41 'h' ( temp uint)
0:41 Test condition and select ( temp uint): no shortcircuit
0:41 Condition
0:41 Compare Greater Than ( temp bool)
0:41 Convert uint to float ( temp float)
0:41 'g' ( temp uint)
0:41 Constant: 0:41 Constant:
0:41 true (const bool) 0:41 0.000000
0:41 false (const bool) 0:41 true case
0:41 Constant: 0:41 Constant:
0:41 1.000000 0:41 63 (const uint)
0:41 2.000000 0:41 false case
0:41 Constant: 0:41 Constant:
0:41 3.000000 0:41 0 (const uint)
0:41 4.000000 0:42 Sequence
0:41 Constant: 0:42 move second child to first child ( temp uint)
0:41 10.000000 0:42 'i' ( temp uint)
0:41 Constant: 0:42 Test condition and select ( temp uint): no shortcircuit
0:41 10.000000 0:42 Condition
0:42 Compare Greater Than ( temp bool)
0:42 Convert uint to float ( temp float)
0:42 'h' ( temp uint)
0:42 Constant:
0:42 0.000000
0:42 true case
0:42 Constant:
0:42 5 (const uint)
0:42 false case
0:42 Constant:
0:42 1 (const uint)
0:43 Sequence
0:43 move second child to first child ( temp uint)
0:43 'j' ( temp uint)
0:43 Convert int to uint ( temp uint)
0:43 Test condition and select ( temp int): no shortcircuit
0:43 Condition
0:43 Compare Greater Than ( temp bool)
0:43 Convert uint to float ( temp float)
0:43 'i' ( temp uint)
0:43 Constant:
0:43 0.000000
0:43 true case
0:43 Constant:
0:43 43981 (const int)
0:43 false case
0:43 Constant:
0:43 48346 (const int)
0:45 Branch: Return with expression
0:44 add ( temp 4-component vector of float)
0:44 add ( temp 4-component vector of float)
0:44 add ( temp 4-component vector of float)
0:44 add ( temp 4-component vector of float)
0:44 vector-scale ( temp 4-component vector of float)
0:44 Convert int to float ( temp float)
0:44 'e' ( temp int)
0:44 'ret' ( temp 4-component vector of float)
0:44 'f' ( temp 4-component vector of float)
0:44 Function Call: vectorCond( ( temp 4-component vector of float)
0:44 Function Call: scalarCond( ( temp 4-component vector of float)
0:45 Construct vec4 ( temp 4-component vector of float)
0:45 Function Call: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float)
0:45 Constant:
0:45 true (const bool)
0:45 false (const bool)
0:45 Constant:
0:45 1.000000
0:45 2.000000
0:45 Constant:
0:45 3.000000
0:45 4.000000
0:45 Constant:
0:45 10.000000
0:45 Constant:
0:45 10.000000
0:27 Function Definition: PixelShaderFunction( ( temp void) 0:27 Function Definition: PixelShaderFunction( ( temp void)
0:27 Function Parameters: 0:27 Function Parameters:
0:? Sequence 0:? Sequence
@ -523,12 +653,12 @@ gl_FragCoord origin is upper left
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 8000b // Generated by (magic number): 8000b
// Id's are bound by 206 // Id's are bound by 233
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 199 202 EntryPoint Fragment 4 "PixelShaderFunction" 226 229
ExecutionMode 4 OriginUpperLeft ExecutionMode 4 OriginUpperLeft
Source HLSL 500 Source HLSL 500
Name 4 "PixelShaderFunction" Name 4 "PixelShaderFunction"
@ -555,13 +685,17 @@ gl_FragCoord origin is upper left
Name 117 "ret" Name 117 "ret"
Name 137 "e" Name 137 "e"
Name 150 "f" Name 150 "f"
Name 186 "param" Name 169 "g"
Name 187 "param" Name 175 "h"
Name 188 "param" Name 181 "i"
Name 197 "input" Name 187 "j"
Name 199 "input" Name 213 "param"
Name 202 "@entryPointOutput" Name 214 "param"
Name 203 "param" Name 215 "param"
Name 224 "input"
Name 226 "input"
Name 229 "@entryPointOutput"
Name 230 "param"
MemberDecorate 29($Global) 0 Offset 0 MemberDecorate 29($Global) 0 Offset 0
MemberDecorate 29($Global) 1 Offset 16 MemberDecorate 29($Global) 1 Offset 16
MemberDecorate 29($Global) 2 Offset 32 MemberDecorate 29($Global) 2 Offset 32
@ -570,8 +704,8 @@ gl_FragCoord origin is upper left
Decorate 29($Global) Block Decorate 29($Global) Block
Decorate 31 DescriptorSet 0 Decorate 31 DescriptorSet 0
Decorate 31 Binding 0 Decorate 31 Binding 0
Decorate 199(input) Location 0 Decorate 226(input) Location 0
Decorate 202(@entryPointOutput) Location 0 Decorate 229(@entryPointOutput) Location 0
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
@ -611,29 +745,35 @@ gl_FragCoord origin is upper left
148: 32(int) Constant 11 148: 32(int) Constant 11
151: TypePointer Function 6(float) 151: TypePointer Function 6(float)
154: 139(int) Constant 1 154: 139(int) Constant 1
178: 13(bool) ConstantTrue 168: TypePointer Function 139(int)
179: 13(bool) ConstantFalse 173: 139(int) Constant 21
180: 14(bvec2) ConstantComposite 178 179 179: 139(int) Constant 63
181: 6(float) Constant 1073741824 185: 139(int) Constant 5
182: 16(fvec2) ConstantComposite 96 181 191: 32(int) Constant 43981
183: 6(float) Constant 1077936128 192: 32(int) Constant 48346
184: 6(float) Constant 1082130432 205: 13(bool) ConstantTrue
185: 16(fvec2) ConstantComposite 183 184 206: 13(bool) ConstantFalse
190: 6(float) Constant 1092616192 207: 14(bvec2) ConstantComposite 205 206
198: TypePointer Input 7(fvec4) 208: 6(float) Constant 1073741824
199(input): 198(ptr) Variable Input 209: 16(fvec2) ConstantComposite 96 208
201: TypePointer Output 7(fvec4) 210: 6(float) Constant 1077936128
202(@entryPointOutput): 201(ptr) Variable Output 211: 6(float) Constant 1082130432
212: 16(fvec2) ConstantComposite 210 211
217: 6(float) Constant 1092616192
225: TypePointer Input 7(fvec4)
226(input): 225(ptr) Variable Input
228: TypePointer Output 7(fvec4)
229(@entryPointOutput): 228(ptr) Variable Output
4(PixelShaderFunction): 2 Function None 3 4(PixelShaderFunction): 2 Function None 3
5: Label 5: Label
197(input): 24(ptr) Variable Function 224(input): 24(ptr) Variable Function
203(param): 24(ptr) Variable Function 230(param): 24(ptr) Variable Function
200: 7(fvec4) Load 199(input) 227: 7(fvec4) Load 226(input)
Store 197(input) 200 Store 224(input) 227
204: 7(fvec4) Load 197(input) 231: 7(fvec4) Load 224(input)
Store 203(param) 204 Store 230(param) 231
205: 7(fvec4) FunctionCall 27(@PixelShaderFunction(vf4;) 203(param) 232: 7(fvec4) FunctionCall 27(@PixelShaderFunction(vf4;) 230(param)
Store 202(@entryPointOutput) 205 Store 229(@entryPointOutput) 232
Return Return
FunctionEnd FunctionEnd
9(vectorCond(): 7(fvec4) Function None 8 9(vectorCond(): 7(fvec4) Function None 8
@ -720,9 +860,13 @@ gl_FragCoord origin is upper left
117(ret): 24(ptr) Variable Function 117(ret): 24(ptr) Variable Function
137(e): 109(ptr) Variable Function 137(e): 109(ptr) Variable Function
150(f): 24(ptr) Variable Function 150(f): 24(ptr) Variable Function
186(param): 15(ptr) Variable Function 169(g): 168(ptr) Variable Function
187(param): 17(ptr) Variable Function 175(h): 168(ptr) Variable Function
188(param): 17(ptr) Variable Function 181(i): 168(ptr) Variable Function
187(j): 168(ptr) Variable Function
213(param): 15(ptr) Variable Function
214(param): 17(ptr) Variable Function
215(param): 17(ptr) Variable Function
Store 110(a) 111 Store 110(a) 111
Store 112(b) 113 Store 112(b) 113
Store 114(c) 115 Store 114(c) 115
@ -776,23 +920,44 @@ gl_FragCoord origin is upper left
166: 43(bvec4) CompositeConstruct 157 157 157 157 166: 43(bvec4) CompositeConstruct 157 157 157 157
167: 7(fvec4) Select 166 161 165 167: 7(fvec4) Select 166 161 165
Store 150(f) 167 Store 150(f) 167
168: 32(int) Load 137(e) 170: 32(int) Load 116(d)
169: 6(float) ConvertSToF 168 171: 6(float) ConvertSToF 170
170: 7(fvec4) Load 117(ret) 172: 13(bool) FOrdGreaterThan 171 44
171: 7(fvec4) VectorTimesScalar 170 169 174: 139(int) Select 172 173 140
172: 7(fvec4) Load 150(f) Store 169(g) 174
173: 7(fvec4) FAdd 171 172 176: 139(int) Load 169(g)
174: 7(fvec4) FunctionCall 9(vectorCond() 177: 6(float) ConvertUToF 176
175: 7(fvec4) FAdd 173 174 178: 13(bool) FOrdGreaterThan 177 44
176: 7(fvec4) FunctionCall 11(scalarCond() 180: 139(int) Select 178 179 140
177: 7(fvec4) FAdd 175 176 Store 175(h) 180
Store 186(param) 180 182: 139(int) Load 175(h)
Store 187(param) 182 183: 6(float) ConvertUToF 182
Store 188(param) 185 184: 13(bool) FOrdGreaterThan 183 44
189: 16(fvec2) FunctionCall 22(fbSelect(vb2;vf2;vf2;) 186(param) 187(param) 188(param) 186: 139(int) Select 184 185 154
191: 6(float) CompositeExtract 189 0 Store 181(i) 186
192: 6(float) CompositeExtract 189 1 188: 139(int) Load 181(i)
193: 7(fvec4) CompositeConstruct 191 192 190 190 189: 6(float) ConvertUToF 188
194: 7(fvec4) FAdd 177 193 190: 13(bool) FOrdGreaterThan 189 44
ReturnValue 194 193: 32(int) Select 190 191 192
194: 139(int) Bitcast 193
Store 187(j) 194
195: 32(int) Load 137(e)
196: 6(float) ConvertSToF 195
197: 7(fvec4) Load 117(ret)
198: 7(fvec4) VectorTimesScalar 197 196
199: 7(fvec4) Load 150(f)
200: 7(fvec4) FAdd 198 199
201: 7(fvec4) FunctionCall 9(vectorCond()
202: 7(fvec4) FAdd 200 201
203: 7(fvec4) FunctionCall 11(scalarCond()
204: 7(fvec4) FAdd 202 203
Store 213(param) 207
Store 214(param) 209
Store 215(param) 212
216: 16(fvec2) FunctionCall 22(fbSelect(vb2;vf2;vf2;) 213(param) 214(param) 215(param)
218: 6(float) CompositeExtract 216 0
219: 6(float) CompositeExtract 216 1
220: 7(fvec4) CompositeConstruct 218 219 217 217
221: 7(fvec4) FAdd 204 220
ReturnValue 221
FunctionEnd FunctionEnd

View File

@ -2,94 +2,124 @@ hlsl.numericsuffixes.frag
Shader version: 500 Shader version: 500
gl_FragCoord origin is upper left gl_FragCoord origin is upper left
0:? Sequence 0:? Sequence
0:5 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) 0:8 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
0:5 Function Parameters: 0:8 Function Parameters:
0:? Sequence 0:? Sequence
0:7 Sequence
0:7 move second child to first child ( temp float)
0:7 'r00' ( temp float)
0:7 Constant:
0:7 1.000000
0:8 Sequence
0:8 move second child to first child ( temp uint)
0:8 'r01' ( temp uint)
0:8 Constant:
0:8 1 (const uint)
0:9 Sequence
0:9 move second child to first child ( temp uint)
0:9 'r02' ( temp uint)
0:9 Constant:
0:9 2 (const uint)
0:10 Sequence 0:10 Sequence
0:10 move second child to first child ( temp uint) 0:10 move second child to first child ( temp float)
0:10 'r03' ( temp uint) 0:10 'r00' ( temp float)
0:10 Constant: 0:10 Constant:
0:10 2748 (const uint) 0:10 1.000000
0:11 Sequence 0:11 Sequence
0:11 move second child to first child ( temp uint) 0:11 move second child to first child ( temp uint)
0:11 'r04' ( temp uint) 0:11 'r01' ( temp uint)
0:11 Constant: 0:11 Constant:
0:11 2748 (const uint) 0:11 1 (const uint)
0:12 Sequence 0:12 Sequence
0:12 move second child to first child ( temp int) 0:12 move second child to first child ( temp uint)
0:12 'r05' ( temp int) 0:12 'r02' ( temp uint)
0:12 Constant: 0:12 Constant:
0:12 5 (const int) 0:12 2 (const uint)
0:13 Sequence 0:13 Sequence
0:13 move second child to first child ( temp int) 0:13 move second child to first child ( temp uint)
0:13 'r06' ( temp int) 0:13 'r03' ( temp uint)
0:13 Constant: 0:13 Constant:
0:13 6 (const int) 0:13 2748 (const uint)
0:14 Sequence 0:14 Sequence
0:14 move second child to first child ( temp int) 0:14 move second child to first child ( temp uint)
0:14 'r07' ( temp int) 0:14 'r04' ( temp uint)
0:14 Constant: 0:14 Constant:
0:14 57 (const int) 0:14 2748 (const uint)
0:15 Sequence 0:15 Sequence
0:15 move second child to first child ( temp uint) 0:15 move second child to first child ( temp int)
0:15 'r08' ( temp uint) 0:15 'r05' ( temp int)
0:15 Constant: 0:15 Constant:
0:15 58 (const uint) 0:15 5 (const int)
0:16 Sequence 0:16 Sequence
0:16 move second child to first child ( temp float) 0:16 move second child to first child ( temp int)
0:16 'r09' ( temp float) 0:16 'r06' ( temp int)
0:16 Constant: 0:16 Constant:
0:16 1.000000 0:16 6 (const int)
0:17 Sequence 0:17 Sequence
0:17 move second child to first child ( temp float) 0:17 move second child to first child ( temp int)
0:17 'r10' ( temp float) 0:17 'r07' ( temp int)
0:17 Constant: 0:17 Constant:
0:17 1.000000 0:17 57 (const int)
0:18 Sequence 0:18 Sequence
0:18 move second child to first child ( temp float) 0:18 move second child to first child ( temp uint)
0:18 'r11' ( temp float) 0:18 'r08' ( temp uint)
0:18 Constant: 0:18 Constant:
0:18 1.100000 0:18 58 (const uint)
0:19 Sequence 0:19 Sequence
0:19 move second child to first child ( temp float) 0:19 move second child to first child ( temp float)
0:19 'r12' ( temp float) 0:19 'r09' ( temp float)
0:19 Constant: 0:19 Constant:
0:19 1.100000 0:19 1.000000
0:22 move second child to first child ( temp 4-component vector of float) 0:20 Sequence
0:22 color: direct index for structure ( temp 4-component vector of float) 0:20 move second child to first child ( temp float)
0:22 'ps_output' ( temp structure{ temp 4-component vector of float color}) 0:20 'r10' ( temp float)
0:20 Constant:
0:20 1.000000
0:21 Sequence
0:21 move second child to first child ( temp float)
0:21 'r11' ( temp float)
0:21 Constant:
0:21 1.100000
0:22 Sequence
0:22 move second child to first child ( temp float)
0:22 'r12' ( temp float)
0:22 Constant: 0:22 Constant:
0:22 0 (const int) 0:22 1.100000
0:22 Construct vec4 ( temp 4-component vector of float) 0:23 Sequence
0:22 Convert int to float ( temp float) 0:23 move second child to first child ( temp uint)
0:22 'r07' ( temp int) 0:23 'r13' ( temp uint)
0:23 Branch: Return with expression 0:23 Constant:
0:23 'ps_output' ( temp structure{ temp 4-component vector of float color}) 0:23 1 (const uint)
0:5 Function Definition: main( ( temp void) 0:24 Sequence
0:5 Function Parameters: 0:24 move second child to first child ( temp uint)
0:24 'r14' ( temp uint)
0:24 Constant:
0:24 2 (const uint)
0:25 Sequence
0:25 move second child to first child ( temp int)
0:25 'r15' ( temp int)
0:25 Constant:
0:25 3 (const int)
0:26 Sequence
0:26 move second child to first child ( temp int)
0:26 'r16' ( temp int)
0:26 Constant:
0:26 4 (const int)
0:27 Sequence
0:27 move second child to first child ( temp uint)
0:27 'r17' ( temp uint)
0:27 Constant:
0:27 1 (const uint)
0:28 Sequence
0:28 move second child to first child ( temp int)
0:28 'r18' ( temp int)
0:28 Constant:
0:28 3 (const int)
0:31 move second child to first child ( temp 4-component vector of float)
0:31 color: direct index for structure ( temp 4-component vector of float)
0:31 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:31 Constant:
0:31 0 (const int)
0:31 Construct vec4 ( temp 4-component vector of float)
0:31 Convert int to float ( temp float)
0:31 'r07' ( temp int)
0:32 Branch: Return with expression
0:32 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:8 Function Definition: main( ( temp void)
0:8 Function Parameters:
0:? Sequence 0:? Sequence
0:5 Sequence 0:8 Sequence
0:5 move second child to first child ( temp 4-component vector of float) 0:8 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float) 0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:5 color: direct index for structure ( temp 4-component vector of float) 0:8 color: direct index for structure ( temp 4-component vector of float)
0:5 Function Call: @main( ( temp structure{ temp 4-component vector of float color}) 0:8 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:5 Constant: 0:8 Constant:
0:5 0 (const int) 0:8 0 (const int)
0:? Linker Objects 0:? Linker Objects
0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float) 0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
@ -100,105 +130,135 @@ Linked fragment stage:
Shader version: 500 Shader version: 500
gl_FragCoord origin is upper left gl_FragCoord origin is upper left
0:? Sequence 0:? Sequence
0:5 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) 0:8 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
0:5 Function Parameters: 0:8 Function Parameters:
0:? Sequence 0:? Sequence
0:7 Sequence
0:7 move second child to first child ( temp float)
0:7 'r00' ( temp float)
0:7 Constant:
0:7 1.000000
0:8 Sequence
0:8 move second child to first child ( temp uint)
0:8 'r01' ( temp uint)
0:8 Constant:
0:8 1 (const uint)
0:9 Sequence
0:9 move second child to first child ( temp uint)
0:9 'r02' ( temp uint)
0:9 Constant:
0:9 2 (const uint)
0:10 Sequence 0:10 Sequence
0:10 move second child to first child ( temp uint) 0:10 move second child to first child ( temp float)
0:10 'r03' ( temp uint) 0:10 'r00' ( temp float)
0:10 Constant: 0:10 Constant:
0:10 2748 (const uint) 0:10 1.000000
0:11 Sequence 0:11 Sequence
0:11 move second child to first child ( temp uint) 0:11 move second child to first child ( temp uint)
0:11 'r04' ( temp uint) 0:11 'r01' ( temp uint)
0:11 Constant: 0:11 Constant:
0:11 2748 (const uint) 0:11 1 (const uint)
0:12 Sequence 0:12 Sequence
0:12 move second child to first child ( temp int) 0:12 move second child to first child ( temp uint)
0:12 'r05' ( temp int) 0:12 'r02' ( temp uint)
0:12 Constant: 0:12 Constant:
0:12 5 (const int) 0:12 2 (const uint)
0:13 Sequence 0:13 Sequence
0:13 move second child to first child ( temp int) 0:13 move second child to first child ( temp uint)
0:13 'r06' ( temp int) 0:13 'r03' ( temp uint)
0:13 Constant: 0:13 Constant:
0:13 6 (const int) 0:13 2748 (const uint)
0:14 Sequence 0:14 Sequence
0:14 move second child to first child ( temp int) 0:14 move second child to first child ( temp uint)
0:14 'r07' ( temp int) 0:14 'r04' ( temp uint)
0:14 Constant: 0:14 Constant:
0:14 57 (const int) 0:14 2748 (const uint)
0:15 Sequence 0:15 Sequence
0:15 move second child to first child ( temp uint) 0:15 move second child to first child ( temp int)
0:15 'r08' ( temp uint) 0:15 'r05' ( temp int)
0:15 Constant: 0:15 Constant:
0:15 58 (const uint) 0:15 5 (const int)
0:16 Sequence 0:16 Sequence
0:16 move second child to first child ( temp float) 0:16 move second child to first child ( temp int)
0:16 'r09' ( temp float) 0:16 'r06' ( temp int)
0:16 Constant: 0:16 Constant:
0:16 1.000000 0:16 6 (const int)
0:17 Sequence 0:17 Sequence
0:17 move second child to first child ( temp float) 0:17 move second child to first child ( temp int)
0:17 'r10' ( temp float) 0:17 'r07' ( temp int)
0:17 Constant: 0:17 Constant:
0:17 1.000000 0:17 57 (const int)
0:18 Sequence 0:18 Sequence
0:18 move second child to first child ( temp float) 0:18 move second child to first child ( temp uint)
0:18 'r11' ( temp float) 0:18 'r08' ( temp uint)
0:18 Constant: 0:18 Constant:
0:18 1.100000 0:18 58 (const uint)
0:19 Sequence 0:19 Sequence
0:19 move second child to first child ( temp float) 0:19 move second child to first child ( temp float)
0:19 'r12' ( temp float) 0:19 'r09' ( temp float)
0:19 Constant: 0:19 Constant:
0:19 1.100000 0:19 1.000000
0:22 move second child to first child ( temp 4-component vector of float) 0:20 Sequence
0:22 color: direct index for structure ( temp 4-component vector of float) 0:20 move second child to first child ( temp float)
0:22 'ps_output' ( temp structure{ temp 4-component vector of float color}) 0:20 'r10' ( temp float)
0:20 Constant:
0:20 1.000000
0:21 Sequence
0:21 move second child to first child ( temp float)
0:21 'r11' ( temp float)
0:21 Constant:
0:21 1.100000
0:22 Sequence
0:22 move second child to first child ( temp float)
0:22 'r12' ( temp float)
0:22 Constant: 0:22 Constant:
0:22 0 (const int) 0:22 1.100000
0:22 Construct vec4 ( temp 4-component vector of float) 0:23 Sequence
0:22 Convert int to float ( temp float) 0:23 move second child to first child ( temp uint)
0:22 'r07' ( temp int) 0:23 'r13' ( temp uint)
0:23 Branch: Return with expression 0:23 Constant:
0:23 'ps_output' ( temp structure{ temp 4-component vector of float color}) 0:23 1 (const uint)
0:5 Function Definition: main( ( temp void) 0:24 Sequence
0:5 Function Parameters: 0:24 move second child to first child ( temp uint)
0:24 'r14' ( temp uint)
0:24 Constant:
0:24 2 (const uint)
0:25 Sequence
0:25 move second child to first child ( temp int)
0:25 'r15' ( temp int)
0:25 Constant:
0:25 3 (const int)
0:26 Sequence
0:26 move second child to first child ( temp int)
0:26 'r16' ( temp int)
0:26 Constant:
0:26 4 (const int)
0:27 Sequence
0:27 move second child to first child ( temp uint)
0:27 'r17' ( temp uint)
0:27 Constant:
0:27 1 (const uint)
0:28 Sequence
0:28 move second child to first child ( temp int)
0:28 'r18' ( temp int)
0:28 Constant:
0:28 3 (const int)
0:31 move second child to first child ( temp 4-component vector of float)
0:31 color: direct index for structure ( temp 4-component vector of float)
0:31 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:31 Constant:
0:31 0 (const int)
0:31 Construct vec4 ( temp 4-component vector of float)
0:31 Convert int to float ( temp float)
0:31 'r07' ( temp int)
0:32 Branch: Return with expression
0:32 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:8 Function Definition: main( ( temp void)
0:8 Function Parameters:
0:? Sequence 0:? Sequence
0:5 Sequence 0:8 Sequence
0:5 move second child to first child ( temp 4-component vector of float) 0:8 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float) 0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:5 color: direct index for structure ( temp 4-component vector of float) 0:8 color: direct index for structure ( temp 4-component vector of float)
0:5 Function Call: @main( ( temp structure{ temp 4-component vector of float color}) 0:8 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:5 Constant: 0:8 Constant:
0:5 0 (const int) 0:8 0 (const int)
0:? Linker Objects 0:? Linker Objects
0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float) 0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 8000b // Generated by (magic number): 8000b
// Id's are bound by 54 // Id's are bound by 62
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 51 EntryPoint Fragment 4 "main" 59
ExecutionMode 4 OriginUpperLeft ExecutionMode 4 OriginUpperLeft
Source HLSL 500 Source HLSL 500
Name 4 "main" Name 4 "main"
@ -218,9 +278,15 @@ gl_FragCoord origin is upper left
Name 35 "r10" Name 35 "r10"
Name 36 "r11" Name 36 "r11"
Name 38 "r12" Name 38 "r12"
Name 40 "ps_output" Name 39 "r13"
Name 51 "@entryPointOutput.color" Name 40 "r14"
Decorate 51(@entryPointOutput.color) Location 0 Name 41 "r15"
Name 43 "r16"
Name 45 "r17"
Name 46 "r18"
Name 48 "ps_output"
Name 59 "@entryPointOutput.color"
Decorate 59(@entryPointOutput.color) Location 0
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
@ -241,16 +307,18 @@ gl_FragCoord origin is upper left
31: 24(int) Constant 57 31: 24(int) Constant 57
33: 15(int) Constant 58 33: 15(int) Constant 58
37: 6(float) Constant 1066192077 37: 6(float) Constant 1066192077
39: TypePointer Function 8(PS_OUTPUT) 42: 24(int) Constant 3
41: 24(int) Constant 0 44: 24(int) Constant 4
45: TypePointer Function 7(fvec4) 47: TypePointer Function 8(PS_OUTPUT)
50: TypePointer Output 7(fvec4) 49: 24(int) Constant 0
51(@entryPointOutput.color): 50(ptr) Variable Output 53: TypePointer Function 7(fvec4)
58: TypePointer Output 7(fvec4)
59(@entryPointOutput.color): 58(ptr) Variable Output
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
52:8(PS_OUTPUT) FunctionCall 10(@main() 60:8(PS_OUTPUT) FunctionCall 10(@main()
53: 7(fvec4) CompositeExtract 52 0 61: 7(fvec4) CompositeExtract 60 0
Store 51(@entryPointOutput.color) 53 Store 59(@entryPointOutput.color) 61
Return Return
FunctionEnd FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9 10(@main():8(PS_OUTPUT) Function None 9
@ -268,7 +336,13 @@ gl_FragCoord origin is upper left
35(r10): 12(ptr) Variable Function 35(r10): 12(ptr) Variable Function
36(r11): 12(ptr) Variable Function 36(r11): 12(ptr) Variable Function
38(r12): 12(ptr) Variable Function 38(r12): 12(ptr) Variable Function
40(ps_output): 39(ptr) Variable Function 39(r13): 16(ptr) Variable Function
40(r14): 16(ptr) Variable Function
41(r15): 25(ptr) Variable Function
43(r16): 25(ptr) Variable Function
45(r17): 16(ptr) Variable Function
46(r18): 25(ptr) Variable Function
48(ps_output): 47(ptr) Variable Function
Store 13(r00) 14 Store 13(r00) 14
Store 17(r01) 18 Store 17(r01) 18
Store 19(r02) 20 Store 19(r02) 20
@ -282,11 +356,17 @@ gl_FragCoord origin is upper left
Store 35(r10) 14 Store 35(r10) 14
Store 36(r11) 37 Store 36(r11) 37
Store 38(r12) 37 Store 38(r12) 37
42: 24(int) Load 30(r07) Store 39(r13) 18
43: 6(float) ConvertSToF 42 Store 40(r14) 20
44: 7(fvec4) CompositeConstruct 43 43 43 43 Store 41(r15) 42
46: 45(ptr) AccessChain 40(ps_output) 41 Store 43(r16) 44
Store 46 44 Store 45(r17) 18
47:8(PS_OUTPUT) Load 40(ps_output) Store 46(r18) 42
ReturnValue 47 50: 24(int) Load 30(r07)
51: 6(float) ConvertSToF 50
52: 7(fvec4) CompositeConstruct 51 51 51 51
54: 53(ptr) AccessChain 48(ps_output) 49
Store 54 52
55:8(PS_OUTPUT) Load 48(ps_output)
ReturnValue 55
FunctionEnd FunctionEnd

View File

@ -0,0 +1,109 @@
hlsl.numericsuffixes.negative.frag
ERROR: 0:7: '' : bad digit in binary literal
ERROR: 0:8: '' : binary literal too big
ERROR: 0:9: '' : bad digit in hexadecimal literal
ERROR: 0:10: '' : hexadecimal literal too big
ERROR: 4 compilation errors. No code generated.
Shader version: 500
gl_FragCoord origin is upper left
ERROR: node is still EOpNull!
0:5 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
0:5 Function Parameters:
0:? Sequence
0:7 Sequence
0:7 move second child to first child ( temp uint)
0:7 'r01' ( temp uint)
0:7 Constant:
0:7 0 (const uint)
0:8 Sequence
0:8 move second child to first child ( temp uint)
0:8 'r02' ( temp uint)
0:8 Constant:
0:8 4294967295 (const uint)
0:10 Sequence
0:9 move second child to first child ( temp uint)
0:9 'r03' ( temp uint)
0:9 Constant:
0:9 0 (const uint)
0:10 move second child to first child ( temp uint)
0:10 'r04' ( temp uint)
0:10 Constant:
0:10 4294967295 (const uint)
0:13 move second child to first child ( temp 4-component vector of float)
0:13 color: direct index for structure ( temp 4-component vector of float)
0:13 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:13 Constant:
0:13 0 (const int)
0:13 Construct vec4 ( temp 4-component vector of float)
0:13 Convert uint to float ( temp float)
0:13 'r01' ( temp uint)
0:14 Branch: Return with expression
0:14 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:5 Function Definition: main( ( temp void)
0:5 Function Parameters:
0:? Sequence
0:5 Sequence
0:5 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:5 color: direct index for structure ( temp 4-component vector of float)
0:5 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:5 Constant:
0:5 0 (const int)
0:? Linker Objects
0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
Shader version: 500
gl_FragCoord origin is upper left
ERROR: node is still EOpNull!
0:5 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
0:5 Function Parameters:
0:? Sequence
0:7 Sequence
0:7 move second child to first child ( temp uint)
0:7 'r01' ( temp uint)
0:7 Constant:
0:7 0 (const uint)
0:8 Sequence
0:8 move second child to first child ( temp uint)
0:8 'r02' ( temp uint)
0:8 Constant:
0:8 4294967295 (const uint)
0:10 Sequence
0:9 move second child to first child ( temp uint)
0:9 'r03' ( temp uint)
0:9 Constant:
0:9 0 (const uint)
0:10 move second child to first child ( temp uint)
0:10 'r04' ( temp uint)
0:10 Constant:
0:10 4294967295 (const uint)
0:13 move second child to first child ( temp 4-component vector of float)
0:13 color: direct index for structure ( temp 4-component vector of float)
0:13 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:13 Constant:
0:13 0 (const int)
0:13 Construct vec4 ( temp 4-component vector of float)
0:13 Convert uint to float ( temp float)
0:13 'r01' ( temp uint)
0:14 Branch: Return with expression
0:14 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:5 Function Definition: main( ( temp void)
0:5 Function Parameters:
0:? Sequence
0:5 Sequence
0:5 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
0:5 color: direct index for structure ( temp 4-component vector of float)
0:5 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:5 Constant:
0:5 0 (const int)
0:? Linker Objects
0:? '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
SPIR-V is not generated for failed compile or link

View File

@ -27,7 +27,8 @@ ERROR: 0:62: 'preprocessor evaluation' : undefined macro in expression not allow
ERROR: 0:67: '' : numeric literal too long ERROR: 0:67: '' : numeric literal too long
ERROR: 0:70: '' : name too long ERROR: 0:70: '' : name too long
ERROR: 0:70: 'preprocessor evaluation' : undefined macro in expression not allowed in es profile A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ERROR: 0:70: 'preprocessor evaluation' : undefined macro in expression not allowed in es profile A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
ERROR: 26 compilation errors. No code generated. ERROR: 0:74: '' : syntax error, unexpected IDENTIFIER, expecting COMMA or SEMICOLON
ERROR: 27 compilation errors. No code generated.
Shader version: 300 Shader version: 300
@ -56,7 +57,7 @@ ERROR: node is still EOpNull!
0:14 move second child to first child ( temp highp int) 0:14 move second child to first child ( temp highp int)
0:14 'HE' ( global highp int) 0:14 'HE' ( global highp int)
0:14 Constant: 0:14 Constant:
0:14 -1 (const int) 0:14 180150000 (const int)
0:17 Sequence 0:17 Sequence
0:17 move second child to first child ( temp highp float) 0:17 move second child to first child ( temp highp float)
0:17 'F' ( global highp float) 0:17 'F' ( global highp float)
@ -119,6 +120,7 @@ ERROR: node is still EOpNull!
0:? 'superO' ( global highp int) 0:? 'superO' ( global highp int)
0:? 'superI' ( global highp int) 0:? 'superI' ( global highp int)
0:? 'superF' ( global highp float) 0:? 'superF' ( global highp float)
0:? 'BE' ( global highp int)
0:? 'gl_VertexID' ( gl_VertexId highp int VertexId) 0:? 'gl_VertexID' ( gl_VertexId highp int VertexId)
0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId) 0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
@ -152,7 +154,7 @@ ERROR: node is still EOpNull!
0:14 move second child to first child ( temp highp int) 0:14 move second child to first child ( temp highp int)
0:14 'HE' ( global highp int) 0:14 'HE' ( global highp int)
0:14 Constant: 0:14 Constant:
0:14 -1 (const int) 0:14 180150000 (const int)
0:17 Sequence 0:17 Sequence
0:17 move second child to first child ( temp highp float) 0:17 move second child to first child ( temp highp float)
0:17 'F' ( global highp float) 0:17 'F' ( global highp float)
@ -215,6 +217,7 @@ ERROR: node is still EOpNull!
0:? 'superO' ( global highp int) 0:? 'superO' ( global highp int)
0:? 'superI' ( global highp int) 0:? 'superI' ( global highp int)
0:? 'superF' ( global highp float) 0:? 'superF' ( global highp float)
0:? 'BE' ( global highp int)
0:? 'gl_VertexID' ( gl_VertexId highp int VertexId) 0:? 'gl_VertexID' ( gl_VertexId highp int VertexId)
0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId) 0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId)

View File

@ -37,6 +37,10 @@ float4 PixelShaderFunction(float4 input) : COLOR0
e = a = b ? c = d : 10, b = a ? d = c : 11; e = a = b ? c = d : 10, b = a ? d = c : 11;
float4 f; float4 f;
f = ret.x < input.y ? c * input : d * input; f = ret.x < input.y ? c * input : d * input;
uint g = d > 0.0 ? 0b010101u : 0u;
uint h = g > 0.0 ? 0B111111u : 0u;
uint i = h > 0.0 ? 0b0101u : 0B01;
uint j = i > 0.0 ? 0xabcd : 0xbcda;
return e * ret + f + vectorCond() + scalarCond() + return e * ret + f + vectorCond() + scalarCond() +
float4(fbSelect(bool2(true, false), float2(1.0, 2.0), float2(3.0, 4.0)), 10.0, 10.0); float4(fbSelect(bool2(true, false), float2(1.0, 2.0), float2(3.0, 4.0)), 10.0, 10.0);
} }

View File

@ -1,6 +1,9 @@
struct PS_OUTPUT { float4 color : SV_Target0; }; struct PS_OUTPUT { float4 color : SV_Target0; };
#define BIN_UINT 0b00001u
#define BIN_INT 0b00011
PS_OUTPUT main() PS_OUTPUT main()
{ {
// Test numeric suffixes // Test numeric suffixes
@ -8,7 +11,7 @@ PS_OUTPUT main()
uint r01 = 1u; // lower uint uint r01 = 1u; // lower uint
uint r02 = 2U; // upper uint uint r02 = 2U; // upper uint
uint r03 = 0xabcu; // lower hex uint uint r03 = 0xabcu; // lower hex uint
uint r04 = 0xABCU; // upper hex uint (upper 0X is not accepted) uint r04 = 0XABCU; // upper hex uint
int r05 = 5l; // lower long int int r05 = 5l; // lower long int
int r06 = 6L; // upper long int int r06 = 6L; // upper long int
int r07 = 071; // octal int r07 = 071; // octal
@ -17,6 +20,12 @@ PS_OUTPUT main()
float r10 = 1.H; // half float r10 = 1.H; // half
float r11 = 1.1h; // half float r11 = 1.1h; // half
float r12 = 1.1H; // half float r12 = 1.1H; // half
uint r13 = 0b00001u;// lower binary uint
uint r14 = 0B00010U;// upper binary uint
int r15 = 0b00011; // lower binary int
int r16 = 0B00100; // upper binary int
uint r17 = BIN_UINT;// lower binart define uint
int r18 = BIN_INT; // lower binart define int
PS_OUTPUT ps_output; PS_OUTPUT ps_output;
ps_output.color = r07; // gets 71 octal = 57 decimal ps_output.color = r07; // gets 71 octal = 57 decimal

View File

@ -0,0 +1,15 @@
struct PS_OUTPUT { float4 color : SV_Target0; };
PS_OUTPUT main()
{
// Test numeric suffixes
uint r01 = 0bERROR321u; // Bad digit
uint r02 = 0b11111111111111111111111111111111111111111111111111111111111111111u; // To big
uint r03 = 0xTESTu // Bad digit
uint r04 = 0xFFFFFFFFFFFFFFFFFFu; // To big
PS_OUTPUT ps_output;
ps_output.color = r01;
return ps_output;
}

View File

@ -70,3 +70,5 @@ float superF = 1.012345678901234567890123456789012345678901234567890123456789012
#if A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 #if A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
#error in super long macro #if #error in super long macro #if
#endif #endif
int BE = 0b01u; // ERROR (not supported by GLSL)

View File

@ -3,6 +3,7 @@
// Copyright (C) 2013 LunarG, Inc. // Copyright (C) 2013 LunarG, Inc.
// Copyright (C) 2017 ARM Limited. // Copyright (C) 2017 ARM Limited.
// Copyright (C) 2015-2018 Google, Inc. // Copyright (C) 2015-2018 Google, Inc.
// Copyright (c) 2023, Mobica Limited
// //
// All rights reserved. // All rights reserved.
// //
@ -549,7 +550,7 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
ival = 0; ival = 0;
do { do {
if (len < MaxTokenLength && ival <= 0x0fffffffffffffffull) { if (len < MaxTokenLength && ival <= 0x7fffffffffffffffull) {
ppToken->name[len++] = (char)ch; ppToken->name[len++] = (char)ch;
if (ch >= '0' && ch <= '9') { if (ch >= '0' && ch <= '9') {
ii = ch - '0'; ii = ch - '0';
@ -639,6 +640,110 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken)
ppToken->ival = (int)ival; ppToken->ival = (int)ival;
return isUnsigned ? PpAtomConstUint : PpAtomConstInt; return isUnsigned ? PpAtomConstUint : PpAtomConstInt;
} }
} else if ((ch == 'b' || ch == 'B') && pp->parseContext.intermediate.getSource() == EShSourceHlsl) {
// must be binary
bool isUnsigned = false;
bool isInt64 = false;
bool isInt16 = false;
ppToken->name[len++] = (char)ch;
ch = getch();
// Check value
if ((ch == '0' || ch == '1'))
{
ival = 0;
do {
if (len < MaxTokenLength && ival <= 0x7fffffffffffffffull) {
ppToken->name[len++] = (char)ch;
if (ch == '0' || ch == '1') {
ii = ch - '0';
} else {
pp->parseContext.ppError(ppToken->loc, "bad digit in binary literal", "", "");
}
ival = (ival << 1) | ii;
}
else
{
if (! AlreadyComplained) {
if(len < MaxTokenLength)
pp->parseContext.ppError(ppToken->loc, "binary literal too big", "", "");
else
pp->parseContext.ppError(ppToken->loc, "binary literal too long", "", "");
AlreadyComplained = 1;
}
ival = 0xffffffffffffffffull;
}
ch = getch();
} while (ch == '0' || ch == '1');
}
else
{
pp->parseContext.ppError(ppToken->loc, "bad digit in binary literal", "", "");
}
// check type
if (ch == 'u' || ch == 'U') {
if (len < MaxTokenLength)
ppToken->name[len++] = (char)ch;
isUnsigned = true;
#ifndef GLSLANG_WEB
int nextCh = getch();
if (nextCh == 'l' || nextCh == 'L') {
if (len < MaxTokenLength)
ppToken->name[len++] = (char)nextCh;
isInt64 = true;
} else
ungetch();
nextCh = getch();
if ((nextCh == 's' || nextCh == 'S') &&
pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
if (len < MaxTokenLength)
ppToken->name[len++] = (char)nextCh;
isInt16 = true;
} else
ungetch();
} else if (ch == 'l' || ch == 'L') {
if (len < MaxTokenLength)
ppToken->name[len++] = (char)ch;
isInt64 = true;
} else if ((ch == 's' || ch == 'S') &&
pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
if (len < MaxTokenLength)
ppToken->name[len++] = (char)ch;
isInt16 = true;
#endif
} else {
ungetch();
}
ppToken->name[len] = '\0';
// Assign value
if (isInt64 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
if (pp->ifdepth == 0) {
pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
"64-bit binary literal");
pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
Num_Int64_Extensions, Int64_Extensions, "64-bit binary literal");
}
ppToken->i64val = ival;
return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64;
} else if (isInt16) {
if (pp->ifdepth == 0) {
if (pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
"16-bit binary literal");
pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
Num_Int16_Extensions, Int16_Extensions, "16-bit binary literal");
}
}
ppToken->ival = (int)ival;
return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16;
} else {
ppToken->ival = (int)ival;
return isUnsigned ? PpAtomConstUint : PpAtomConstInt;
}
} else { } else {
// could be octal integer or floating point, speculative pursue octal until it must be floating point // could be octal integer or floating point, speculative pursue octal until it must be floating point

View File

@ -313,6 +313,7 @@ INSTANTIATE_TEST_SUITE_P(
{"hlsl.matrixindex.frag", "main"}, {"hlsl.matrixindex.frag", "main"},
{"hlsl.nonstaticMemberFunction.frag", "main"}, {"hlsl.nonstaticMemberFunction.frag", "main"},
{"hlsl.numericsuffixes.frag", "main"}, {"hlsl.numericsuffixes.frag", "main"},
{"hlsl.numericsuffixes.negative.frag", "main"},
{"hlsl.numthreads.comp", "main_aux2"}, {"hlsl.numthreads.comp", "main_aux2"},
{"hlsl.overload.frag", "PixelShaderFunction"}, {"hlsl.overload.frag", "PixelShaderFunction"},
{"hlsl.opaque-type-bug.frag", "main"}, {"hlsl.opaque-type-bug.frag", "main"},