spv.tpipBoxFilter.frag
// Module Version 10000
// Generated by (magic number): 8000b
// Id's are bound by 43

                              Capability Shader
                              Capability TextureBoxFilterQCOM
                              Extension  "SPV_QCOM_image_processing"
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 15 27
                              ExecutionMode 4 OriginUpperLeft
                              Source GLSL 450
                              SourceExtension  "GL_QCOM_image_processing"
                              Name 4  "main"
                              Name 9  "boxSize"
                              Name 15  "fragColor"
                              Name 18  "tex2D_src1"
                              Name 22  "samp"
                              Name 27  "v_texcoord"
                              Name 33  "tex_samp"
                              Name 41  "tex2DArray_weights"
                              Name 42  "tex2D_src2"
                              Decorate 15(fragColor) Location 0
                              Decorate 18(tex2D_src1) DescriptorSet 0
                              Decorate 18(tex2D_src1) Binding 1
                              Decorate 22(samp) DescriptorSet 0
                              Decorate 22(samp) Binding 3
                              Decorate 27(v_texcoord) Location 0
                              Decorate 33(tex_samp) DescriptorSet 0
                              Decorate 33(tex_samp) Binding 4
                              Decorate 41(tex2DArray_weights) DescriptorSet 0
                              Decorate 41(tex2DArray_weights) Binding 0
                              Decorate 42(tex2D_src2) DescriptorSet 0
                              Decorate 42(tex2D_src2) Binding 2
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 2
               8:             TypePointer Function 7(fvec2)
              10:    6(float) Constant 1075838976
              11:    6(float) Constant 1083179008
              12:    7(fvec2) ConstantComposite 10 11
              13:             TypeVector 6(float) 4
              14:             TypePointer Output 13(fvec4)
   15(fragColor):     14(ptr) Variable Output
              16:             TypeImage 6(float) 2D sampled format:Unknown
              17:             TypePointer UniformConstant 16
  18(tex2D_src1):     17(ptr) Variable UniformConstant
              20:             TypeSampler
              21:             TypePointer UniformConstant 20
        22(samp):     21(ptr) Variable UniformConstant
              24:             TypeSampledImage 16
              26:             TypePointer Input 13(fvec4)
  27(v_texcoord):     26(ptr) Variable Input
              32:             TypePointer UniformConstant 24
    33(tex_samp):     32(ptr) Variable UniformConstant
              39:             TypeImage 6(float) 2D array sampled format:Unknown
              40:             TypePointer UniformConstant 39
41(tex2DArray_weights):     40(ptr) Variable UniformConstant
  42(tex2D_src2):     17(ptr) Variable UniformConstant
         4(main):           2 Function None 3
               5:             Label
      9(boxSize):      8(ptr) Variable Function
                              Store 9(boxSize) 12
              19:          16 Load 18(tex2D_src1)
              23:          20 Load 22(samp)
              25:          24 SampledImage 19 23
              28:   13(fvec4) Load 27(v_texcoord)
              29:    7(fvec2) VectorShuffle 28 28 0 1
              30:    7(fvec2) Load 9(boxSize)
              31:   13(fvec4) ImageBoxFilterQCOM 25 29 30
                              Store 15(fragColor) 31
              34:          24 Load 33(tex_samp)
              35:   13(fvec4) Load 27(v_texcoord)
              36:    7(fvec2) VectorShuffle 35 35 0 1
              37:    7(fvec2) Load 9(boxSize)
              38:   13(fvec4) ImageBoxFilterQCOM 34 36 37
                              Store 15(fragColor) 38
                              Return
                              FunctionEnd
