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 86

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 53 73 75
                              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 44  "param"
                              Name 53  "ini4"
                              Name 73  "outf4"
                              Name 75  "inf"
                              Name 78  "param"
                              Name 82  "param"
                              Decorate 53(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
              40:      6(int) Constant 2
              51:             TypeVector 6(int) 4
              52:             TypePointer Input 51(ivec4)
        53(ini4):     52(ptr) Variable Input
              54:             TypeInt 32 0
              55:     54(int) Constant 1
              56:             TypePointer Input 6(int)
              59:     54(int) Constant 2
              64:     54(int) Constant 0
              71:             TypeVector 8(float) 4
              72:             TypePointer Output 71(fvec4)
       73(outf4):     72(ptr) Variable Output
              74:             TypePointer Input 8(float)
         75(inf):     74(ptr) Variable Input
         4(main):           2 Function None 3
               5:             Label
       78(param):      7(ptr) Variable Function
       82(param):      7(ptr) Variable Function
              76:    8(float) Load 75(inf)
              77:      6(int) ConvertFToS 76
                              Store 78(param) 77
              79:    8(float) FunctionCall 11(Test1(i1;) 78(param)
              80:    8(float) Load 75(inf)
              81:      6(int) ConvertFToS 80
                              Store 82(param) 81
              83:    8(float) FunctionCall 14(Test2(i1;) 82(param)
              84:    8(float) FAdd 79 83
              85:   71(fvec4) CompositeConstruct 84 84 84 84
                              Store 73(outf4) 85
                              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
       44(param):      7(ptr) Variable Function
              39:      6(int) Load 13(bound)
              41:    28(bool) SGreaterThan 39 40
                              SelectionMerge 43 None
                              BranchConditional 41 42 48
              42:               Label
              45:      6(int)   Load 13(bound)
                                Store 44(param) 45
              46:    8(float)   FunctionCall 11(Test1(i1;) 44(param)
                                ReturnValue 46
              48:               Label
              49:      6(int)   Load 13(bound)
              50:      6(int)   IMul 49 40
              57:     56(ptr)   AccessChain 53(ini4) 55
              58:      6(int)   Load 57
              60:     56(ptr)   AccessChain 53(ini4) 59
              61:      6(int)   Load 60
              62:      6(int)   IMul 58 61
              63:      6(int)   IAdd 50 62
              65:     56(ptr)   AccessChain 53(ini4) 64
              66:      6(int)   Load 65
              67:      6(int)   IAdd 63 66
              68:    8(float)   ConvertSToF 67
                                ReturnValue 68
              43:             Label
              70:    8(float) Undef
                              ReturnValue 70
                              FunctionEnd
