spv.interpOps.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 100

                              Capability Shader
                              Capability InterpolationFunction
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 13 24 33 41 47 72 98
                              ExecutionMode 4 OriginUpperLeft
                              Source GLSL 450
                              Name 4  "main"
                              Name 9  "f4"
                              Name 13  "if1"
                              Name 24  "if2"
                              Name 33  "if3"
                              Name 41  "if4"
                              Name 47  "samp"
                              Name 72  "offset"
                              Name 98  "fragColor"
                              Decorate 47(samp) Flat
                              Decorate 72(offset) Flat
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
               8:             TypePointer Function 7(fvec4)
              10:    6(float) Constant 0
              11:    7(fvec4) ConstantComposite 10 10 10 10
              12:             TypePointer Input 6(float)
         13(if1):     12(ptr) Variable Input
              15:             TypeInt 32 0
              16:     15(int) Constant 0
              17:             TypePointer Function 6(float)
              22:             TypeVector 6(float) 2
              23:             TypePointer Input 22(fvec2)
         24(if2):     23(ptr) Variable Input
              31:             TypeVector 6(float) 3
              32:             TypePointer Input 31(fvec3)
         33(if3):     32(ptr) Variable Input
              40:             TypePointer Input 7(fvec4)
         41(if4):     40(ptr) Variable Input
              45:             TypeInt 32 1
              46:             TypePointer Input 45(int)
        47(samp):     46(ptr) Variable Input
      72(offset):     23(ptr) Variable Input
              97:             TypePointer Output 7(fvec4)
   98(fragColor):     97(ptr) Variable Output
         4(main):           2 Function None 3
               5:             Label
           9(f4):      8(ptr) Variable Function
                              Store 9(f4) 11
              14:    6(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 13(if1)
              18:     17(ptr) AccessChain 9(f4) 16
              19:    6(float) Load 18
              20:    6(float) FAdd 19 14
              21:     17(ptr) AccessChain 9(f4) 16
                              Store 21 20
              25:   22(fvec2) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 24(if2)
              26:    7(fvec4) Load 9(f4)
              27:   22(fvec2) VectorShuffle 26 26 0 1
              28:   22(fvec2) FAdd 27 25
              29:    7(fvec4) Load 9(f4)
              30:    7(fvec4) VectorShuffle 29 28 4 5 2 3
                              Store 9(f4) 30
              34:   31(fvec3) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 33(if3)
              35:    7(fvec4) Load 9(f4)
              36:   31(fvec3) VectorShuffle 35 35 0 1 2
              37:   31(fvec3) FAdd 36 34
              38:    7(fvec4) Load 9(f4)
              39:    7(fvec4) VectorShuffle 38 37 4 5 6 3
                              Store 9(f4) 39
              42:    7(fvec4) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 41(if4)
              43:    7(fvec4) Load 9(f4)
              44:    7(fvec4) FAdd 43 42
                              Store 9(f4) 44
              48:     45(int) Load 47(samp)
              49:    6(float) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 13(if1) 48
              50:     17(ptr) AccessChain 9(f4) 16
              51:    6(float) Load 50
              52:    6(float) FAdd 51 49
              53:     17(ptr) AccessChain 9(f4) 16
                              Store 53 52
              54:     45(int) Load 47(samp)
              55:   22(fvec2) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 24(if2) 54
              56:    7(fvec4) Load 9(f4)
              57:   22(fvec2) VectorShuffle 56 56 0 1
              58:   22(fvec2) FAdd 57 55
              59:    7(fvec4) Load 9(f4)
              60:    7(fvec4) VectorShuffle 59 58 4 5 2 3
                              Store 9(f4) 60
              61:     45(int) Load 47(samp)
              62:   31(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 33(if3) 61
              63:    7(fvec4) Load 9(f4)
              64:   31(fvec3) VectorShuffle 63 63 0 1 2
              65:   31(fvec3) FAdd 64 62
              66:    7(fvec4) Load 9(f4)
              67:    7(fvec4) VectorShuffle 66 65 4 5 6 3
                              Store 9(f4) 67
              68:     45(int) Load 47(samp)
              69:    7(fvec4) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 41(if4) 68
              70:    7(fvec4) Load 9(f4)
              71:    7(fvec4) FAdd 70 69
                              Store 9(f4) 71
              73:   22(fvec2) Load 72(offset)
              74:    6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 13(if1) 73
              75:     17(ptr) AccessChain 9(f4) 16
              76:    6(float) Load 75
              77:    6(float) FAdd 76 74
              78:     17(ptr) AccessChain 9(f4) 16
                              Store 78 77
              79:   22(fvec2) Load 72(offset)
              80:   22(fvec2) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 24(if2) 79
              81:    7(fvec4) Load 9(f4)
              82:   22(fvec2) VectorShuffle 81 81 0 1
              83:   22(fvec2) FAdd 82 80
              84:    7(fvec4) Load 9(f4)
              85:    7(fvec4) VectorShuffle 84 83 4 5 2 3
                              Store 9(f4) 85
              86:   22(fvec2) Load 72(offset)
              87:   31(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 33(if3) 86
              88:    7(fvec4) Load 9(f4)
              89:   31(fvec3) VectorShuffle 88 88 0 1 2
              90:   31(fvec3) FAdd 89 87
              91:    7(fvec4) Load 9(f4)
              92:    7(fvec4) VectorShuffle 91 90 4 5 6 3
                              Store 9(f4) 92
              93:   22(fvec2) Load 72(offset)
              94:    7(fvec4) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 41(if4) 93
              95:    7(fvec4) Load 9(f4)
              96:    7(fvec4) FAdd 95 94
                              Store 9(f4) 96
              99:    7(fvec4) Load 9(f4)
                              Store 98(fragColor) 99
                              Return
                              FunctionEnd
