From b0364dcc3e5e110ad8ef9a938a0cbf2dd9003122 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Sun, 14 Feb 2016 17:37:30 -0700 Subject: [PATCH] SPV Capabilities: Image types. SampledBuffer ImageBuffer Sampled1D Image1D SampledCubeArray ImageCubeArray SampledRect ImageRect InputAttachment ImageMSArray StorageImageMultisample --- SPIRV/SpvBuilder.cpp | 42 ++++++++++++++++++++++++ Test/baseResults/spv.130.frag.out | 3 ++ Test/baseResults/spv.140.frag.out | 2 ++ Test/baseResults/spv.400.frag.out | 1 + Test/baseResults/spv.image.frag.out | 5 +++ Test/baseResults/spv.newTexture.frag.out | 2 ++ Test/baseResults/spv.queryL.frag.out | 4 +++ Test/baseResults/spv.sparseTexture.frag.out | 2 ++ Test/baseResults/spv.sparseTextureClamp.frag.out | 2 ++ Test/baseResults/spv.texture.frag.out | 1 + Test/baseResults/spv.texture.vert.out | 1 + 11 files changed, 65 insertions(+) diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index a14eb00..ca2017b 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 6b47b7d..a9d568b 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 6028f60..74ba071 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 e43527c..81ae28e 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 65103be..ff538f7 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 41972bb..97b0771 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 d72730a..9013b96 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 24209e0..6af0a6c 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 42fc27a..cd23d66 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 0e79519..91a6832 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 f081ce0..23cf754 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 -- 2.7.4