spv.functionNestedOpaque.vert
Validation failed
// Module Version 10000
// Generated by (magic number): 80008
// Id's are bound by 39

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Vertex 4  "main"
                              Source GLSL 450
                              Name 4  "main"
                              Name 12  "foo(s21;"
                              Name 11  "t"
                              Name 14  "S"
                              MemberName 14(S) 0  "s"
                              Name 18  "barc(struct-S-s211;"
                              Name 17  "p"
                              Name 21  "bar(struct-S-s211;"
                              Name 20  "p"
                              Name 36  "si"
                              Decorate 36(si) DescriptorSet 0
                              Decorate 36(si) Binding 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeImage 6(float) 2D sampled format:Unknown
               8:             TypeSampledImage 7
               9:             TypePointer UniformConstant 8
              10:             TypeFunction 2 9(ptr)
           14(S):             TypeStruct 8
              15:             TypePointer UniformConstant 14(S)
              16:             TypeFunction 2 15(ptr)
              24:             TypeVector 6(float) 2
              25:    6(float) Constant 1056964608
              26:   24(fvec2) ConstantComposite 25 25
              27:             TypeVector 6(float) 4
              28:    6(float) Constant 0
              30:             TypeInt 32 1
              31:     30(int) Constant 0
          36(si):     15(ptr) Variable UniformConstant
         4(main):           2 Function None 3
               5:             Label
              37:           2 FunctionCall 18(barc(struct-S-s211;) 36(si)
              38:           2 FunctionCall 21(bar(struct-S-s211;) 36(si)
                              Return
                              FunctionEnd
    12(foo(s21;):           2 Function None 10
           11(t):      9(ptr) FunctionParameter
              13:             Label
              23:           8 Load 11(t)
              29:   27(fvec4) ImageSampleExplicitLod 23 26 Lod 28
                              Return
                              FunctionEnd
18(barc(struct-S-s211;):           2 Function None 16
           17(p):     15(ptr) FunctionParameter
              19:             Label
              32:      9(ptr) AccessChain 17(p) 31
              33:           2 FunctionCall 12(foo(s21;) 32
                              Return
                              FunctionEnd
21(bar(struct-S-s211;):           2 Function None 16
           20(p):     15(ptr) FunctionParameter
              22:             Label
              34:      9(ptr) AccessChain 20(p) 31
              35:           2 FunctionCall 12(foo(s21;) 34
                              Return
                              FunctionEnd
