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

                              Capability Shader
                              Capability TextureBlockMatchQCOM
                              Extension  "SPV_QCOM_image_processing"
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 13 41
                              ExecutionMode 4 OriginUpperLeft
                              Source GLSL 450
                              SourceExtension  "GL_QCOM_image_processing"
                              Name 4  "main"
                              Name 9  "tgt_coords"
                              Name 13  "v_texcoord"
                              Name 26  "ref_coords"
                              Name 37  "blockSize"
                              Name 41  "fragColor"
                              Name 44  "tex2D_src1"
                              Name 48  "samp"
                              Name 53  "tex2D_src2"
                              Name 61  "target_samp"
                              Name 64  "ref_samp"
                              Name 71  "tex2DArray_weights"
                              Decorate 13(v_texcoord) Location 0
                              Decorate 41(fragColor) Location 0
                              Decorate 44(tex2D_src1) DescriptorSet 0
                              Decorate 44(tex2D_src1) Binding 1
                              Decorate 48(samp) DescriptorSet 0
                              Decorate 48(samp) Binding 3
                              Decorate 53(tex2D_src2) DescriptorSet 0
                              Decorate 53(tex2D_src2) Binding 2
                              Decorate 44(tex2D_src1) DecorationBlockMatchTextureQCOM
                              Decorate 53(tex2D_src2) DecorationBlockMatchTextureQCOM
                              Decorate 61(target_samp) DescriptorSet 0
                              Decorate 61(target_samp) Binding 4
                              Decorate 64(ref_samp) DescriptorSet 0
                              Decorate 64(ref_samp) Binding 5
                              Decorate 61(target_samp) DecorationBlockMatchTextureQCOM
                              Decorate 64(ref_samp) DecorationBlockMatchTextureQCOM
                              Decorate 71(tex2DArray_weights) DescriptorSet 0
                              Decorate 71(tex2DArray_weights) Binding 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeInt 32 0
               7:             TypeVector 6(int) 2
               8:             TypePointer Function 7(ivec2)
              10:             TypeFloat 32
              11:             TypeVector 10(float) 4
              12:             TypePointer Input 11(fvec4)
  13(v_texcoord):     12(ptr) Variable Input
              14:      6(int) Constant 0
              15:             TypePointer Input 10(float)
              19:             TypePointer Function 6(int)
              21:      6(int) Constant 1
              27:      6(int) Constant 2
              32:      6(int) Constant 3
              38:      6(int) Constant 4
              39:    7(ivec2) ConstantComposite 38 38
              40:             TypePointer Output 11(fvec4)
   41(fragColor):     40(ptr) Variable Output
              42:             TypeImage 10(float) 2D sampled format:Unknown
              43:             TypePointer UniformConstant 42
  44(tex2D_src1):     43(ptr) Variable UniformConstant
              46:             TypeSampler
              47:             TypePointer UniformConstant 46
        48(samp):     47(ptr) Variable UniformConstant
              50:             TypeSampledImage 42
  53(tex2D_src2):     43(ptr) Variable UniformConstant
              60:             TypePointer UniformConstant 50
 61(target_samp):     60(ptr) Variable UniformConstant
    64(ref_samp):     60(ptr) Variable UniformConstant
              69:             TypeImage 10(float) 2D array sampled format:Unknown
              70:             TypePointer UniformConstant 69
71(tex2DArray_weights):     70(ptr) Variable UniformConstant
         4(main):           2 Function None 3
               5:             Label
   9(tgt_coords):      8(ptr) Variable Function
  26(ref_coords):      8(ptr) Variable Function
   37(blockSize):      8(ptr) Variable Function
              16:     15(ptr) AccessChain 13(v_texcoord) 14
              17:   10(float) Load 16
              18:      6(int) ConvertFToU 17
              20:     19(ptr) AccessChain 9(tgt_coords) 14
                              Store 20 18
              22:     15(ptr) AccessChain 13(v_texcoord) 21
              23:   10(float) Load 22
              24:      6(int) ConvertFToU 23
              25:     19(ptr) AccessChain 9(tgt_coords) 14
                              Store 25 24
              28:     15(ptr) AccessChain 13(v_texcoord) 27
              29:   10(float) Load 28
              30:      6(int) ConvertFToU 29
              31:     19(ptr) AccessChain 26(ref_coords) 14
                              Store 31 30
              33:     15(ptr) AccessChain 13(v_texcoord) 32
              34:   10(float) Load 33
              35:      6(int) ConvertFToU 34
              36:     19(ptr) AccessChain 26(ref_coords) 21
                              Store 36 35
                              Store 37(blockSize) 39
              45:          42 Load 44(tex2D_src1)
              49:          46 Load 48(samp)
              51:          50 SampledImage 45 49
              52:    7(ivec2) Load 9(tgt_coords)
              54:          42 Load 53(tex2D_src2)
              55:          46 Load 48(samp)
              56:          50 SampledImage 54 55
              57:    7(ivec2) Load 26(ref_coords)
              58:    7(ivec2) Load 37(blockSize)
              59:   11(fvec4) ImageBlockMatchSADQCOM 51 52 56 57 58
                              Store 41(fragColor) 59
              62:          50 Load 61(target_samp)
              63:    7(ivec2) Load 9(tgt_coords)
              65:          50 Load 64(ref_samp)
              66:    7(ivec2) Load 26(ref_coords)
              67:    7(ivec2) Load 37(blockSize)
              68:   11(fvec4) ImageBlockMatchSADQCOM 62 63 65 66 67
                              Store 41(fragColor) 68
                              Return
                              FunctionEnd
