spv.double.comp
Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.


Linked compute stage:


// Module Version 99
// Generated by (magic number): 51a00bb
// Id's are bound by 63

                              Source GLSL 430
                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint GLCompute 4  "main"
                              Name 4  "main"
                              Name 9  "bufName"
                              MemberName 9(bufName) 0  "f"
                              MemberName 9(bufName) 1  "d"
                              Name 11  "bufInst"
                              Name 23  "storePos"
                              Name 27  "gl_GlobalInvocationID"
                              Name 33  "localCoef"
                              Name 34  "gl_LocalInvocationID"
                              Name 50  "aa"
                              Name 55  "globalCoef"
                              Name 59  "roll"
                              Name 62  "destTex"
                              Decorate 9(bufName) GLSLShared
                              Decorate 9(bufName) BufferBlock
                              Decorate 27(gl_GlobalInvocationID) BuiltIn GlobalInvocationId
                              Decorate 34(gl_LocalInvocationID) BuiltIn LocalInvocationId
                              Decorate 14 NoStaticUse
                              Decorate 57 NoStaticUse
                              Decorate 14 NoStaticUse
                              Decorate 14 NoStaticUse
                              Decorate 59(roll) NoStaticUse
                              Decorate 62(destTex) NoStaticUse
               2:             TypeVoid
               3:             TypeFunction 2
               7:             TypeFloat 32
               8:             TypeFloat 64
      9(bufName):             TypeStruct 7(float) 8(float)
              10:             TypePointer Uniform 9(bufName)
     11(bufInst):     10(ptr) Variable Uniform
              12:             TypeInt 32 1
              13:     12(int) Constant 1
              14:    8(float) Constant 1413754136 1074340347
              15:             TypePointer Uniform 8(float)
              17:     12(int) Constant 0
              18:    7(float) Constant 1095307129
              19:             TypePointer Uniform 7(float)
              21:             TypeVector 12(int) 2
              22:             TypePointer Function 21(ivec2)
              24:             TypeInt 32 0
              25:             TypeVector 24(int) 3
              26:             TypePointer Input 25(ivec3)
27(gl_GlobalInvocationID):     26(ptr) Variable Input
              29:             TypeVector 24(int) 2
              32:             TypePointer Function 8(float)
34(gl_LocalInvocationID):     26(ptr) Variable Input
              38:     12(int) Constant 8
              41:             TypeVector 7(float) 2
              43:    7(float) Constant 1090519040
              48:             TypeVector 8(float) 4
              49:             TypePointer Function 48(fvec4)
              51:    8(float) Constant 2576980378 1071225241
              52:    8(float) Constant 2576980378 1070176665
              53:    8(float) Constant 858993459 1070805811
              54:   48(fvec4) ConstantComposite 51 52 53 51
              56:    8(float) Constant 0 1072693248
              57:    8(float) Constant 3229815407 1074340298
              58:             TypePointer UniformConstant 8(float)
        59(roll):     58(ptr) Variable UniformConstant
              60:             TypeImage 7(float) 2D nonsampled format:Unknown
              61:             TypePointer UniformConstant 60
     62(destTex):     61(ptr) Variable UniformConstant
         4(main):           2 Function None 3
               5:             Label
    23(storePos):     22(ptr) Variable Function
   33(localCoef):     32(ptr) Variable Function
          50(aa):     49(ptr) Variable Function
  55(globalCoef):     32(ptr) Variable Function
              16:     15(ptr) AccessChain 11(bufInst) 13
                              Store 16 14
              20:     19(ptr) AccessChain 11(bufInst) 17
                              Store 20 18
              28:   25(ivec3) Load 27(gl_GlobalInvocationID)
              30:   29(ivec2) VectorShuffle 28 28 0 1
              31:   21(ivec2) Bitcast 30
                              Store 23(storePos) 31
              35:   25(ivec3) Load 34(gl_LocalInvocationID)
              36:   29(ivec2) VectorShuffle 35 35 0 1
              37:   21(ivec2) Bitcast 36
              39:   21(ivec2) CompositeConstruct 38 38
              40:   21(ivec2) ISub 37 39
              42:   41(fvec2) ConvertSToF 40
              44:   41(fvec2) CompositeConstruct 43 43
              45:   41(fvec2) FDiv 42 44
              46:    7(float) ExtInst 1(GLSL.std.450) 65(Length) 45
              47:    8(float) FConvert 46
                              Store 33(localCoef) 47
                              Store 50(aa) 54
                              Store 55(globalCoef) 56
                              Branch 6
               6:             Label
                              Return
                              FunctionEnd
