remap.similar_1a.none.frag
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.


Linked fragment stage:


// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 82

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 50 69 71
                              ExecutionMode 4 OriginUpperLeft
                              Source GLSL 450
                              Name 4  "main"
                              Name 11  "Test1(i1;"
                              Name 10  "bound"
                              Name 14  "Test2(i1;"
                              Name 13  "bound"
                              Name 17  "r"
                              Name 19  "x"
                              Name 42  "param"
                              Name 50  "ini4"
                              Name 69  "outf4"
                              Name 71  "inf"
                              Name 74  "param"
                              Name 78  "param"
                              Decorate 50(ini4) Flat
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeInt 32 1
               7:             TypePointer Function 6(int)
               8:             TypeFloat 32
               9:             TypeFunction 8(float) 7(ptr)
              16:             TypePointer Function 8(float)
              18:    8(float) Constant 0
              20:      6(int) Constant 0
              28:             TypeBool
              30:    8(float) Constant 1056964608
              34:      6(int) Constant 1
              38:      6(int) Constant 2
              48:             TypeVector 6(int) 4
              49:             TypePointer Input 48(ivec4)
        50(ini4):     49(ptr) Variable Input
              51:             TypeInt 32 0
              52:     51(int) Constant 1
              53:             TypePointer Input 6(int)
              56:     51(int) Constant 2
              61:     51(int) Constant 0
              67:             TypeVector 8(float) 4
              68:             TypePointer Output 67(fvec4)
       69(outf4):     68(ptr) Variable Output
              70:             TypePointer Input 8(float)
         71(inf):     70(ptr) Variable Input
         4(main):           2 Function None 3
               5:             Label
       74(param):      7(ptr) Variable Function
       78(param):      7(ptr) Variable Function
              72:    8(float) Load 71(inf)
              73:      6(int) ConvertFToS 72
                              Store 74(param) 73
              75:    8(float) FunctionCall 11(Test1(i1;) 74(param)
              76:    8(float) Load 71(inf)
              77:      6(int) ConvertFToS 76
                              Store 78(param) 77
              79:    8(float) FunctionCall 14(Test2(i1;) 78(param)
              80:    8(float) FAdd 75 79
              81:   67(fvec4) CompositeConstruct 80 80 80 80
                              Store 69(outf4) 81
                              Return
                              FunctionEnd
   11(Test1(i1;):    8(float) Function None 9
       10(bound):      7(ptr) FunctionParameter
              12:             Label
           17(r):     16(ptr) Variable Function
           19(x):      7(ptr) Variable Function
                              Store 17(r) 18
                              Store 19(x) 20
                              Branch 21
              21:             Label
                              LoopMerge 23 24 None
                              Branch 25
              25:             Label
              26:      6(int) Load 19(x)
              27:      6(int) Load 10(bound)
              29:    28(bool) SLessThan 26 27
                              BranchConditional 29 22 23
              22:               Label
              31:    8(float)   Load 17(r)
              32:    8(float)   FAdd 31 30
                                Store 17(r) 32
                                Branch 24
              24:               Label
              33:      6(int)   Load 19(x)
              35:      6(int)   IAdd 33 34
                                Store 19(x) 35
                                Branch 21
              23:             Label
              36:    8(float) Load 17(r)
                              ReturnValue 36
                              FunctionEnd
   14(Test2(i1;):    8(float) Function None 9
       13(bound):      7(ptr) FunctionParameter
              15:             Label
       42(param):      7(ptr) Variable Function
              37:      6(int) Load 13(bound)
              39:    28(bool) SGreaterThan 37 38
                              SelectionMerge 41 None
                              BranchConditional 39 40 45
              40:               Label
              43:      6(int)   Load 13(bound)
                                Store 42(param) 43
              44:    8(float)   FunctionCall 11(Test1(i1;) 42(param)
                                ReturnValue 44
              45:               Label
              46:      6(int)   Load 13(bound)
              47:      6(int)   IMul 46 38
              54:     53(ptr)   AccessChain 50(ini4) 52
              55:      6(int)   Load 54
              57:     53(ptr)   AccessChain 50(ini4) 56
              58:      6(int)   Load 57
              59:      6(int)   IMul 55 58
              60:      6(int)   IAdd 47 59
              62:     53(ptr)   AccessChain 50(ini4) 61
              63:      6(int)   Load 62
              64:      6(int)   IAdd 60 63
              65:    8(float)   ConvertSToF 64
                                ReturnValue 65
              41:             Label
              66:    8(float) Undef
                              ReturnValue 66
                              FunctionEnd
