This needs some render testing, but is destined to be part of master. This also leads to a variety of other simplifications. - IO are global symbols, so only need one list of linkage nodes (deferred) - no longer need parse-context-wide 'inEntryPoint' state, entry-point is localized - several parts of splitting/flattening are now localized
		
			
				
	
	
		
			234 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			234 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
hlsl.logical.binary.frag
 | 
						|
Shader version: 450
 | 
						|
gl_FragCoord origin is upper left
 | 
						|
0:? Sequence
 | 
						|
0:12  Function Definition: @main( (temp structure{temp 4-component vector of float Color})
 | 
						|
0:12    Function Parameters: 
 | 
						|
0:?     Sequence
 | 
						|
0:13      Test condition and select (temp void)
 | 
						|
0:13        Condition
 | 
						|
0:13        logical-and (temp bool)
 | 
						|
0:13          Convert int to bool (temp bool)
 | 
						|
0:13            ival: direct index for structure (layout(offset=0 ) uniform int)
 | 
						|
0:13              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
 | 
						|
0:13              Constant:
 | 
						|
0:13                0 (const uint)
 | 
						|
0:13          Convert int to bool (temp bool)
 | 
						|
0:13            Convert float to int (temp int)
 | 
						|
0:13              fval: direct index for structure (layout(offset=32 ) uniform float)
 | 
						|
0:13                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
 | 
						|
0:13                Constant:
 | 
						|
0:13                  2 (const uint)
 | 
						|
0:13        true case is null
 | 
						|
0:14      Test condition and select (temp void)
 | 
						|
0:14        Condition
 | 
						|
0:14        logical-or (temp bool)
 | 
						|
0:14          Convert int to bool (temp bool)
 | 
						|
0:14            ival: direct index for structure (layout(offset=0 ) uniform int)
 | 
						|
0:14              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
 | 
						|
0:14              Constant:
 | 
						|
0:14                0 (const uint)
 | 
						|
0:14          Convert int to bool (temp bool)
 | 
						|
0:14            Convert float to int (temp int)
 | 
						|
0:14              fval: direct index for structure (layout(offset=32 ) uniform float)
 | 
						|
0:14                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
 | 
						|
0:14                Constant:
 | 
						|
0:14                  2 (const uint)
 | 
						|
0:14        true case is null
 | 
						|
0:17      move second child to first child (temp 4-component vector of float)
 | 
						|
0:17        Color: direct index for structure (temp 4-component vector of float)
 | 
						|
0:17          'psout' (temp structure{temp 4-component vector of float Color})
 | 
						|
0:17          Constant:
 | 
						|
0:17            0 (const int)
 | 
						|
0:17        Constant:
 | 
						|
0:17          1.000000
 | 
						|
0:17          1.000000
 | 
						|
0:17          1.000000
 | 
						|
0:17          1.000000
 | 
						|
0:18      Branch: Return with expression
 | 
						|
0:18        'psout' (temp structure{temp 4-component vector of float Color})
 | 
						|
0:12  Function Definition: main( (temp void)
 | 
						|
0:12    Function Parameters: 
 | 
						|
0:?     Sequence
 | 
						|
0:12      Sequence
 | 
						|
0:12        move second child to first child (temp 4-component vector of float)
 | 
						|
0:?           'Color' (layout(location=0 ) out 4-component vector of float)
 | 
						|
0:12          Color: direct index for structure (temp 4-component vector of float)
 | 
						|
0:12            Function Call: @main( (temp structure{temp 4-component vector of float Color})
 | 
						|
0:12            Constant:
 | 
						|
0:12              0 (const int)
 | 
						|
0:?   Linker Objects
 | 
						|
0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 | 
						|
0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
 | 
						|
 | 
						|
 | 
						|
Linked fragment stage:
 | 
						|
 | 
						|
 | 
						|
Shader version: 450
 | 
						|
gl_FragCoord origin is upper left
 | 
						|
0:? Sequence
 | 
						|
0:12  Function Definition: @main( (temp structure{temp 4-component vector of float Color})
 | 
						|
0:12    Function Parameters: 
 | 
						|
0:?     Sequence
 | 
						|
0:13      Test condition and select (temp void)
 | 
						|
0:13        Condition
 | 
						|
0:13        logical-and (temp bool)
 | 
						|
0:13          Convert int to bool (temp bool)
 | 
						|
0:13            ival: direct index for structure (layout(offset=0 ) uniform int)
 | 
						|
0:13              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
 | 
						|
0:13              Constant:
 | 
						|
0:13                0 (const uint)
 | 
						|
0:13          Convert int to bool (temp bool)
 | 
						|
0:13            Convert float to int (temp int)
 | 
						|
0:13              fval: direct index for structure (layout(offset=32 ) uniform float)
 | 
						|
0:13                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
 | 
						|
0:13                Constant:
 | 
						|
0:13                  2 (const uint)
 | 
						|
0:13        true case is null
 | 
						|
0:14      Test condition and select (temp void)
 | 
						|
0:14        Condition
 | 
						|
0:14        logical-or (temp bool)
 | 
						|
0:14          Convert int to bool (temp bool)
 | 
						|
0:14            ival: direct index for structure (layout(offset=0 ) uniform int)
 | 
						|
0:14              'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
 | 
						|
0:14              Constant:
 | 
						|
0:14                0 (const uint)
 | 
						|
0:14          Convert int to bool (temp bool)
 | 
						|
0:14            Convert float to int (temp int)
 | 
						|
0:14              fval: direct index for structure (layout(offset=32 ) uniform float)
 | 
						|
0:14                'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
 | 
						|
0:14                Constant:
 | 
						|
0:14                  2 (const uint)
 | 
						|
0:14        true case is null
 | 
						|
0:17      move second child to first child (temp 4-component vector of float)
 | 
						|
0:17        Color: direct index for structure (temp 4-component vector of float)
 | 
						|
0:17          'psout' (temp structure{temp 4-component vector of float Color})
 | 
						|
0:17          Constant:
 | 
						|
0:17            0 (const int)
 | 
						|
0:17        Constant:
 | 
						|
0:17          1.000000
 | 
						|
0:17          1.000000
 | 
						|
0:17          1.000000
 | 
						|
0:17          1.000000
 | 
						|
0:18      Branch: Return with expression
 | 
						|
0:18        'psout' (temp structure{temp 4-component vector of float Color})
 | 
						|
0:12  Function Definition: main( (temp void)
 | 
						|
0:12    Function Parameters: 
 | 
						|
0:?     Sequence
 | 
						|
0:12      Sequence
 | 
						|
0:12        move second child to first child (temp 4-component vector of float)
 | 
						|
0:?           'Color' (layout(location=0 ) out 4-component vector of float)
 | 
						|
0:12          Color: direct index for structure (temp 4-component vector of float)
 | 
						|
0:12            Function Call: @main( (temp structure{temp 4-component vector of float Color})
 | 
						|
0:12            Constant:
 | 
						|
0:12              0 (const int)
 | 
						|
0:?   Linker Objects
 | 
						|
0:?     'Color' (layout(location=0 ) out 4-component vector of float)
 | 
						|
0:?     'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
 | 
						|
 | 
						|
// Module Version 10000
 | 
						|
// Generated by (magic number): 80001
 | 
						|
// Id's are bound by 62
 | 
						|
 | 
						|
                              Capability Shader
 | 
						|
               1:             ExtInstImport  "GLSL.std.450"
 | 
						|
                              MemoryModel Logical GLSL450
 | 
						|
                              EntryPoint Fragment 4  "main" 59
 | 
						|
                              ExecutionMode 4 OriginUpperLeft
 | 
						|
                              Name 4  "main"
 | 
						|
                              Name 8  "PS_OUTPUT"
 | 
						|
                              MemberName 8(PS_OUTPUT) 0  "Color"
 | 
						|
                              Name 10  "@main("
 | 
						|
                              Name 15  "$Global"
 | 
						|
                              MemberName 15($Global) 0  "ival"
 | 
						|
                              MemberName 15($Global) 1  "ival4"
 | 
						|
                              MemberName 15($Global) 2  "fval"
 | 
						|
                              MemberName 15($Global) 3  "fval4"
 | 
						|
                              Name 17  ""
 | 
						|
                              Name 50  "psout"
 | 
						|
                              Name 59  "Color"
 | 
						|
                              MemberDecorate 15($Global) 0 Offset 0
 | 
						|
                              MemberDecorate 15($Global) 1 Offset 16
 | 
						|
                              MemberDecorate 15($Global) 2 Offset 32
 | 
						|
                              MemberDecorate 15($Global) 3 Offset 48
 | 
						|
                              Decorate 15($Global) Block
 | 
						|
                              Decorate 17 DescriptorSet 0
 | 
						|
                              Decorate 59(Color) Location 0
 | 
						|
               2:             TypeVoid
 | 
						|
               3:             TypeFunction 2
 | 
						|
               6:             TypeFloat 32
 | 
						|
               7:             TypeVector 6(float) 4
 | 
						|
    8(PS_OUTPUT):             TypeStruct 7(fvec4)
 | 
						|
               9:             TypeFunction 8(PS_OUTPUT)
 | 
						|
              12:             TypeBool
 | 
						|
              13:             TypeInt 32 1
 | 
						|
              14:             TypeVector 13(int) 4
 | 
						|
     15($Global):             TypeStruct 13(int) 14(ivec4) 6(float) 7(fvec4)
 | 
						|
              16:             TypePointer Uniform 15($Global)
 | 
						|
              17:     16(ptr) Variable Uniform
 | 
						|
              18:     13(int) Constant 0
 | 
						|
              19:             TypePointer Uniform 13(int)
 | 
						|
              22:             TypeInt 32 0
 | 
						|
              23:     22(int) Constant 0
 | 
						|
              27:     13(int) Constant 2
 | 
						|
              28:             TypePointer Uniform 6(float)
 | 
						|
              49:             TypePointer Function 8(PS_OUTPUT)
 | 
						|
              51:    6(float) Constant 1065353216
 | 
						|
              52:    7(fvec4) ConstantComposite 51 51 51 51
 | 
						|
              53:             TypePointer Function 7(fvec4)
 | 
						|
              58:             TypePointer Output 7(fvec4)
 | 
						|
       59(Color):     58(ptr) Variable Output
 | 
						|
         4(main):           2 Function None 3
 | 
						|
               5:             Label
 | 
						|
              60:8(PS_OUTPUT) FunctionCall 10(@main()
 | 
						|
              61:    7(fvec4) CompositeExtract 60 0
 | 
						|
                              Store 59(Color) 61
 | 
						|
                              Return
 | 
						|
                              FunctionEnd
 | 
						|
      10(@main():8(PS_OUTPUT) Function None 9
 | 
						|
              11:             Label
 | 
						|
       50(psout):     49(ptr) Variable Function
 | 
						|
              20:     19(ptr) AccessChain 17 18
 | 
						|
              21:     13(int) Load 20
 | 
						|
              24:    12(bool) INotEqual 21 23
 | 
						|
                              SelectionMerge 26 None
 | 
						|
                              BranchConditional 24 25 26
 | 
						|
              25:               Label
 | 
						|
              29:     28(ptr)   AccessChain 17 27
 | 
						|
              30:    6(float)   Load 29
 | 
						|
              31:     13(int)   ConvertFToS 30
 | 
						|
              32:    12(bool)   INotEqual 31 23
 | 
						|
                                Branch 26
 | 
						|
              26:             Label
 | 
						|
              33:    12(bool) Phi 24 11 32 25
 | 
						|
                              SelectionMerge 35 None
 | 
						|
                              BranchConditional 33 34 35
 | 
						|
              34:               Label
 | 
						|
                                Branch 35
 | 
						|
              35:             Label
 | 
						|
              36:     19(ptr) AccessChain 17 18
 | 
						|
              37:     13(int) Load 36
 | 
						|
              38:    12(bool) INotEqual 37 23
 | 
						|
              39:    12(bool) LogicalNot 38
 | 
						|
                              SelectionMerge 41 None
 | 
						|
                              BranchConditional 39 40 41
 | 
						|
              40:               Label
 | 
						|
              42:     28(ptr)   AccessChain 17 27
 | 
						|
              43:    6(float)   Load 42
 | 
						|
              44:     13(int)   ConvertFToS 43
 | 
						|
              45:    12(bool)   INotEqual 44 23
 | 
						|
                                Branch 41
 | 
						|
              41:             Label
 | 
						|
              46:    12(bool) Phi 38 35 45 40
 | 
						|
                              SelectionMerge 48 None
 | 
						|
                              BranchConditional 46 47 48
 | 
						|
              47:               Label
 | 
						|
                                Branch 48
 | 
						|
              48:             Label
 | 
						|
              54:     53(ptr) AccessChain 50(psout) 18
 | 
						|
                              Store 54 52
 | 
						|
              55:8(PS_OUTPUT) Load 50(psout)
 | 
						|
                              ReturnValue 55
 | 
						|
                              FunctionEnd
 |