spv.intrinsicsSpirvDecorate.frag
Validation failed
// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 43

                              Capability Shader
                              Extension  "SPV_AMD_shader_explicit_vertex_parameter"
               1:             ExtInstImport  "GLSL.std.450"
              14:             ExtInstImport  "SPV_AMD_shader_explicit_vertex_parameter"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 8 10 18 20 22 25 28 31 34 39
                              ExecutionMode 4 OriginUpperLeft
                              Source GLSL 450
                              SourceExtension  "GL_EXT_spirv_intrinsics"
                              Name 4  "main"
                              Name 8  "floatOut"
                              Name 10  "floatIn"
                              Name 18  "vec2Out"
                              Name 20  "gl_BaryCoordNoPerspAMD"
                              Name 22  "gl_BaryCoordNoPerspCentroidAMD"
                              Name 25  "gl_BaryCoordNoPerspSampleAMD"
                              Name 28  "gl_BaryCoordSmoothAMD"
                              Name 31  "gl_BaryCoordSmoothCentroidAMD"
                              Name 34  "gl_BaryCoordSmoothSampleAMD"
                              Name 39  "gl_BaryCoordPullModelAMD"
                              Decorate 8(floatOut) Location 0
                              Decorate 10(floatIn) Location 0
                              Decorate 10(floatIn) ExplicitInterpAMD
                              Decorate 18(vec2Out) Location 1
                              Decorate 20(gl_BaryCoordNoPerspAMD) Location 0
                              Decorate 20(gl_BaryCoordNoPerspAMD) BuiltIn BaryCoordNoPerspAMD
                              Decorate 22(gl_BaryCoordNoPerspCentroidAMD) Location 1
                              Decorate 22(gl_BaryCoordNoPerspCentroidAMD) BuiltIn BaryCoordNoPerspCentroidAMD
                              Decorate 25(gl_BaryCoordNoPerspSampleAMD) Location 2
                              Decorate 25(gl_BaryCoordNoPerspSampleAMD) BuiltIn BaryCoordNoPerspSampleAMD
                              Decorate 28(gl_BaryCoordSmoothAMD) Location 3
                              Decorate 28(gl_BaryCoordSmoothAMD) BuiltIn BaryCoordSmoothAMD
                              Decorate 31(gl_BaryCoordSmoothCentroidAMD) Location 4
                              Decorate 31(gl_BaryCoordSmoothCentroidAMD) BuiltIn BaryCoordSmoothCentroidAMD
                              Decorate 34(gl_BaryCoordSmoothSampleAMD) Location 5
                              Decorate 34(gl_BaryCoordSmoothSampleAMD) BuiltIn BaryCoordSmoothSampleAMD
                              Decorate 39(gl_BaryCoordPullModelAMD) Location 6
                              Decorate 39(gl_BaryCoordPullModelAMD) BuiltIn BaryCoordPullModelAMD
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypePointer Output 6(float)
     8(floatOut):      7(ptr) Variable Output
               9:             TypePointer Input 6(float)
     10(floatIn):      9(ptr) Variable Input
              12:             TypeInt 32 0
              13:     12(int) Constant 1
              16:             TypeVector 6(float) 2
              17:             TypePointer Output 16(fvec2)
     18(vec2Out):     17(ptr) Variable Output
              19:             TypePointer Input 16(fvec2)
20(gl_BaryCoordNoPerspAMD):     19(ptr) Variable Input
22(gl_BaryCoordNoPerspCentroidAMD):     19(ptr) Variable Input
25(gl_BaryCoordNoPerspSampleAMD):     19(ptr) Variable Input
28(gl_BaryCoordSmoothAMD):     19(ptr) Variable Input
31(gl_BaryCoordSmoothCentroidAMD):     19(ptr) Variable Input
34(gl_BaryCoordSmoothSampleAMD):     19(ptr) Variable Input
              37:             TypeVector 6(float) 3
              38:             TypePointer Input 37(fvec3)
39(gl_BaryCoordPullModelAMD):     38(ptr) Variable Input
         4(main):           2 Function None 3
               5:             Label
              11:    6(float) Load 10(floatIn)
              15:    6(float) ExtInst 14(SPV_AMD_shader_explicit_vertex_parameter) 1(InterpolateAtVertexAMD) 11 13
                              Store 8(floatOut) 15
              21:   16(fvec2) Load 20(gl_BaryCoordNoPerspAMD)
              23:   16(fvec2) Load 22(gl_BaryCoordNoPerspCentroidAMD)
              24:   16(fvec2) FAdd 21 23
              26:   16(fvec2) Load 25(gl_BaryCoordNoPerspSampleAMD)
              27:   16(fvec2) FAdd 24 26
              29:   16(fvec2) Load 28(gl_BaryCoordSmoothAMD)
              30:   16(fvec2) FAdd 27 29
              32:   16(fvec2) Load 31(gl_BaryCoordSmoothCentroidAMD)
              33:   16(fvec2) FAdd 30 32
              35:   16(fvec2) Load 34(gl_BaryCoordSmoothSampleAMD)
              36:   16(fvec2) FAdd 33 35
              40:   37(fvec3) Load 39(gl_BaryCoordPullModelAMD)
              41:   16(fvec2) VectorShuffle 40 40 0 1
              42:   16(fvec2) FAdd 36 41
                              Store 18(vec2Out) 42
                              Return
                              FunctionEnd
