 5ca85ad9de
			
		
	
	
		5ca85ad9de
		
	
	
	
	
		
			
			HLSL allows type keywords to also be identifiers, so a sequence such as "float half = 3" is valid, or more bizzarely, something like "float.float = int.uint + bool;" There are places this is not supported. E.g, it's permitted for struct members, but not struct names or functions. Also, vector or matrix types such as "float3" are not permitted as identifiers. This PR adds that support, as well as support for the "half" type. In production shaders, this was seen with variables named "half". The PR attempts to support this without breaking useful grammar errors such as "; expected" at the end of unterminated statements, so it errs on that side at the possible expense of failing to accept valid constructs containing a type keyword identifier. If others are discovered, they can be added. Also, half is now accepted as a valid type, alongside the min*float types.
		
			
				
	
	
		
			383 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			383 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| hlsl.type.identifier.frag
 | |
| Shader version: 450
 | |
| gl_FragCoord origin is upper left
 | |
| 0:? Sequence
 | |
| 0:6  Function Definition: fn(f1; (temp float)
 | |
| 0:6    Function Parameters: 
 | |
| 0:6      'float' (in float)
 | |
| 0:?     Sequence
 | |
| 0:6      Branch: Return with expression
 | |
| 0:6        'float' (in float)
 | |
| 0:9  Function Definition: main( (temp 4-component vector of float)
 | |
| 0:9    Function Parameters: 
 | |
| 0:?     Sequence
 | |
| 0:10      Sequence
 | |
| 0:10        move second child to first child (temp float)
 | |
| 0:10          'float' (temp float)
 | |
| 0:10          Constant:
 | |
| 0:10            7.000000
 | |
| 0:11      Sequence
 | |
| 0:11        move second child to first child (temp 2-element array of bool)
 | |
| 0:11          'bool' (temp 2-element array of bool)
 | |
| 0:11          Construct bool (temp 2-element array of bool)
 | |
| 0:11            Convert float to bool (temp bool)
 | |
| 0:11              'float' (temp float)
 | |
| 0:11            Convert float to bool (temp bool)
 | |
| 0:11              'float' (temp float)
 | |
| 0:12      Sequence
 | |
| 0:12        move second child to first child (temp int)
 | |
| 0:12          'int' (temp int)
 | |
| 0:12          Convert bool to int (temp int)
 | |
| 0:12            direct index (temp bool)
 | |
| 0:12              'bool' (temp 2-element array of bool)
 | |
| 0:12              Constant:
 | |
| 0:12                1 (const int)
 | |
| 0:13      Sequence
 | |
| 0:13        move second child to first child (temp uint)
 | |
| 0:13          'uint' (temp uint)
 | |
| 0:13          Convert float to uint (temp uint)
 | |
| 0:13            add (temp float)
 | |
| 0:13              'float' (temp float)
 | |
| 0:13              Convert int to float (temp float)
 | |
| 0:13                'int' (temp int)
 | |
| 0:14      Sequence
 | |
| 0:14        move second child to first child (temp mediump float)
 | |
| 0:14          'min16float' (temp mediump float)
 | |
| 0:14          Convert uint to float (temp mediump float)
 | |
| 0:14            'uint' (temp mediump uint)
 | |
| 0:15      Sequence
 | |
| 0:15        move second child to first child (temp mediump float)
 | |
| 0:15          'min10float' (temp mediump float)
 | |
| 0:15          'min16float' (temp mediump float)
 | |
| 0:16      Sequence
 | |
| 0:16        move second child to first child (temp mediump float)
 | |
| 0:16          'half' (temp mediump float)
 | |
| 0:16          Constant:
 | |
| 0:16            0.500000
 | |
| 0:?       Sequence
 | |
| 0:20        move second child to first child (temp float)
 | |
| 0:20          float: direct index for structure (temp float)
 | |
| 0:20            'float' (temp structure{temp float float})
 | |
| 0:20            Constant:
 | |
| 0:20              0 (const int)
 | |
| 0:20          Constant:
 | |
| 0:20            42.000000
 | |
| 0:23      move second child to first child (temp bool)
 | |
| 0:23        direct index (temp bool)
 | |
| 0:23          'bool' (temp 2-element array of bool)
 | |
| 0:23          Constant:
 | |
| 0:23            0 (const int)
 | |
| 0:23        direct index (temp bool)
 | |
| 0:23          'bool' (temp 2-element array of bool)
 | |
| 0:23          Constant:
 | |
| 0:23            1 (const int)
 | |
| 0:25      move second child to first child (temp mediump float)
 | |
| 0:25        'float' (temp mediump float)
 | |
| 0:25        add (temp mediump float)
 | |
| 0:25          add (temp mediump float)
 | |
| 0:25            add (temp mediump float)
 | |
| 0:25              add (temp mediump float)
 | |
| 0:25                add (temp mediump float)
 | |
| 0:25                  add (temp mediump float)
 | |
| 0:25                    'float' (temp mediump float)
 | |
| 0:25                    Convert int to float (temp mediump float)
 | |
| 0:25                      'int' (temp mediump int)
 | |
| 0:25                  Convert uint to float (temp mediump float)
 | |
| 0:25                    'uint' (temp mediump uint)
 | |
| 0:25                'min16float' (temp mediump float)
 | |
| 0:25              'min10float' (temp mediump float)
 | |
| 0:25            Test condition and select (temp mediump float)
 | |
| 0:25              Condition
 | |
| 0:25              direct index (temp bool)
 | |
| 0:25                'bool' (temp 2-element array of bool)
 | |
| 0:25                Constant:
 | |
| 0:25                  0 (const int)
 | |
| 0:25              true case
 | |
| 0:25              Convert int to float (temp mediump float)
 | |
| 0:25                'int' (temp mediump int)
 | |
| 0:25              false case
 | |
| 0:25              'float' (temp mediump float)
 | |
| 0:25          Function Call: fn(f1; (temp mediump float)
 | |
| 0:25            'float' (temp mediump float)
 | |
| 0:27      Sequence
 | |
| 0:27        move second child to first child (temp 4-component vector of float)
 | |
| 0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 | |
| 0:27          Construct vec4 (temp 4-component vector of float)
 | |
| 0:27            'float' (temp float)
 | |
| 0:27        Branch: Return
 | |
| 0:?   Linker Objects
 | |
| 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 | |
| 
 | |
| 
 | |
| Linked fragment stage:
 | |
| 
 | |
| 
 | |
| Shader version: 450
 | |
| gl_FragCoord origin is upper left
 | |
| 0:? Sequence
 | |
| 0:6  Function Definition: fn(f1; (temp float)
 | |
| 0:6    Function Parameters: 
 | |
| 0:6      'float' (in float)
 | |
| 0:?     Sequence
 | |
| 0:6      Branch: Return with expression
 | |
| 0:6        'float' (in float)
 | |
| 0:9  Function Definition: main( (temp 4-component vector of float)
 | |
| 0:9    Function Parameters: 
 | |
| 0:?     Sequence
 | |
| 0:10      Sequence
 | |
| 0:10        move second child to first child (temp float)
 | |
| 0:10          'float' (temp float)
 | |
| 0:10          Constant:
 | |
| 0:10            7.000000
 | |
| 0:11      Sequence
 | |
| 0:11        move second child to first child (temp 2-element array of bool)
 | |
| 0:11          'bool' (temp 2-element array of bool)
 | |
| 0:11          Construct bool (temp 2-element array of bool)
 | |
| 0:11            Convert float to bool (temp bool)
 | |
| 0:11              'float' (temp float)
 | |
| 0:11            Convert float to bool (temp bool)
 | |
| 0:11              'float' (temp float)
 | |
| 0:12      Sequence
 | |
| 0:12        move second child to first child (temp int)
 | |
| 0:12          'int' (temp int)
 | |
| 0:12          Convert bool to int (temp int)
 | |
| 0:12            direct index (temp bool)
 | |
| 0:12              'bool' (temp 2-element array of bool)
 | |
| 0:12              Constant:
 | |
| 0:12                1 (const int)
 | |
| 0:13      Sequence
 | |
| 0:13        move second child to first child (temp uint)
 | |
| 0:13          'uint' (temp uint)
 | |
| 0:13          Convert float to uint (temp uint)
 | |
| 0:13            add (temp float)
 | |
| 0:13              'float' (temp float)
 | |
| 0:13              Convert int to float (temp float)
 | |
| 0:13                'int' (temp int)
 | |
| 0:14      Sequence
 | |
| 0:14        move second child to first child (temp mediump float)
 | |
| 0:14          'min16float' (temp mediump float)
 | |
| 0:14          Convert uint to float (temp mediump float)
 | |
| 0:14            'uint' (temp mediump uint)
 | |
| 0:15      Sequence
 | |
| 0:15        move second child to first child (temp mediump float)
 | |
| 0:15          'min10float' (temp mediump float)
 | |
| 0:15          'min16float' (temp mediump float)
 | |
| 0:16      Sequence
 | |
| 0:16        move second child to first child (temp mediump float)
 | |
| 0:16          'half' (temp mediump float)
 | |
| 0:16          Constant:
 | |
| 0:16            0.500000
 | |
| 0:?       Sequence
 | |
| 0:20        move second child to first child (temp float)
 | |
| 0:20          float: direct index for structure (temp float)
 | |
| 0:20            'float' (temp structure{temp float float})
 | |
| 0:20            Constant:
 | |
| 0:20              0 (const int)
 | |
| 0:20          Constant:
 | |
| 0:20            42.000000
 | |
| 0:23      move second child to first child (temp bool)
 | |
| 0:23        direct index (temp bool)
 | |
| 0:23          'bool' (temp 2-element array of bool)
 | |
| 0:23          Constant:
 | |
| 0:23            0 (const int)
 | |
| 0:23        direct index (temp bool)
 | |
| 0:23          'bool' (temp 2-element array of bool)
 | |
| 0:23          Constant:
 | |
| 0:23            1 (const int)
 | |
| 0:25      move second child to first child (temp mediump float)
 | |
| 0:25        'float' (temp mediump float)
 | |
| 0:25        add (temp mediump float)
 | |
| 0:25          add (temp mediump float)
 | |
| 0:25            add (temp mediump float)
 | |
| 0:25              add (temp mediump float)
 | |
| 0:25                add (temp mediump float)
 | |
| 0:25                  add (temp mediump float)
 | |
| 0:25                    'float' (temp mediump float)
 | |
| 0:25                    Convert int to float (temp mediump float)
 | |
| 0:25                      'int' (temp mediump int)
 | |
| 0:25                  Convert uint to float (temp mediump float)
 | |
| 0:25                    'uint' (temp mediump uint)
 | |
| 0:25                'min16float' (temp mediump float)
 | |
| 0:25              'min10float' (temp mediump float)
 | |
| 0:25            Test condition and select (temp mediump float)
 | |
| 0:25              Condition
 | |
| 0:25              direct index (temp bool)
 | |
| 0:25                'bool' (temp 2-element array of bool)
 | |
| 0:25                Constant:
 | |
| 0:25                  0 (const int)
 | |
| 0:25              true case
 | |
| 0:25              Convert int to float (temp mediump float)
 | |
| 0:25                'int' (temp mediump int)
 | |
| 0:25              false case
 | |
| 0:25              'float' (temp mediump float)
 | |
| 0:25          Function Call: fn(f1; (temp mediump float)
 | |
| 0:25            'float' (temp mediump float)
 | |
| 0:27      Sequence
 | |
| 0:27        move second child to first child (temp 4-component vector of float)
 | |
| 0:?           '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 | |
| 0:27          Construct vec4 (temp 4-component vector of float)
 | |
| 0:27            'float' (temp float)
 | |
| 0:27        Branch: Return
 | |
| 0:?   Linker Objects
 | |
| 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 | |
| 
 | |
| // Module Version 10000
 | |
| // Generated by (magic number): 80001
 | |
| // Id's are bound by 92
 | |
| 
 | |
|                               Capability Shader
 | |
|                1:             ExtInstImport  "GLSL.std.450"
 | |
|                               MemoryModel Logical GLSL450
 | |
|                               EntryPoint Fragment 4  "main" 88
 | |
|                               ExecutionMode 4 OriginUpperLeft
 | |
|                               Name 4  "main"
 | |
|                               Name 10  "fn(f1;"
 | |
|                               Name 9  "float"
 | |
|                               Name 15  "float"
 | |
|                               Name 22  "bool"
 | |
|                               Name 31  "int"
 | |
|                               Name 39  "uint"
 | |
|                               Name 45  "min16float"
 | |
|                               Name 48  "min10float"
 | |
|                               Name 50  "half"
 | |
|                               Name 52  "foo_t"
 | |
|                               MemberName 52(foo_t) 0  "float"
 | |
|                               Name 54  "float"
 | |
|                               Name 82  "param"
 | |
|                               Name 88  "@entryPointOutput"
 | |
|                               Decorate 45(min16float) RelaxedPrecision
 | |
|                               Decorate 46 RelaxedPrecision
 | |
|                               Decorate 47 RelaxedPrecision
 | |
|                               Decorate 48(min10float) RelaxedPrecision
 | |
|                               Decorate 49 RelaxedPrecision
 | |
|                               Decorate 50(half) RelaxedPrecision
 | |
|                               Decorate 60 RelaxedPrecision
 | |
|                               Decorate 61 RelaxedPrecision
 | |
|                               Decorate 62 RelaxedPrecision
 | |
|                               Decorate 63 RelaxedPrecision
 | |
|                               Decorate 64 RelaxedPrecision
 | |
|                               Decorate 65 RelaxedPrecision
 | |
|                               Decorate 66 RelaxedPrecision
 | |
|                               Decorate 67 RelaxedPrecision
 | |
|                               Decorate 68 RelaxedPrecision
 | |
|                               Decorate 69 RelaxedPrecision
 | |
|                               Decorate 70 RelaxedPrecision
 | |
|                               Decorate 76 RelaxedPrecision
 | |
|                               Decorate 77 RelaxedPrecision
 | |
|                               Decorate 79 RelaxedPrecision
 | |
|                               Decorate 80 RelaxedPrecision
 | |
|                               Decorate 81 RelaxedPrecision
 | |
|                               Decorate 83 RelaxedPrecision
 | |
|                               Decorate 84 RelaxedPrecision
 | |
|                               Decorate 85 RelaxedPrecision
 | |
|                               Decorate 88(@entryPointOutput) Location 0
 | |
|                2:             TypeVoid
 | |
|                3:             TypeFunction 2
 | |
|                6:             TypeFloat 32
 | |
|                7:             TypePointer Function 6(float)
 | |
|                8:             TypeFunction 6(float) 7(ptr)
 | |
|               16:    6(float) Constant 1088421888
 | |
|               17:             TypeBool
 | |
|               18:             TypeInt 32 0
 | |
|               19:     18(int) Constant 2
 | |
|               20:             TypeArray 17(bool) 19
 | |
|               21:             TypePointer Function 20
 | |
|               24:    6(float) Constant 0
 | |
|               29:             TypeInt 32 1
 | |
|               30:             TypePointer Function 29(int)
 | |
|               32:     29(int) Constant 1
 | |
|               33:             TypePointer Function 17(bool)
 | |
|               36:     29(int) Constant 0
 | |
|               38:             TypePointer Function 18(int)
 | |
|               51:    6(float) Constant 1056964608
 | |
|        52(foo_t):             TypeStruct 6(float)
 | |
|               53:             TypePointer Function 52(foo_t)
 | |
|               55:    6(float) Constant 1109917696
 | |
|               86:             TypeVector 6(float) 4
 | |
|               87:             TypePointer Output 86(fvec4)
 | |
| 88(@entryPointOutput):     87(ptr) Variable Output
 | |
|          4(main):           2 Function None 3
 | |
|                5:             Label
 | |
|        15(float):      7(ptr) Variable Function
 | |
|         22(bool):     21(ptr) Variable Function
 | |
|          31(int):     30(ptr) Variable Function
 | |
|         39(uint):     38(ptr) Variable Function
 | |
|   45(min16float):      7(ptr) Variable Function
 | |
|   48(min10float):      7(ptr) Variable Function
 | |
|         50(half):      7(ptr) Variable Function
 | |
|        54(float):     53(ptr) Variable Function
 | |
|               71:      7(ptr) Variable Function
 | |
|        82(param):      7(ptr) Variable Function
 | |
|                               Store 15(float) 16
 | |
|               23:    6(float) Load 15(float)
 | |
|               25:    17(bool) FOrdNotEqual 23 24
 | |
|               26:    6(float) Load 15(float)
 | |
|               27:    17(bool) FOrdNotEqual 26 24
 | |
|               28:          20 CompositeConstruct 25 27
 | |
|                               Store 22(bool) 28
 | |
|               34:     33(ptr) AccessChain 22(bool) 32
 | |
|               35:    17(bool) Load 34
 | |
|               37:     29(int) Select 35 32 36
 | |
|                               Store 31(int) 37
 | |
|               40:    6(float) Load 15(float)
 | |
|               41:     29(int) Load 31(int)
 | |
|               42:    6(float) ConvertSToF 41
 | |
|               43:    6(float) FAdd 40 42
 | |
|               44:     18(int) ConvertFToU 43
 | |
|                               Store 39(uint) 44
 | |
|               46:     18(int) Load 39(uint)
 | |
|               47:    6(float) ConvertUToF 46
 | |
|                               Store 45(min16float) 47
 | |
|               49:    6(float) Load 45(min16float)
 | |
|                               Store 48(min10float) 49
 | |
|                               Store 50(half) 51
 | |
|               56:      7(ptr) AccessChain 54(float) 36
 | |
|                               Store 56 55
 | |
|               57:     33(ptr) AccessChain 22(bool) 32
 | |
|               58:    17(bool) Load 57
 | |
|               59:     33(ptr) AccessChain 22(bool) 36
 | |
|                               Store 59 58
 | |
|               60:    6(float) Load 15(float)
 | |
|               61:     29(int) Load 31(int)
 | |
|               62:    6(float) ConvertSToF 61
 | |
|               63:    6(float) FAdd 60 62
 | |
|               64:     18(int) Load 39(uint)
 | |
|               65:    6(float) ConvertUToF 64
 | |
|               66:    6(float) FAdd 63 65
 | |
|               67:    6(float) Load 45(min16float)
 | |
|               68:    6(float) FAdd 66 67
 | |
|               69:    6(float) Load 48(min10float)
 | |
|               70:    6(float) FAdd 68 69
 | |
|               72:     33(ptr) AccessChain 22(bool) 36
 | |
|               73:    17(bool) Load 72
 | |
|                               SelectionMerge 75 None
 | |
|                               BranchConditional 73 74 78
 | |
|               74:               Label
 | |
|               76:     29(int)   Load 31(int)
 | |
|               77:    6(float)   ConvertSToF 76
 | |
|                                 Store 71 77
 | |
|                                 Branch 75
 | |
|               78:               Label
 | |
|               79:    6(float)   Load 15(float)
 | |
|                                 Store 71 79
 | |
|                                 Branch 75
 | |
|               75:             Label
 | |
|               80:    6(float) Load 71
 | |
|               81:    6(float) FAdd 70 80
 | |
|               83:    6(float) Load 15(float)
 | |
|                               Store 82(param) 83
 | |
|               84:    6(float) FunctionCall 10(fn(f1;) 82(param)
 | |
|               85:    6(float) FAdd 81 84
 | |
|                               Store 15(float) 85
 | |
|               89:    6(float) Load 15(float)
 | |
|               90:   86(fvec4) CompositeConstruct 89 89 89 89
 | |
|                               Store 88(@entryPointOutput) 90
 | |
|                               Return
 | |
|                               FunctionEnd
 | |
|       10(fn(f1;):    6(float) Function None 8
 | |
|         9(float):      7(ptr) FunctionParameter
 | |
|               11:             Label
 | |
|               12:    6(float) Load 9(float)
 | |
|                               ReturnValue 12
 | |
|                               FunctionEnd
 |