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
		
			
				
	
	
		
			335 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			335 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
hlsl.if.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' (in 4-component vector of float)
 | 
						|
0:?     Sequence
 | 
						|
0:3      Test condition and select (temp void)
 | 
						|
0:3        Condition
 | 
						|
0:3        all (temp bool)
 | 
						|
0:3          Equal (temp 4-component vector of bool)
 | 
						|
0:3            'input' (in 4-component vector of float)
 | 
						|
0:3            'input' (in 4-component vector of float)
 | 
						|
0:3        true case
 | 
						|
0:4        Branch: Return with expression
 | 
						|
0:4          'input' (in 4-component vector of float)
 | 
						|
0:6      Test condition and select (temp void)
 | 
						|
0:6        Condition
 | 
						|
0:6        all (temp bool)
 | 
						|
0:6          Equal (temp 4-component vector of bool)
 | 
						|
0:6            'input' (in 4-component vector of float)
 | 
						|
0:6            'input' (in 4-component vector of float)
 | 
						|
0:6        true case
 | 
						|
0:7        Branch: Return with expression
 | 
						|
0:7          'input' (in 4-component vector of float)
 | 
						|
0:6        false case
 | 
						|
0:9        Branch: Return with expression
 | 
						|
0:9          Negate value (temp 4-component vector of float)
 | 
						|
0:9            'input' (in 4-component vector of float)
 | 
						|
0:11      Test condition and select (temp void)
 | 
						|
0:11        Condition
 | 
						|
0:11        all (temp bool)
 | 
						|
0:11          Equal (temp 4-component vector of bool)
 | 
						|
0:11            'input' (in 4-component vector of float)
 | 
						|
0:11            'input' (in 4-component vector of float)
 | 
						|
0:11        true case is null
 | 
						|
0:14      Test condition and select (temp void)
 | 
						|
0:14        Condition
 | 
						|
0:14        all (temp bool)
 | 
						|
0:14          Equal (temp 4-component vector of bool)
 | 
						|
0:14            'input' (in 4-component vector of float)
 | 
						|
0:14            'input' (in 4-component vector of float)
 | 
						|
0:14        true case is null
 | 
						|
0:19      Test condition and select (temp void)
 | 
						|
0:19        Condition
 | 
						|
0:19        all (temp bool)
 | 
						|
0:19          Equal (temp 4-component vector of bool)
 | 
						|
0:19            'input' (in 4-component vector of float)
 | 
						|
0:19            'input' (in 4-component vector of float)
 | 
						|
0:19        true case
 | 
						|
0:?         Sequence
 | 
						|
0:20          Branch: Return with expression
 | 
						|
0:20            'input' (in 4-component vector of float)
 | 
						|
0:23      Test condition and select (temp void)
 | 
						|
0:23        Condition
 | 
						|
0:23        all (temp bool)
 | 
						|
0:23          Equal (temp 4-component vector of bool)
 | 
						|
0:23            'input' (in 4-component vector of float)
 | 
						|
0:23            'input' (in 4-component vector of float)
 | 
						|
0:23        true case
 | 
						|
0:?         Sequence
 | 
						|
0:24          Branch: Return with expression
 | 
						|
0:24            'input' (in 4-component vector of float)
 | 
						|
0:23        false case
 | 
						|
0:?         Sequence
 | 
						|
0:26          Branch: Return with expression
 | 
						|
0:26            Negate value (temp 4-component vector of float)
 | 
						|
0:26              'input' (in 4-component vector of float)
 | 
						|
0:30      Test condition and select (temp void)
 | 
						|
0:30        Condition
 | 
						|
0:30        move second child to first child (temp float)
 | 
						|
0:30          'ii' (temp float)
 | 
						|
0:30          direct index (temp float)
 | 
						|
0:30            'input' (in 4-component vector of float)
 | 
						|
0:30            Constant:
 | 
						|
0:30              2 (const int)
 | 
						|
0:30        true case
 | 
						|
0:31        Pre-Increment (temp float)
 | 
						|
0:31          'ii' (temp float)
 | 
						|
0:32      Pre-Increment (temp int)
 | 
						|
0:32        'ii' (temp int)
 | 
						|
0:2  Function Definition: PixelShaderFunction( (temp void)
 | 
						|
0:2    Function Parameters: 
 | 
						|
0:?     Sequence
 | 
						|
0:2      move second child to first child (temp 4-component vector of float)
 | 
						|
0:?         'input' (temp 4-component vector of float)
 | 
						|
0:?         'input' (layout(location=0 ) in 4-component vector of float)
 | 
						|
0:2      move second child to first child (temp 4-component vector of float)
 | 
						|
0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 | 
						|
0:2        Function Call: @PixelShaderFunction(vf4; (temp 4-component vector of float)
 | 
						|
0:?           'input' (temp 4-component vector of float)
 | 
						|
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' (in 4-component vector of float)
 | 
						|
0:?     Sequence
 | 
						|
0:3      Test condition and select (temp void)
 | 
						|
0:3        Condition
 | 
						|
0:3        all (temp bool)
 | 
						|
0:3          Equal (temp 4-component vector of bool)
 | 
						|
0:3            'input' (in 4-component vector of float)
 | 
						|
0:3            'input' (in 4-component vector of float)
 | 
						|
0:3        true case
 | 
						|
0:4        Branch: Return with expression
 | 
						|
0:4          'input' (in 4-component vector of float)
 | 
						|
0:6      Test condition and select (temp void)
 | 
						|
0:6        Condition
 | 
						|
0:6        all (temp bool)
 | 
						|
0:6          Equal (temp 4-component vector of bool)
 | 
						|
0:6            'input' (in 4-component vector of float)
 | 
						|
0:6            'input' (in 4-component vector of float)
 | 
						|
0:6        true case
 | 
						|
0:7        Branch: Return with expression
 | 
						|
0:7          'input' (in 4-component vector of float)
 | 
						|
0:6        false case
 | 
						|
0:9        Branch: Return with expression
 | 
						|
0:9          Negate value (temp 4-component vector of float)
 | 
						|
0:9            'input' (in 4-component vector of float)
 | 
						|
0:11      Test condition and select (temp void)
 | 
						|
0:11        Condition
 | 
						|
0:11        all (temp bool)
 | 
						|
0:11          Equal (temp 4-component vector of bool)
 | 
						|
0:11            'input' (in 4-component vector of float)
 | 
						|
0:11            'input' (in 4-component vector of float)
 | 
						|
0:11        true case is null
 | 
						|
0:14      Test condition and select (temp void)
 | 
						|
0:14        Condition
 | 
						|
0:14        all (temp bool)
 | 
						|
0:14          Equal (temp 4-component vector of bool)
 | 
						|
0:14            'input' (in 4-component vector of float)
 | 
						|
0:14            'input' (in 4-component vector of float)
 | 
						|
0:14        true case is null
 | 
						|
0:19      Test condition and select (temp void)
 | 
						|
0:19        Condition
 | 
						|
0:19        all (temp bool)
 | 
						|
0:19          Equal (temp 4-component vector of bool)
 | 
						|
0:19            'input' (in 4-component vector of float)
 | 
						|
0:19            'input' (in 4-component vector of float)
 | 
						|
0:19        true case
 | 
						|
0:?         Sequence
 | 
						|
0:20          Branch: Return with expression
 | 
						|
0:20            'input' (in 4-component vector of float)
 | 
						|
0:23      Test condition and select (temp void)
 | 
						|
0:23        Condition
 | 
						|
0:23        all (temp bool)
 | 
						|
0:23          Equal (temp 4-component vector of bool)
 | 
						|
0:23            'input' (in 4-component vector of float)
 | 
						|
0:23            'input' (in 4-component vector of float)
 | 
						|
0:23        true case
 | 
						|
0:?         Sequence
 | 
						|
0:24          Branch: Return with expression
 | 
						|
0:24            'input' (in 4-component vector of float)
 | 
						|
0:23        false case
 | 
						|
0:?         Sequence
 | 
						|
0:26          Branch: Return with expression
 | 
						|
0:26            Negate value (temp 4-component vector of float)
 | 
						|
0:26              'input' (in 4-component vector of float)
 | 
						|
0:30      Test condition and select (temp void)
 | 
						|
0:30        Condition
 | 
						|
0:30        move second child to first child (temp float)
 | 
						|
0:30          'ii' (temp float)
 | 
						|
0:30          direct index (temp float)
 | 
						|
0:30            'input' (in 4-component vector of float)
 | 
						|
0:30            Constant:
 | 
						|
0:30              2 (const int)
 | 
						|
0:30        true case
 | 
						|
0:31        Pre-Increment (temp float)
 | 
						|
0:31          'ii' (temp float)
 | 
						|
0:32      Pre-Increment (temp int)
 | 
						|
0:32        'ii' (temp int)
 | 
						|
0:2  Function Definition: PixelShaderFunction( (temp void)
 | 
						|
0:2    Function Parameters: 
 | 
						|
0:?     Sequence
 | 
						|
0:2      move second child to first child (temp 4-component vector of float)
 | 
						|
0:?         'input' (temp 4-component vector of float)
 | 
						|
0:?         'input' (layout(location=0 ) in 4-component vector of float)
 | 
						|
0:2      move second child to first child (temp 4-component vector of float)
 | 
						|
0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 | 
						|
0:2        Function Call: @PixelShaderFunction(vf4; (temp 4-component vector of float)
 | 
						|
0:?           'input' (temp 4-component vector of float)
 | 
						|
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 94
 | 
						|
 | 
						|
                              Capability Shader
 | 
						|
               1:             ExtInstImport  "GLSL.std.450"
 | 
						|
                              MemoryModel Logical GLSL450
 | 
						|
                              EntryPoint Fragment 4  "PixelShaderFunction" 87 90
 | 
						|
                              ExecutionMode 4 OriginUpperLeft
 | 
						|
                              Name 4  "PixelShaderFunction"
 | 
						|
                              Name 11  "@PixelShaderFunction(vf4;"
 | 
						|
                              Name 10  "input"
 | 
						|
                              Name 68  "ii"
 | 
						|
                              Name 80  "ii"
 | 
						|
                              Name 85  "input"
 | 
						|
                              Name 87  "input"
 | 
						|
                              Name 90  "@entryPointOutput"
 | 
						|
                              Name 91  "param"
 | 
						|
                              Decorate 87(input) Location 0
 | 
						|
                              Decorate 90(@entryPointOutput) Location 0
 | 
						|
               2:             TypeVoid
 | 
						|
               3:             TypeFunction 2
 | 
						|
               6:             TypeFloat 32
 | 
						|
               7:             TypeVector 6(float) 4
 | 
						|
               8:             TypePointer Function 7(fvec4)
 | 
						|
               9:             TypeFunction 7(fvec4) 8(ptr)
 | 
						|
              15:             TypeBool
 | 
						|
              16:             TypeVector 15(bool) 4
 | 
						|
              67:             TypePointer Function 6(float)
 | 
						|
              69:             TypeInt 32 0
 | 
						|
              70:     69(int) Constant 2
 | 
						|
              76:    6(float) Constant 1065353216
 | 
						|
              78:             TypeInt 32 1
 | 
						|
              79:             TypePointer Function 78(int)
 | 
						|
              82:     78(int) Constant 1
 | 
						|
              86:             TypePointer Input 7(fvec4)
 | 
						|
       87(input):     86(ptr) Variable Input
 | 
						|
              89:             TypePointer Output 7(fvec4)
 | 
						|
90(@entryPointOutput):     89(ptr) Variable Output
 | 
						|
4(PixelShaderFunction):           2 Function None 3
 | 
						|
               5:             Label
 | 
						|
       85(input):      8(ptr) Variable Function
 | 
						|
       91(param):      8(ptr) Variable Function
 | 
						|
              88:    7(fvec4) Load 87(input)
 | 
						|
                              Store 85(input) 88
 | 
						|
              92:    7(fvec4) Load 85(input)
 | 
						|
                              Store 91(param) 92
 | 
						|
              93:    7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 91(param)
 | 
						|
                              Store 90(@entryPointOutput) 93
 | 
						|
                              Return
 | 
						|
                              FunctionEnd
 | 
						|
11(@PixelShaderFunction(vf4;):    7(fvec4) Function None 9
 | 
						|
       10(input):      8(ptr) FunctionParameter
 | 
						|
              12:             Label
 | 
						|
          68(ii):     67(ptr) Variable Function
 | 
						|
          80(ii):     79(ptr) Variable Function
 | 
						|
              13:    7(fvec4) Load 10(input)
 | 
						|
              14:    7(fvec4) Load 10(input)
 | 
						|
              17:   16(bvec4) FOrdEqual 13 14
 | 
						|
              18:    15(bool) All 17
 | 
						|
                              SelectionMerge 20 None
 | 
						|
                              BranchConditional 18 19 20
 | 
						|
              19:               Label
 | 
						|
              21:    7(fvec4)   Load 10(input)
 | 
						|
                                ReturnValue 21
 | 
						|
              20:             Label
 | 
						|
              23:    7(fvec4) Load 10(input)
 | 
						|
              24:    7(fvec4) Load 10(input)
 | 
						|
              25:   16(bvec4) FOrdEqual 23 24
 | 
						|
              26:    15(bool) All 25
 | 
						|
                              SelectionMerge 28 None
 | 
						|
                              BranchConditional 26 27 31
 | 
						|
              27:               Label
 | 
						|
              29:    7(fvec4)   Load 10(input)
 | 
						|
                                ReturnValue 29
 | 
						|
              31:               Label
 | 
						|
              32:    7(fvec4)   Load 10(input)
 | 
						|
              33:    7(fvec4)   FNegate 32
 | 
						|
                                ReturnValue 33
 | 
						|
              28:             Label
 | 
						|
              35:    7(fvec4) Load 10(input)
 | 
						|
              36:    7(fvec4) Load 10(input)
 | 
						|
              37:   16(bvec4) FOrdEqual 35 36
 | 
						|
              38:    15(bool) All 37
 | 
						|
                              SelectionMerge 40 None
 | 
						|
                              BranchConditional 38 39 40
 | 
						|
              39:               Label
 | 
						|
                                Branch 40
 | 
						|
              40:             Label
 | 
						|
              41:    7(fvec4) Load 10(input)
 | 
						|
              42:    7(fvec4) Load 10(input)
 | 
						|
              43:   16(bvec4) FOrdEqual 41 42
 | 
						|
              44:    15(bool) All 43
 | 
						|
                              SelectionMerge 46 None
 | 
						|
                              BranchConditional 44 45 46
 | 
						|
              45:               Label
 | 
						|
                                Branch 46
 | 
						|
              46:             Label
 | 
						|
              47:    7(fvec4) Load 10(input)
 | 
						|
              48:    7(fvec4) Load 10(input)
 | 
						|
              49:   16(bvec4) FOrdEqual 47 48
 | 
						|
              50:    15(bool) All 49
 | 
						|
                              SelectionMerge 52 None
 | 
						|
                              BranchConditional 50 51 52
 | 
						|
              51:               Label
 | 
						|
              53:    7(fvec4)   Load 10(input)
 | 
						|
                                ReturnValue 53
 | 
						|
              52:             Label
 | 
						|
              55:    7(fvec4) Load 10(input)
 | 
						|
              56:    7(fvec4) Load 10(input)
 | 
						|
              57:   16(bvec4) FOrdEqual 55 56
 | 
						|
              58:    15(bool) All 57
 | 
						|
                              SelectionMerge 60 None
 | 
						|
                              BranchConditional 58 59 63
 | 
						|
              59:               Label
 | 
						|
              61:    7(fvec4)   Load 10(input)
 | 
						|
                                ReturnValue 61
 | 
						|
              63:               Label
 | 
						|
              64:    7(fvec4)   Load 10(input)
 | 
						|
              65:    7(fvec4)   FNegate 64
 | 
						|
                                ReturnValue 65
 | 
						|
              60:             Label
 | 
						|
              71:     67(ptr) AccessChain 10(input) 70
 | 
						|
              72:    6(float) Load 71
 | 
						|
                              Store 68(ii) 72
 | 
						|
                              SelectionMerge 74 None
 | 
						|
                              BranchConditional 72 73 74
 | 
						|
              73:               Label
 | 
						|
              75:    6(float)   Load 68(ii)
 | 
						|
              77:    6(float)   FAdd 75 76
 | 
						|
                                Store 68(ii) 77
 | 
						|
                                Branch 74
 | 
						|
              74:             Label
 | 
						|
              81:     78(int) Load 80(ii)
 | 
						|
              83:     78(int) IAdd 81 82
 | 
						|
                              Store 80(ii) 83
 | 
						|
              84:    7(fvec4) Undef
 | 
						|
                              ReturnValue 84
 | 
						|
                              FunctionEnd
 |