spv.nonuniform3.frag
// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 32

                              Capability Shader
                              Capability ShaderNonUniformEXT
                              Capability RuntimeDescriptorArrayEXT
                              Extension  "SPV_EXT_descriptor_indexing"
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 9 16
                              ExecutionMode 4 OriginUpperLeft
                              Source GLSL 450
                              SourceExtension  "GL_EXT_nonuniform_qualifier"
                              Name 4  "main"
                              Name 9  "FragColor"
                              Name 13  "uTex"
                              Name 16  "Index"
                              Name 23  "uSamp"
                              Decorate 9(FragColor) Location 0
                              Decorate 13(uTex) DescriptorSet 0
                              Decorate 13(uTex) Binding 0
                              Decorate 16(Index) Flat
                              Decorate 16(Index) Location 0
                              Decorate 23(uSamp) DescriptorSet 1
                              Decorate 23(uSamp) Binding 0
                              Decorate 27 DecorationNonUniformEXT
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
               8:             TypePointer Output 7(fvec4)
    9(FragColor):      8(ptr) Variable Output
              10:             TypeImage 6(float) 2D sampled format:Unknown
              11:             TypeRuntimeArray 10
              12:             TypePointer UniformConstant 11
        13(uTex):     12(ptr) Variable UniformConstant
              14:             TypeInt 32 1
              15:             TypePointer Input 14(int)
       16(Index):     15(ptr) Variable Input
              18:             TypePointer UniformConstant 10
              21:             TypeSampler
              22:             TypePointer UniformConstant 21
       23(uSamp):     22(ptr) Variable UniformConstant
              25:             TypeSampledImage 10
              28:             TypeVector 6(float) 2
              29:    6(float) Constant 1056964608
              30:   28(fvec2) ConstantComposite 29 29
         4(main):           2 Function None 3
               5:             Label
              17:     14(int) Load 16(Index)
              19:     18(ptr) AccessChain 13(uTex) 17
              20:          10 Load 19
              24:          21 Load 23(uSamp)
              26:          25 SampledImage 20 24
              27:          25 CopyObject 26
              31:    7(fvec4) ImageSampleImplicitLod 27 30
                              Store 9(FragColor) 31
                              Return
                              FunctionEnd
