spv.pp.line.frag
WARNING: spv.pp.line.frag:7: varying deprecated in version 130; may be removed in future release
WARNING: spv.pp.line.frag:8: varying deprecated in version 130; may be removed in future release

// Module Version 10000
// Generated by (magic number): 8000b
// Id's are bound by 84

                              Capability Shader
                              Capability Sampled1D
               2:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 5  "main" 60 72 75 78
                              ExecutionMode 5 OriginUpperLeft
               1:             String  "spv.pp.line.frag"
              13:             String  "header.h"
                              Source GLSL 140 1  "// OpModuleProcessed auto-map-locations
// OpModuleProcessed auto-map-bindings
// OpModuleProcessed client vulkan100
// OpModuleProcessed target-env vulkan1.0
// OpModuleProcessed keep-uncalled
// OpModuleProcessed entry-point main
#line 1
#version 140
#extension GL_GOOGLE_cpp_style_line_directive : require

uniform sampler1D       texSampler1D;
uniform sampler2D       texSampler2D;

varying float blend;
varying vec4 u;

in  vec2 coords2D;

#line 0 "header.h"
float myAbs(float x) {
    if (x > 0) {
        return x;
    }
    else {
        return -x;
    }
}

#line 22 "spv.pp.line.frag"
void main()
{
    float blendscale = myAbs(1.789);
    float bias       = 2.0;
    float coords1D   = 1.789;
    vec4  color      = vec4(0.0, 0.0, 0.0, 0.0);
#line 53
    color += texture    (texSampler1D, coords1D);
    color += texture    (texSampler1D, coords1D, bias);
#line 102
    color += texture        (texSampler2D, coords2D);
    color += texture        (texSampler2D, coords2D, bias);

    gl_FragColor = mix(color, u, blend * blendscale);
}
"
                              SourceExtension  "GL_GOOGLE_cpp_style_line_directive"
                              Name 5  "main"
                              Name 11  "myAbs(f1;"
                              Name 10  "x"
                              Name 27  "blendscale"
                              Name 29  "param"
                              Name 31  "bias"
                              Name 33  "coords1D"
                              Name 36  "color"
                              Name 41  "texSampler1D"
                              Name 56  "texSampler2D"
                              Name 60  "coords2D"
                              Name 72  "gl_FragColor"
                              Name 75  "u"
                              Name 78  "blend"
                              Decorate 41(texSampler1D) DescriptorSet 0
                              Decorate 41(texSampler1D) Binding 0
                              Decorate 56(texSampler2D) DescriptorSet 0
                              Decorate 56(texSampler2D) Binding 1
                              Decorate 60(coords2D) Location 2
                              Decorate 72(gl_FragColor) Location 0
                              Decorate 75(u) Location 1
                              Decorate 78(blend) Location 0
               3:             TypeVoid
               4:             TypeFunction 3
               7:             TypeFloat 32
               8:             TypePointer Function 7(float)
               9:             TypeFunction 7(float) 8(ptr)
              15:    7(float) Constant 0
              16:             TypeBool
              28:    7(float) Constant 1071971828
              32:    7(float) Constant 1073741824
              34:             TypeVector 7(float) 4
              35:             TypePointer Function 34(fvec4)
              37:   34(fvec4) ConstantComposite 15 15 15 15
              38:             TypeImage 7(float) 1D sampled format:Unknown
              39:             TypeSampledImage 38
              40:             TypePointer UniformConstant 39
41(texSampler1D):     40(ptr) Variable UniformConstant
              53:             TypeImage 7(float) 2D sampled format:Unknown
              54:             TypeSampledImage 53
              55:             TypePointer UniformConstant 54
56(texSampler2D):     55(ptr) Variable UniformConstant
              58:             TypeVector 7(float) 2
              59:             TypePointer Input 58(fvec2)
    60(coords2D):     59(ptr) Variable Input
              71:             TypePointer Output 34(fvec4)
72(gl_FragColor):     71(ptr) Variable Output
              74:             TypePointer Input 34(fvec4)
           75(u):     74(ptr) Variable Input
              77:             TypePointer Input 7(float)
       78(blend):     77(ptr) Variable Input
                              Line 1 23 11
         5(main):           3 Function None 4
               6:             Label
  27(blendscale):      8(ptr) Variable Function
       29(param):      8(ptr) Variable Function
        31(bias):      8(ptr) Variable Function
    33(coords1D):      8(ptr) Variable Function
       36(color):     35(ptr) Variable Function
                              Line 1 25 0
                              Store 29(param) 28
              30:    7(float) FunctionCall 11(myAbs(f1;) 29(param)
                              Store 27(blendscale) 30
                              Line 1 26 0
                              Store 31(bias) 32
                              Line 1 27 0
                              Store 33(coords1D) 28
                              Line 1 28 0
                              Store 36(color) 37
                              Line 1 54 0
              42:          39 Load 41(texSampler1D)
              43:    7(float) Load 33(coords1D)
              44:   34(fvec4) ImageSampleImplicitLod 42 43
              45:   34(fvec4) Load 36(color)
              46:   34(fvec4) FAdd 45 44
                              Store 36(color) 46
                              Line 1 55 0
              47:          39 Load 41(texSampler1D)
              48:    7(float) Load 33(coords1D)
              49:    7(float) Load 31(bias)
              50:   34(fvec4) ImageSampleImplicitLod 47 48 Bias 49
              51:   34(fvec4) Load 36(color)
              52:   34(fvec4) FAdd 51 50
                              Store 36(color) 52
                              Line 1 103 0
              57:          54 Load 56(texSampler2D)
              61:   58(fvec2) Load 60(coords2D)
              62:   34(fvec4) ImageSampleImplicitLod 57 61
              63:   34(fvec4) Load 36(color)
              64:   34(fvec4) FAdd 63 62
                              Store 36(color) 64
                              Line 1 104 0
              65:          54 Load 56(texSampler2D)
              66:   58(fvec2) Load 60(coords2D)
              67:    7(float) Load 31(bias)
              68:   34(fvec4) ImageSampleImplicitLod 65 66 Bias 67
              69:   34(fvec4) Load 36(color)
              70:   34(fvec4) FAdd 69 68
                              Store 36(color) 70
                              Line 1 106 0
              73:   34(fvec4) Load 36(color)
              76:   34(fvec4) Load 75(u)
              79:    7(float) Load 78(blend)
              80:    7(float) Load 27(blendscale)
              81:    7(float) FMul 79 80
              82:   34(fvec4) CompositeConstruct 81 81 81 81
              83:   34(fvec4) ExtInst 2(GLSL.std.450) 46(FMix) 73 76 82
                              Store 72(gl_FragColor) 83
                              Return
                              FunctionEnd
                              Line 13 1 20
   11(myAbs(f1;):    7(float) Function None 9
           10(x):      8(ptr) FunctionParameter
              12:             Label
                              Line 13 2 0
              14:    7(float) Load 10(x)
              17:    16(bool) FOrdGreaterThan 14 15
                              SelectionMerge 19 None
                              BranchConditional 17 18 22
              18:               Label
                                Line 13 3 0
              20:    7(float)   Load 10(x)
                                ReturnValue 20
              22:               Label
                                Line 13 6 0
              23:    7(float)   Load 10(x)
              24:    7(float)   FNegate 23
                                ReturnValue 24
              19:             Label
                              Unreachable
                              FunctionEnd
