spv.shaderGroupVote.comp
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.


Linked compute stage:


// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 37

                              Capability Shader
                              Capability Groups
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint GLCompute 4  "main"
                              ExecutionMode 4 LocalSize 4 4 1
                              Source GLSL 450
                              SourceExtension  "GL_ARB_shader_group_vote"
                              Name 4  "main"
                              Name 8  "b1"
                              Name 10  "Buffers"
                              MemberName 10(Buffers) 0  "b"
                              Name 12  ""
                              MemberDecorate 10(Buffers) 0 Offset 0
                              Decorate 10(Buffers) BufferBlock
                              Decorate 12 DescriptorSet 0
                              Decorate 12 Binding 0
                              Decorate 36 BuiltIn WorkgroupSize
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeBool
               7:             TypePointer Function 6(bool)
               9:             TypeInt 32 0
     10(Buffers):             TypeStruct 9(int)
              11:             TypePointer Uniform 10(Buffers)
              12:     11(ptr) Variable Uniform
              13:             TypeInt 32 1
              14:     13(int) Constant 0
              15:             TypePointer Uniform 9(int)
              18:      9(int) Constant 0
              21:      9(int) Constant 3
              31:      9(int) Constant 1
              34:             TypeVector 9(int) 3
              35:      9(int) Constant 4
              36:   34(ivec3) ConstantComposite 35 35 31
         4(main):           2 Function None 3
               5:             Label
           8(b1):      7(ptr) Variable Function
              16:     15(ptr) AccessChain 12 14
              17:      9(int) Load 16
              19:     6(bool) INotEqual 17 18
                              Store 8(b1) 19
              20:     6(bool) Load 8(b1)
              22:     6(bool) GroupAny 21 20
                              Store 8(b1) 22
              23:     6(bool) Load 8(b1)
              24:     6(bool) GroupAll 21 23
                              Store 8(b1) 24
              25:     6(bool) Load 8(b1)
              26:     6(bool) GroupAll 21 25
              27:     6(bool) GroupAny 21 25
              28:     6(bool) LogicalNot 27
              29:     6(bool) LogicalOr 26 28
                              Store 8(b1) 29
              30:     6(bool) Load 8(b1)
              32:      9(int) Select 30 31 18
              33:     15(ptr) AccessChain 12 14
                              Store 33 32
                              Return
                              FunctionEnd
