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

// 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
