remap.similar_1b.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 87

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