| ; SPIR-V |
| ; Version: 1.0 |
| ; Generator: Khronos Glslang Reference Front End; 1 |
| ; Bound: 75 |
| ; Schema: 0 |
| OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint GLCompute %main "main" %gl_GlobalInvocationID |
| OpExecutionMode %main LocalSize 4 1 1 |
| OpSource GLSL 450 |
| OpSourceExtension "GL_ARB_shading_language_420pack" |
| OpSourceExtension "GL_GOOGLE_cpp_style_line_directive" |
| OpSourceExtension "GL_GOOGLE_include_directive" |
| OpName %main "main" |
| OpName %greyscale_vf4_ "greyscale(vf4;" |
| OpName %p "p" |
| OpName %globalBuffer "globalBuffer" |
| OpMemberName %globalBuffer 0 "coeff" |
| OpMemberName %globalBuffer 1 "width" |
| OpMemberName %globalBuffer 2 "height" |
| OpName %globalBlock "globalBlock" |
| OpName %xy "xy" |
| OpName %gl_GlobalInvocationID "gl_GlobalInvocationID" |
| OpName %inputPixel "inputPixel" |
| OpName %inputTexture "inputTexture" |
| OpName %res "res" |
| OpName %x "x" |
| OpName %y "y" |
| OpName %outputBufferS "outputBufferS" |
| OpMemberName %outputBufferS 0 "buf" |
| OpName %outputBuffer "outputBuffer" |
| OpMemberDecorate %globalBuffer 0 Offset 0 |
| OpMemberDecorate %globalBuffer 1 Offset 16 |
| OpMemberDecorate %globalBuffer 2 Offset 20 |
| OpDecorate %globalBuffer BufferBlock |
| OpDecorate %globalBlock DescriptorSet 0 |
| OpDecorate %globalBlock Binding 2 |
| OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId |
| OpDecorate %inputTexture DescriptorSet 0 |
| OpDecorate %inputTexture Binding 0 |
| OpDecorate %_runtimearr_v4float ArrayStride 16 |
| OpMemberDecorate %outputBufferS 0 Offset 0 |
| OpDecorate %outputBufferS BufferBlock |
| OpDecorate %outputBuffer DescriptorSet 0 |
| OpDecorate %outputBuffer Binding 1 |
| OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize |
| %void = OpTypeVoid |
| %3 = OpTypeFunction %void |
| %float = OpTypeFloat 32 |
| %v4float = OpTypeVector %float 4 |
| %8 = OpTypeFunction %v4float %v4float |
| %int = OpTypeInt 32 1 |
| %globalBuffer = OpTypeStruct %v4float %int %int |
| %_ptr_Uniform_globalBuffer = OpTypePointer Uniform %globalBuffer |
| %globalBlock = OpVariable %_ptr_Uniform_globalBuffer Uniform |
| %16 = OpConstant %int 0 |
| %_ptr_Uniform_v4float = OpTypePointer Uniform %v4float |
| %v2int = OpTypeVector %int 2 |
| %_ptr_Function_v2int = OpTypePointer Function %v2int |
| %uint = OpTypeInt 32 0 |
| %v3uint = OpTypeVector %uint 3 |
| %_ptr_Input_v3uint = OpTypePointer Input %v3uint |
| %gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input |
| %v2uint = OpTypeVector %uint 2 |
| %_ptr_Function_v4float = OpTypePointer Function %v4float |
| %37 = OpTypeImage %float 2D 0 0 0 1 Unknown |
| %38 = OpTypeSampledImage %37 |
| %_ptr_UniformConstant_38 = OpTypePointer UniformConstant %38 |
| %inputTexture = OpVariable %_ptr_UniformConstant_38 UniformConstant |
| %_ptr_Function_uint = OpTypePointer Function %uint |
| %50 = OpConstant %uint 0 |
| %_ptr_Input_uint = OpTypePointer Input %uint |
| %55 = OpConstant %uint 1 |
| %_runtimearr_v4float = OpTypeRuntimeArray %v4float |
| %outputBufferS = OpTypeStruct %_runtimearr_v4float |
| %_ptr_Uniform_outputBufferS = OpTypePointer Uniform %outputBufferS |
| %outputBuffer = OpVariable %_ptr_Uniform_outputBufferS Uniform |
| %63 = OpConstant %int 1 |
| %_ptr_Uniform_int = OpTypePointer Uniform %int |
| %73 = OpConstant %uint 4 |
| %gl_WorkGroupSize = OpConstantComposite %v3uint %73 %55 %55 |
| %main = OpFunction %void None %3 |
| %5 = OpLabel |
| %xy = OpVariable %_ptr_Function_v2int Function |
| %inputPixel = OpVariable %_ptr_Function_v4float Function |
| %res = OpVariable %_ptr_Function_v4float Function |
| %x = OpVariable %_ptr_Function_uint Function |
| %y = OpVariable %_ptr_Function_uint Function |
| %32 = OpLoad %v3uint %gl_GlobalInvocationID |
| %33 = OpVectorShuffle %v2uint %32 %32 0 1 |
| %34 = OpBitcast %v2int %33 |
| OpStore %xy %34 |
| %41 = OpLoad %38 %inputTexture |
| %42 = OpLoad %v2int %xy |
| %43 = OpImage %37 %41 |
| %44 = OpImageFetch %v4float %43 %42 Lod %16 |
| OpStore %inputPixel %44 |
| %46 = OpLoad %v4float %inputPixel |
| %47 = OpFunctionCall %v4float %greyscale_vf4_ %46 |
| OpStore %res %47 |
| %52 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %50 |
| %53 = OpLoad %uint %52 |
| OpStore %x %53 |
| %56 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %55 |
| %57 = OpLoad %uint %56 |
| OpStore %y %57 |
| %62 = OpLoad %uint %y |
| %65 = OpAccessChain %_ptr_Uniform_int %globalBlock %63 |
| %66 = OpLoad %int %65 |
| %67 = OpBitcast %uint %66 |
| %68 = OpIMul %uint %62 %67 |
| %69 = OpLoad %uint %x |
| %70 = OpIAdd %uint %68 %69 |
| %71 = OpLoad %v4float %res |
| %72 = OpAccessChain %_ptr_Uniform_v4float %outputBuffer %16 %70 |
| OpStore %72 %71 |
| OpReturn |
| OpFunctionEnd |
| %greyscale_vf4_ = OpFunction %v4float None %8 |
| %p = OpFunctionParameter %v4float |
| %11 = OpLabel |
| %18 = OpAccessChain %_ptr_Uniform_v4float %globalBlock %16 |
| %19 = OpLoad %v4float %18 |
| %20 = OpDot %float %p %19 |
| %21 = OpCompositeConstruct %v4float %20 %20 %20 %20 |
| OpReturnValue %21 |
| OpFunctionEnd |