spv.test.frag
Warning, version 400 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 55

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 20 22 37 43 46 49
                              ExecutionMode 4 OriginUpperLeft
                              Source GLSL 400
                              Name 4  "main"
                              Name 8  "blendscale"
                              Name 12  "v"
                              Name 16  "texSampler2D"
                              Name 20  "t"
                              Name 22  "scale"
                              Name 29  "w"
                              Name 33  "texSampler3D"
                              Name 37  "coords"
                              Name 43  "gl_FragColor"
                              Name 46  "u"
                              Name 49  "blend"
                              Decorate 16(texSampler2D) DescriptorSet 0
                              Decorate 33(texSampler3D) DescriptorSet 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypePointer Function 6(float)
               9:    6(float) Constant 1071971828
              10:             TypeVector 6(float) 4
              11:             TypePointer Function 10(fvec4)
              13:             TypeImage 6(float) 2D sampled format:Unknown
              14:             TypeSampledImage 13
              15:             TypePointer UniformConstant 14
16(texSampler2D):     15(ptr) Variable UniformConstant
              18:             TypeVector 6(float) 2
              19:             TypePointer Input 18(fvec2)
           20(t):     19(ptr) Variable Input
       22(scale):     19(ptr) Variable Input
              30:             TypeImage 6(float) 3D sampled format:Unknown
              31:             TypeSampledImage 30
              32:             TypePointer UniformConstant 31
33(texSampler3D):     32(ptr) Variable UniformConstant
              35:             TypeVector 6(float) 3
              36:             TypePointer Input 35(fvec3)
      37(coords):     36(ptr) Variable Input
              42:             TypePointer Output 10(fvec4)
43(gl_FragColor):     42(ptr) Variable Output
              45:             TypePointer Input 10(fvec4)
           46(u):     45(ptr) Variable Input
              48:             TypePointer Input 6(float)
       49(blend):     48(ptr) Variable Input
         4(main):           2 Function None 3
               5:             Label
   8(blendscale):      7(ptr) Variable Function
           12(v):     11(ptr) Variable Function
           29(w):     11(ptr) Variable Function
                              Store 8(blendscale) 9
              17:          14 Load 16(texSampler2D)
              21:   18(fvec2) Load 20(t)
              23:   18(fvec2) Load 22(scale)
              24:   18(fvec2) FAdd 21 23
              25:   18(fvec2) Load 22(scale)
              26:   18(fvec2) FDiv 24 25
              27:   10(fvec4) ImageSampleImplicitLod 17 26
              28:   10(fvec4) VectorShuffle 27 27 3 2 1 0
                              Store 12(v) 28
              34:          31 Load 33(texSampler3D)
              38:   35(fvec3) Load 37(coords)
              39:   10(fvec4) ImageSampleImplicitLod 34 38
              40:   10(fvec4) Load 12(v)
              41:   10(fvec4) FAdd 39 40
                              Store 29(w) 41
              44:   10(fvec4) Load 29(w)
              47:   10(fvec4) Load 46(u)
              50:    6(float) Load 49(blend)
              51:    6(float) Load 8(blendscale)
              52:    6(float) FMul 50 51
              53:   10(fvec4) CompositeConstruct 52 52 52 52
              54:   10(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 44 47 53
                              Store 43(gl_FragColor) 54
                              Return
                              FunctionEnd
