mirror of
https://github.com/RPCS3/glslang.git
synced 2024-12-03 16:41:30 +00:00
0842dbb39a
This PR adds a CreateParseContext() fn analogous to CreateBuiltInParseables(), to create a language specific built in parser. (This code was present before but not encapsualted in a fn). This can now be used to create a source language specific parser for builtins. Along with this, the code creating HLSL intrinsic prototypes can now produce them in HLSL syntax, rather than GLSL syntax. This relaxes certain prior restrictions at the parser level. Lower layers (e.g, SPIR-V) may still have such restrictions, such as around Nx1 matrices: this code does not impact that. This PR also fleshes out matrix types for bools and ints, both of which were partially in place before. This was easier than maintaining the restrictions in the HLSL prototype generator to avoid creating protoypes with those types. Many tests change because the result type from intrinsics moves from "global" to "temp". Several new tests are added for the new types.
163 lines
6.4 KiB
Plaintext
Executable File
163 lines
6.4 KiB
Plaintext
Executable File
hlsl.whileLoop.frag
|
|
Shader version: 450
|
|
gl_FragCoord origin is upper left
|
|
0:? Sequence
|
|
0:2 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
|
|
0:2 Function Parameters:
|
|
0:2 'input' (layout(location=0 ) in 4-component vector of float)
|
|
0:? Sequence
|
|
0:3 Loop with condition tested first
|
|
0:3 Loop Condition
|
|
0:3 any (temp bool)
|
|
0:3 NotEqual (temp 4-component vector of bool)
|
|
0:3 'input' (layout(location=0 ) in 4-component vector of float)
|
|
0:3 'input' (layout(location=0 ) in 4-component vector of float)
|
|
0:3 Loop Body
|
|
0:? Sequence
|
|
0:3 Sequence
|
|
0:3 move second child to first child (temp 4-component vector of float)
|
|
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
|
|
0:3 'input' (layout(location=0 ) in 4-component vector of float)
|
|
0:3 Branch: Return
|
|
0:4 Loop with condition tested first
|
|
0:4 Loop Condition
|
|
0:4 Constant:
|
|
0:4 false (const bool)
|
|
0:4 No loop body
|
|
0:5 Loop with condition tested first
|
|
0:5 Loop Condition
|
|
0:5 Constant:
|
|
0:5 false (const bool)
|
|
0:5 No loop body
|
|
0:6 Loop with condition tested first
|
|
0:6 Loop Condition
|
|
0:6 Constant:
|
|
0:6 false (const bool)
|
|
0:6 No loop body
|
|
0:? Linker Objects
|
|
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
|
|
0:? 'input' (layout(location=0 ) in 4-component vector of float)
|
|
|
|
|
|
Linked fragment stage:
|
|
|
|
|
|
Shader version: 450
|
|
gl_FragCoord origin is upper left
|
|
0:? Sequence
|
|
0:2 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
|
|
0:2 Function Parameters:
|
|
0:2 'input' (layout(location=0 ) in 4-component vector of float)
|
|
0:? Sequence
|
|
0:3 Loop with condition tested first
|
|
0:3 Loop Condition
|
|
0:3 any (temp bool)
|
|
0:3 NotEqual (temp 4-component vector of bool)
|
|
0:3 'input' (layout(location=0 ) in 4-component vector of float)
|
|
0:3 'input' (layout(location=0 ) in 4-component vector of float)
|
|
0:3 Loop Body
|
|
0:? Sequence
|
|
0:3 Sequence
|
|
0:3 move second child to first child (temp 4-component vector of float)
|
|
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
|
|
0:3 'input' (layout(location=0 ) in 4-component vector of float)
|
|
0:3 Branch: Return
|
|
0:4 Loop with condition tested first
|
|
0:4 Loop Condition
|
|
0:4 Constant:
|
|
0:4 false (const bool)
|
|
0:4 No loop body
|
|
0:5 Loop with condition tested first
|
|
0:5 Loop Condition
|
|
0:5 Constant:
|
|
0:5 false (const bool)
|
|
0:5 No loop body
|
|
0:6 Loop with condition tested first
|
|
0:6 Loop Condition
|
|
0:6 Constant:
|
|
0:6 false (const bool)
|
|
0:6 No loop body
|
|
0:? Linker Objects
|
|
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
|
|
0:? 'input' (layout(location=0 ) in 4-component vector of float)
|
|
|
|
// Module Version 10000
|
|
// Generated by (magic number): 80001
|
|
// Id's are bound by 41
|
|
|
|
Capability Shader
|
|
1: ExtInstImport "GLSL.std.450"
|
|
MemoryModel Logical GLSL450
|
|
EntryPoint Fragment 4 "PixelShaderFunction" 14 22
|
|
ExecutionMode 4 OriginUpperLeft
|
|
Name 4 "PixelShaderFunction"
|
|
Name 14 "input"
|
|
Name 22 "@entryPointOutput"
|
|
Decorate 14(input) Location 0
|
|
Decorate 22(@entryPointOutput) Location 0
|
|
2: TypeVoid
|
|
3: TypeFunction 2
|
|
11: TypeFloat 32
|
|
12: TypeVector 11(float) 4
|
|
13: TypePointer Input 12(fvec4)
|
|
14(input): 13(ptr) Variable Input
|
|
17: TypeBool
|
|
18: TypeVector 17(bool) 4
|
|
21: TypePointer Output 12(fvec4)
|
|
22(@entryPointOutput): 21(ptr) Variable Output
|
|
30: 17(bool) ConstantFalse
|
|
4(PixelShaderFunction): 2 Function None 3
|
|
5: Label
|
|
Branch 6
|
|
6: Label
|
|
LoopMerge 8 9 None
|
|
Branch 10
|
|
10: Label
|
|
15: 12(fvec4) Load 14(input)
|
|
16: 12(fvec4) Load 14(input)
|
|
19: 18(bvec4) FOrdNotEqual 15 16
|
|
20: 17(bool) Any 19
|
|
BranchConditional 20 7 8
|
|
7: Label
|
|
23: 12(fvec4) Load 14(input)
|
|
Store 22(@entryPointOutput) 23
|
|
Return
|
|
9: Label
|
|
Branch 6
|
|
8: Label
|
|
Branch 25
|
|
25: Label
|
|
LoopMerge 27 28 None
|
|
Branch 29
|
|
29: Label
|
|
BranchConditional 30 26 27
|
|
26: Label
|
|
Branch 28
|
|
28: Label
|
|
Branch 25
|
|
27: Label
|
|
Branch 31
|
|
31: Label
|
|
LoopMerge 33 34 None
|
|
Branch 35
|
|
35: Label
|
|
BranchConditional 30 32 33
|
|
32: Label
|
|
Branch 34
|
|
34: Label
|
|
Branch 31
|
|
33: Label
|
|
Branch 36
|
|
36: Label
|
|
LoopMerge 38 39 None
|
|
Branch 40
|
|
40: Label
|
|
BranchConditional 30 37 38
|
|
37: Label
|
|
Branch 39
|
|
39: Label
|
|
Branch 36
|
|
38: Label
|
|
Return
|
|
FunctionEnd
|