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
		
			
				
	
	
		
			247 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			247 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
hlsl.basic.geom
 | 
						|
Shader version: 450
 | 
						|
invocations = -1
 | 
						|
max_vertices = 4
 | 
						|
input primitive = triangles
 | 
						|
output primitive = line_strip
 | 
						|
0:? Sequence
 | 
						|
0:16  Function Definition: @main(u1[3];u1[3];struct-PSInput-f1-i11; (temp void)
 | 
						|
0:16    Function Parameters: 
 | 
						|
0:16      'VertexID' (in 3-element array of uint)
 | 
						|
0:16      'test' (in 3-element array of uint)
 | 
						|
0:16      'OutputStream' (out structure{temp float myfloat, temp int something})
 | 
						|
0:?     Sequence
 | 
						|
0:19      move second child to first child (temp float)
 | 
						|
0:19        myfloat: direct index for structure (temp float)
 | 
						|
0:19          'Vert' (temp structure{temp float myfloat, temp int something})
 | 
						|
0:19          Constant:
 | 
						|
0:19            0 (const int)
 | 
						|
0:19        Convert uint to float (temp float)
 | 
						|
0:19          add (temp uint)
 | 
						|
0:19            add (temp uint)
 | 
						|
0:19              direct index (temp uint)
 | 
						|
0:19                'test' (in 3-element array of uint)
 | 
						|
0:19                Constant:
 | 
						|
0:19                  0 (const int)
 | 
						|
0:19              direct index (temp uint)
 | 
						|
0:19                'test' (in 3-element array of uint)
 | 
						|
0:19                Constant:
 | 
						|
0:19                  1 (const int)
 | 
						|
0:19            direct index (temp uint)
 | 
						|
0:19              'test' (in 3-element array of uint)
 | 
						|
0:19              Constant:
 | 
						|
0:19                2 (const int)
 | 
						|
0:20      move second child to first child (temp int)
 | 
						|
0:20        something: direct index for structure (temp int)
 | 
						|
0:20          'Vert' (temp structure{temp float myfloat, temp int something})
 | 
						|
0:20          Constant:
 | 
						|
0:20            1 (const int)
 | 
						|
0:20        Convert uint to int (temp int)
 | 
						|
0:20          direct index (temp uint)
 | 
						|
0:20            'VertexID' (in 3-element array of uint)
 | 
						|
0:20            Constant:
 | 
						|
0:20              0 (const int)
 | 
						|
0:22      Sequence
 | 
						|
0:22        move second child to first child (temp structure{temp float myfloat, temp int something})
 | 
						|
0:22          'OutputStream' (out structure{temp float myfloat, temp int something})
 | 
						|
0:22          'Vert' (temp structure{temp float myfloat, temp int something})
 | 
						|
0:22        EmitVertex (temp void)
 | 
						|
0:23      Sequence
 | 
						|
0:23        move second child to first child (temp structure{temp float myfloat, temp int something})
 | 
						|
0:23          'OutputStream' (out structure{temp float myfloat, temp int something})
 | 
						|
0:23          'Vert' (temp structure{temp float myfloat, temp int something})
 | 
						|
0:23        EmitVertex (temp void)
 | 
						|
0:24      EndPrimitive (temp void)
 | 
						|
0:16  Function Definition: main( (temp void)
 | 
						|
0:16    Function Parameters: 
 | 
						|
0:?     Sequence
 | 
						|
0:16      move second child to first child (temp 3-element array of uint)
 | 
						|
0:?         'VertexID' (temp 3-element array of uint)
 | 
						|
0:?         'VertexID' (layout(location=0 ) in 3-element array of uint)
 | 
						|
0:16      move second child to first child (temp 3-element array of uint)
 | 
						|
0:?         'test' (temp 3-element array of uint)
 | 
						|
0:?         'test' (layout(location=3 ) in 3-element array of uint)
 | 
						|
0:16      Function Call: @main(u1[3];u1[3];struct-PSInput-f1-i11; (temp void)
 | 
						|
0:?         'VertexID' (temp 3-element array of uint)
 | 
						|
0:?         'test' (temp 3-element array of uint)
 | 
						|
0:?         'OutputStream' (temp structure{temp float myfloat, temp int something})
 | 
						|
0:?   Linker Objects
 | 
						|
0:?     'VertexID' (layout(location=0 ) in 3-element array of uint)
 | 
						|
0:?     'test' (layout(location=3 ) in 3-element array of uint)
 | 
						|
 | 
						|
 | 
						|
Linked geometry stage:
 | 
						|
 | 
						|
 | 
						|
Shader version: 450
 | 
						|
invocations = 1
 | 
						|
max_vertices = 4
 | 
						|
input primitive = triangles
 | 
						|
output primitive = line_strip
 | 
						|
0:? Sequence
 | 
						|
0:16  Function Definition: @main(u1[3];u1[3];struct-PSInput-f1-i11; (temp void)
 | 
						|
0:16    Function Parameters: 
 | 
						|
0:16      'VertexID' (in 3-element array of uint)
 | 
						|
0:16      'test' (in 3-element array of uint)
 | 
						|
0:16      'OutputStream' (out structure{temp float myfloat, temp int something})
 | 
						|
0:?     Sequence
 | 
						|
0:19      move second child to first child (temp float)
 | 
						|
0:19        myfloat: direct index for structure (temp float)
 | 
						|
0:19          'Vert' (temp structure{temp float myfloat, temp int something})
 | 
						|
0:19          Constant:
 | 
						|
0:19            0 (const int)
 | 
						|
0:19        Convert uint to float (temp float)
 | 
						|
0:19          add (temp uint)
 | 
						|
0:19            add (temp uint)
 | 
						|
0:19              direct index (temp uint)
 | 
						|
0:19                'test' (in 3-element array of uint)
 | 
						|
0:19                Constant:
 | 
						|
0:19                  0 (const int)
 | 
						|
0:19              direct index (temp uint)
 | 
						|
0:19                'test' (in 3-element array of uint)
 | 
						|
0:19                Constant:
 | 
						|
0:19                  1 (const int)
 | 
						|
0:19            direct index (temp uint)
 | 
						|
0:19              'test' (in 3-element array of uint)
 | 
						|
0:19              Constant:
 | 
						|
0:19                2 (const int)
 | 
						|
0:20      move second child to first child (temp int)
 | 
						|
0:20        something: direct index for structure (temp int)
 | 
						|
0:20          'Vert' (temp structure{temp float myfloat, temp int something})
 | 
						|
0:20          Constant:
 | 
						|
0:20            1 (const int)
 | 
						|
0:20        Convert uint to int (temp int)
 | 
						|
0:20          direct index (temp uint)
 | 
						|
0:20            'VertexID' (in 3-element array of uint)
 | 
						|
0:20            Constant:
 | 
						|
0:20              0 (const int)
 | 
						|
0:22      Sequence
 | 
						|
0:22        move second child to first child (temp structure{temp float myfloat, temp int something})
 | 
						|
0:22          'OutputStream' (out structure{temp float myfloat, temp int something})
 | 
						|
0:22          'Vert' (temp structure{temp float myfloat, temp int something})
 | 
						|
0:22        EmitVertex (temp void)
 | 
						|
0:23      Sequence
 | 
						|
0:23        move second child to first child (temp structure{temp float myfloat, temp int something})
 | 
						|
0:23          'OutputStream' (out structure{temp float myfloat, temp int something})
 | 
						|
0:23          'Vert' (temp structure{temp float myfloat, temp int something})
 | 
						|
0:23        EmitVertex (temp void)
 | 
						|
0:24      EndPrimitive (temp void)
 | 
						|
0:16  Function Definition: main( (temp void)
 | 
						|
0:16    Function Parameters: 
 | 
						|
0:?     Sequence
 | 
						|
0:16      move second child to first child (temp 3-element array of uint)
 | 
						|
0:?         'VertexID' (temp 3-element array of uint)
 | 
						|
0:?         'VertexID' (layout(location=0 ) in 3-element array of uint)
 | 
						|
0:16      move second child to first child (temp 3-element array of uint)
 | 
						|
0:?         'test' (temp 3-element array of uint)
 | 
						|
0:?         'test' (layout(location=3 ) in 3-element array of uint)
 | 
						|
0:16      Function Call: @main(u1[3];u1[3];struct-PSInput-f1-i11; (temp void)
 | 
						|
0:?         'VertexID' (temp 3-element array of uint)
 | 
						|
0:?         'test' (temp 3-element array of uint)
 | 
						|
0:?         'OutputStream' (temp structure{temp float myfloat, temp int something})
 | 
						|
0:?   Linker Objects
 | 
						|
0:?     'VertexID' (layout(location=0 ) in 3-element array of uint)
 | 
						|
0:?     'test' (layout(location=3 ) in 3-element array of uint)
 | 
						|
 | 
						|
// Module Version 10000
 | 
						|
// Generated by (magic number): 80001
 | 
						|
// Id's are bound by 57
 | 
						|
 | 
						|
                              Capability Geometry
 | 
						|
               1:             ExtInstImport  "GLSL.std.450"
 | 
						|
                              MemoryModel Logical GLSL450
 | 
						|
                              EntryPoint Geometry 4  "main" 45 48
 | 
						|
                              ExecutionMode 4 Triangles
 | 
						|
                              ExecutionMode 4 Invocations 1
 | 
						|
                              ExecutionMode 4 OutputLineStrip
 | 
						|
                              ExecutionMode 4 OutputVertices 4
 | 
						|
                              Name 4  "main"
 | 
						|
                              Name 12  "PSInput"
 | 
						|
                              MemberName 12(PSInput) 0  "myfloat"
 | 
						|
                              MemberName 12(PSInput) 1  "something"
 | 
						|
                              Name 18  "@main(u1[3];u1[3];struct-PSInput-f1-i11;"
 | 
						|
                              Name 15  "VertexID"
 | 
						|
                              Name 16  "test"
 | 
						|
                              Name 17  "OutputStream"
 | 
						|
                              Name 20  "Vert"
 | 
						|
                              Name 43  "VertexID"
 | 
						|
                              Name 45  "VertexID"
 | 
						|
                              Name 47  "test"
 | 
						|
                              Name 48  "test"
 | 
						|
                              Name 50  "OutputStream"
 | 
						|
                              Name 51  "param"
 | 
						|
                              Name 53  "param"
 | 
						|
                              Name 55  "param"
 | 
						|
                              Decorate 45(VertexID) Location 0
 | 
						|
                              Decorate 48(test) Location 3
 | 
						|
               2:             TypeVoid
 | 
						|
               3:             TypeFunction 2
 | 
						|
               6:             TypeInt 32 0
 | 
						|
               7:      6(int) Constant 3
 | 
						|
               8:             TypeArray 6(int) 7
 | 
						|
               9:             TypePointer Function 8
 | 
						|
              10:             TypeFloat 32
 | 
						|
              11:             TypeInt 32 1
 | 
						|
     12(PSInput):             TypeStruct 10(float) 11(int)
 | 
						|
              13:             TypePointer Function 12(PSInput)
 | 
						|
              14:             TypeFunction 2 9(ptr) 9(ptr) 13(ptr)
 | 
						|
              21:     11(int) Constant 0
 | 
						|
              22:             TypePointer Function 6(int)
 | 
						|
              25:     11(int) Constant 1
 | 
						|
              29:     11(int) Constant 2
 | 
						|
              34:             TypePointer Function 10(float)
 | 
						|
              39:             TypePointer Function 11(int)
 | 
						|
              44:             TypePointer Input 8
 | 
						|
    45(VertexID):     44(ptr) Variable Input
 | 
						|
        48(test):     44(ptr) Variable Input
 | 
						|
         4(main):           2 Function None 3
 | 
						|
               5:             Label
 | 
						|
    43(VertexID):      9(ptr) Variable Function
 | 
						|
        47(test):      9(ptr) Variable Function
 | 
						|
50(OutputStream):     13(ptr) Variable Function
 | 
						|
       51(param):      9(ptr) Variable Function
 | 
						|
       53(param):      9(ptr) Variable Function
 | 
						|
       55(param):     13(ptr) Variable Function
 | 
						|
              46:           8 Load 45(VertexID)
 | 
						|
                              Store 43(VertexID) 46
 | 
						|
              49:           8 Load 48(test)
 | 
						|
                              Store 47(test) 49
 | 
						|
              52:           8 Load 43(VertexID)
 | 
						|
                              Store 51(param) 52
 | 
						|
              54:           8 Load 47(test)
 | 
						|
                              Store 53(param) 54
 | 
						|
              56:           2 FunctionCall 18(@main(u1[3];u1[3];struct-PSInput-f1-i11;) 51(param) 53(param) 55(param)
 | 
						|
                              Return
 | 
						|
                              FunctionEnd
 | 
						|
18(@main(u1[3];u1[3];struct-PSInput-f1-i11;):           2 Function None 14
 | 
						|
    15(VertexID):      9(ptr) FunctionParameter
 | 
						|
        16(test):      9(ptr) FunctionParameter
 | 
						|
17(OutputStream):     13(ptr) FunctionParameter
 | 
						|
              19:             Label
 | 
						|
        20(Vert):     13(ptr) Variable Function
 | 
						|
              23:     22(ptr) AccessChain 16(test) 21
 | 
						|
              24:      6(int) Load 23
 | 
						|
              26:     22(ptr) AccessChain 16(test) 25
 | 
						|
              27:      6(int) Load 26
 | 
						|
              28:      6(int) IAdd 24 27
 | 
						|
              30:     22(ptr) AccessChain 16(test) 29
 | 
						|
              31:      6(int) Load 30
 | 
						|
              32:      6(int) IAdd 28 31
 | 
						|
              33:   10(float) ConvertUToF 32
 | 
						|
              35:     34(ptr) AccessChain 20(Vert) 21
 | 
						|
                              Store 35 33
 | 
						|
              36:     22(ptr) AccessChain 15(VertexID) 21
 | 
						|
              37:      6(int) Load 36
 | 
						|
              38:     11(int) Bitcast 37
 | 
						|
              40:     39(ptr) AccessChain 20(Vert) 25
 | 
						|
                              Store 40 38
 | 
						|
              41: 12(PSInput) Load 20(Vert)
 | 
						|
                              Store 17(OutputStream) 41
 | 
						|
                              EmitVertex
 | 
						|
              42: 12(PSInput) Load 20(Vert)
 | 
						|
                              Store 17(OutputStream) 42
 | 
						|
                              EmitVertex
 | 
						|
                              EndPrimitive
 | 
						|
                              Return
 | 
						|
                              FunctionEnd
 |