spv.430.vert
Validation failed
// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 66

                              Capability Shader
                              Capability ClipDistance
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Vertex 4  "main" 12 23 34 38 41 42 62 65
                              Source GLSL 450
                              Name 4  "main"
                              Name 10  "gl_PerVertex"
                              MemberName 10(gl_PerVertex) 0  "gl_ClipDistance"
                              Name 12  ""
                              Name 23  "bad"
                              Name 34  "badorder3"
                              Name 38  "f"
                              Name 41  "badorder"
                              Name 42  "badorder2"
                              Name 43  "boundblock"
                              MemberName 43(boundblock) 0  "aoeu"
                              Name 45  "boundInst"
                              Name 46  "anonblock"
                              MemberName 46(anonblock) 0  "aoeu"
                              Name 48  ""
                              Name 52  "sampb1"
                              Name 55  "sampb2"
                              Name 56  "sampb4"
                              Name 59  "S"
                              MemberName 59(S) 0  "a"
                              MemberName 59(S) 1  "b"
                              MemberName 59(S) 2  "c"
                              Name 60  "SS"
                              MemberName 60(SS) 0  "b"
                              MemberName 60(SS) 1  "s"
                              MemberName 60(SS) 2  "c"
                              Name 62  "var"
                              Name 63  "MS"
                              MemberName 63(MS) 0  "f"
                              Name 65  "outMS"
                              MemberDecorate 10(gl_PerVertex) 0 BuiltIn ClipDistance
                              Decorate 10(gl_PerVertex) Block
                              Decorate 23(bad) Location 0
                              Decorate 34(badorder3) Flat
                              Decorate 34(badorder3) Location 1
                              Decorate 38(f) Location 11
                              Decorate 41(badorder) Location 10
                              Decorate 42(badorder2) Location 0
                              Decorate 42(badorder2) Invariant
                              MemberDecorate 43(boundblock) 0 Offset 0
                              Decorate 43(boundblock) Block
                              Decorate 45(boundInst) DescriptorSet 0
                              Decorate 45(boundInst) Binding 3
                              MemberDecorate 46(anonblock) 0 Offset 0
                              Decorate 46(anonblock) Block
                              Decorate 48 DescriptorSet 0
                              Decorate 48 Binding 7
                              Decorate 52(sampb1) DescriptorSet 0
                              Decorate 52(sampb1) Binding 4
                              Decorate 55(sampb2) DescriptorSet 0
                              Decorate 55(sampb2) Binding 5
                              Decorate 56(sampb4) DescriptorSet 0
                              Decorate 56(sampb4) Binding 31
                              MemberDecorate 59(S) 0 RelaxedPrecision
                              Decorate 62(var) Flat
                              Decorate 62(var) Location 0
                              MemberDecorate 63(MS) 0 Location 17
                              Decorate 63(MS) Block
                              Decorate 65(outMS) Location 2
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeInt 32 0
               8:      7(int) Constant 3
               9:             TypeArray 6(float) 8
10(gl_PerVertex):             TypeStruct 9
              11:             TypePointer Output 10(gl_PerVertex)
              12:     11(ptr) Variable Output
              13:             TypeInt 32 1
              14:     13(int) Constant 0
              15:     13(int) Constant 2
              16:    6(float) Constant 1080872141
              17:             TypePointer Output 6(float)
              19:             TypeVector 6(float) 4
              20:      7(int) Constant 10
              21:             TypeArray 19(fvec4) 20
              22:             TypePointer Input 21
         23(bad):     22(ptr) Variable Input
              24:      7(int) Constant 0
              25:             TypePointer Input 6(float)
              28:    6(float) Constant 1082549862
              29:             TypeBool
              33:             TypePointer Output 19(fvec4)
   34(badorder3):     33(ptr) Variable Output
              35:             TypePointer Input 19(fvec4)
           38(f):     25(ptr) Variable Input
    41(badorder):     35(ptr) Variable Input
   42(badorder2):     33(ptr) Variable Output
  43(boundblock):             TypeStruct 13(int)
              44:             TypePointer Uniform 43(boundblock)
   45(boundInst):     44(ptr) Variable Uniform
   46(anonblock):             TypeStruct 13(int)
              47:             TypePointer Uniform 46(anonblock)
              48:     47(ptr) Variable Uniform
              49:             TypeImage 6(float) 2D sampled format:Unknown
              50:             TypeSampledImage 49
              51:             TypePointer UniformConstant 50
      52(sampb1):     51(ptr) Variable UniformConstant
              53:             TypeArray 50 20
              54:             TypePointer UniformConstant 53
      55(sampb2):     54(ptr) Variable UniformConstant
      56(sampb4):     51(ptr) Variable UniformConstant
              57:             TypeVector 7(int) 2
              58:             TypeVector 6(float) 3
           59(S):             TypeStruct 6(float) 57(ivec2) 58(fvec3)
          60(SS):             TypeStruct 19(fvec4) 59(S) 19(fvec4)
              61:             TypePointer Output 60(SS)
         62(var):     61(ptr) Variable Output
          63(MS):             TypeStruct 6(float)
              64:             TypePointer Output 63(MS)
       65(outMS):     64(ptr) Variable Output
         4(main):           2 Function None 3
               5:             Label
              18:     17(ptr) AccessChain 12 14 15
                              Store 18 16
              26:     25(ptr) AccessChain 23(bad) 14 24
              27:    6(float) Load 26
              30:    29(bool) FOrdEqual 27 28
                              SelectionMerge 32 None
                              BranchConditional 30 31 32
              31:               Label
              36:     35(ptr)   AccessChain 23(bad) 14
              37:   19(fvec4)   Load 36
                                Store 34(badorder3) 37
                                Branch 32
              32:             Label
              39:    6(float) Load 38(f)
              40:     17(ptr) AccessChain 12 14 14
                              Store 40 39
                              Return
                              FunctionEnd
