diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index a14eb00c..ca2017b8 100755 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -406,6 +406,48 @@ Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, boo constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); + // deal with capabilities + switch (dim) { + case DimBuffer: + if (sampled) + addCapability(CapabilitySampledBuffer); + else + addCapability(CapabilityImageBuffer); + break; + case Dim1D: + if (sampled) + addCapability(CapabilitySampled1D); + else + addCapability(CapabilityImage1D); + break; + case DimCube: + if (arrayed) { + if (sampled) + addCapability(CapabilitySampledCubeArray); + else + addCapability(CapabilityImageCubeArray); + } + break; + case DimRect: + if (sampled) + addCapability(CapabilitySampledRect); + else + addCapability(CapabilityImageRect); + break; + case DimSubpassData: + addCapability(CapabilityInputAttachment); + break; + default: + break; + } + + if (ms) { + if (arrayed) + addCapability(CapabilityImageMSArray); + if (! sampled) + addCapability(CapabilityStorageImageMultisample); + } + return type->getResultId(); } diff --git a/Test/baseResults/spv.130.frag.out b/Test/baseResults/spv.130.frag.out index 6b47b7dd..a9d568b4 100644 --- a/Test/baseResults/spv.130.frag.out +++ b/Test/baseResults/spv.130.frag.out @@ -11,6 +11,9 @@ Linked fragment stage: Capability Shader Capability ClipDistance + Capability SampledRect + Capability Sampled1D + Capability SampledCubeArray 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 17 68 79 99 173 184 185 186 diff --git a/Test/baseResults/spv.140.frag.out b/Test/baseResults/spv.140.frag.out index 6028f604..74ba071d 100755 --- a/Test/baseResults/spv.140.frag.out +++ b/Test/baseResults/spv.140.frag.out @@ -9,6 +9,8 @@ Linked fragment stage: Capability Shader Capability ClipDistance + Capability SampledRect + Capability SampledBuffer 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 16 28 33 43 diff --git a/Test/baseResults/spv.400.frag.out b/Test/baseResults/spv.400.frag.out index e43527c1..81ae28e2 100644 --- a/Test/baseResults/spv.400.frag.out +++ b/Test/baseResults/spv.400.frag.out @@ -12,6 +12,7 @@ Linked fragment stage: Capability Shader Capability Float64 Capability ClipDistance + Capability SampledRect 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 13 1025 1031 1036 1048 1074 1095 1097 diff --git a/Test/baseResults/spv.image.frag.out b/Test/baseResults/spv.image.frag.out index 65103bec..ff538f7e 100644 --- a/Test/baseResults/spv.image.frag.out +++ b/Test/baseResults/spv.image.frag.out @@ -10,6 +10,11 @@ Linked fragment stage: // Id's are bound by 372 Capability Shader + Capability SampledRect + Capability Sampled1D + Capability SampledCubeArray + Capability SampledBuffer + Capability ImageMSArray 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 356 diff --git a/Test/baseResults/spv.newTexture.frag.out b/Test/baseResults/spv.newTexture.frag.out index 41972bbb..97b0771a 100755 --- a/Test/baseResults/spv.newTexture.frag.out +++ b/Test/baseResults/spv.newTexture.frag.out @@ -10,6 +10,8 @@ Linked fragment stage: // Id's are bound by 278 Capability Shader + Capability SampledRect + Capability SampledCubeArray 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 17 26 29 55 81 84 91 247 277 diff --git a/Test/baseResults/spv.queryL.frag.out b/Test/baseResults/spv.queryL.frag.out index d72730a5..9013b96a 100755 --- a/Test/baseResults/spv.queryL.frag.out +++ b/Test/baseResults/spv.queryL.frag.out @@ -10,6 +10,10 @@ Linked fragment stage: // Id's are bound by 237 Capability Shader + Capability SampledRect + Capability Sampled1D + Capability SampledCubeArray + Capability SampledBuffer 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" diff --git a/Test/baseResults/spv.sparseTexture.frag.out b/Test/baseResults/spv.sparseTexture.frag.out index 24209e08..6af0a6ca 100644 --- a/Test/baseResults/spv.sparseTexture.frag.out +++ b/Test/baseResults/spv.sparseTexture.frag.out @@ -10,6 +10,8 @@ Linked fragment stage: // Id's are bound by 399 Capability Shader + Capability SampledRect + Capability SampledCubeArray 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 384 diff --git a/Test/baseResults/spv.sparseTextureClamp.frag.out b/Test/baseResults/spv.sparseTextureClamp.frag.out index 42fc27aa..cd23d663 100644 --- a/Test/baseResults/spv.sparseTextureClamp.frag.out +++ b/Test/baseResults/spv.sparseTextureClamp.frag.out @@ -10,6 +10,8 @@ Linked fragment stage: // Id's are bound by 360 Capability Shader + Capability SampledRect + Capability SampledCubeArray 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 345 diff --git a/Test/baseResults/spv.texture.frag.out b/Test/baseResults/spv.texture.frag.out index 0e795191..91a6832c 100755 --- a/Test/baseResults/spv.texture.frag.out +++ b/Test/baseResults/spv.texture.frag.out @@ -8,6 +8,7 @@ Linked fragment stage: // Id's are bound by 291 Capability Shader + Capability Sampled1D 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 47 276 290 diff --git a/Test/baseResults/spv.texture.vert.out b/Test/baseResults/spv.texture.vert.out index f081ce0e..23cf7542 100755 --- a/Test/baseResults/spv.texture.vert.out +++ b/Test/baseResults/spv.texture.vert.out @@ -8,6 +8,7 @@ Linked vertex stage: // Id's are bound by 146 Capability Shader + Capability Sampled1D 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Vertex 4 "main" 39 140 144 145