1#!amber 2 3# SPIR-V Spec: OpImageQuerySamples must have a MS of 1 4DEVICE_FEATURE shaderStorageImageMultisample 5 6SHADER compute compute_shader SPIRV-ASM 7; Test OpImageQuerySamples can be used with 8; an OpTypeImage with Sampled set to 2 (storage image) 9; 10;#version 450 11;layout(local_size_x = 1, local_size_y = 1) in; 12; 13;layout(set = 0, binding = 0, rgba8) uniform image2DMS storageImageMS; 14;layout(set = 0, binding = 1) buffer dataBuffer { 15; int outValue; 16;}; 17; 18;void main() 19;{ 20; outValue = imageSamples(storageImageMS); 21;} 22; 23; SPIR-V 24; Version: 1.0 25; Generator: Khronos Glslang Reference Front End; 10 26; Bound: 24 27; Schema: 0 28 OpCapability Shader 29 OpCapability StorageImageMultisample 30 OpCapability ImageQuery 31 %1 = OpExtInstImport "GLSL.std.450" 32 OpMemoryModel Logical GLSL450 33 OpEntryPoint GLCompute %main "main" 34 OpExecutionMode %main LocalSize 1 1 1 35 OpSource GLSL 450 36 OpName %main "main" 37 OpName %dataBuffer "dataBuffer" 38 OpMemberName %dataBuffer 0 "outValue" 39 OpName %_ "" 40 OpName %storageImageMS "storageImageMS" 41 OpMemberDecorate %dataBuffer 0 Offset 0 42 OpDecorate %dataBuffer BufferBlock 43 OpDecorate %_ DescriptorSet 0 44 OpDecorate %_ Binding 1 45 OpDecorate %storageImageMS DescriptorSet 0 46 OpDecorate %storageImageMS Binding 0 47 OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize 48 %void = OpTypeVoid 49 %3 = OpTypeFunction %void 50 %int = OpTypeInt 32 1 51 %dataBuffer = OpTypeStruct %int 52%_ptr_Uniform_dataBuffer = OpTypePointer Uniform %dataBuffer 53 %_ = OpVariable %_ptr_Uniform_dataBuffer Uniform 54 %int_0 = OpConstant %int 0 55 %float = OpTypeFloat 32 56 %12 = OpTypeImage %float 2D 0 0 1 2 Rgba8 57%_ptr_UniformConstant_12 = OpTypePointer UniformConstant %12 58%storageImageMS = OpVariable %_ptr_UniformConstant_12 UniformConstant 59%_ptr_Uniform_int = OpTypePointer Uniform %int 60 %uint = OpTypeInt 32 0 61 %v3uint = OpTypeVector %uint 3 62 %uint_16 = OpConstant %uint 16 63 %uint_1 = OpConstant %uint 1 64%gl_WorkGroupSize = OpConstantComposite %v3uint %uint_16 %uint_16 %uint_1 65 %main = OpFunction %void None %3 66 %5 = OpLabel 67 %15 = OpLoad %12 %storageImageMS 68 %16 = OpImageQuerySamples %int %15 69 %18 = OpAccessChain %_ptr_Uniform_int %_ %int_0 70 OpStore %18 %16 71 OpReturn 72 OpFunctionEnd 73END 74 75IMAGE texture FORMAT R8G8B8A8_UNORM DIM_2D WIDTH 256 HEIGHT 256 SAMPLES 4 76BUFFER dataBuffer DATA_TYPE int32 SIZE 1 FILL 0 77 78PIPELINE compute pipeline 79 ATTACH compute_shader 80 BIND BUFFER texture AS storage_image DESCRIPTOR_SET 0 BINDING 0 81 BIND BUFFER dataBuffer AS storage DESCRIPTOR_SET 0 BINDING 1 82END 83 84RUN pipeline 1 1 1 85 86BUFFER result DATA_TYPE int32 DATA 87 4 88END 89EXPECT dataBuffer EQ_BUFFER result