From 260f50616a1c6118b7f0802537a4fdc61594cb92 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Mon, 14 Aug 2017 22:10:00 -0600 Subject: [PATCH] SPV: Correct selection of storage-image capabilities. Fixes #986. Code was reflecting an old historical use of sampled as a SPIR-V 2-valued operand, instead of its current 3 values. --- SPIRV/SpvBuilder.cpp | 17 ++++++++++------- .../hlsl.getdimensions.dx10.frag.out | 1 - .../hlsl.getdimensions.rw.dx10.frag.out | 4 ++-- .../hlsl.getsampleposition.dx10.frag.out | 1 - Test/baseResults/hlsl.load.2dms.dx10.frag.out | 1 - .../hlsl.load.rwbuffer.dx10.frag.out | 2 +- .../hlsl.load.rwtexture.array.dx10.frag.out | 2 +- .../hlsl.load.rwtexture.dx10.frag.out | 2 +- Test/baseResults/hlsl.promote.atomic.frag.out | 2 +- Test/baseResults/hlsl.rw.atomics.frag.out | 4 ++-- Test/baseResults/hlsl.rw.bracket.frag.out | 2 +- Test/baseResults/hlsl.rw.register.frag.out | 4 ++-- .../baseResults/hlsl.rw.scalar.bracket.frag.out | 2 +- Test/baseResults/hlsl.rw.swizzle.frag.out | 2 +- Test/baseResults/hlsl.rw.vec2.bracket.frag.out | 2 +- Test/baseResults/hlsl.structbuffer.fn2.comp.out | 2 +- Test/baseResults/spv.image.frag.out | 9 +++++---- Test/baseResults/spv.memoryQualifier.frag.out | 4 ++-- Test/baseResults/spv.rw.autoassign.frag.out | 4 ++-- Test/baseResults/spv.separate.frag.out | 1 - Test/baseResults/spv.sparseTexture.frag.out | 1 + Test/baseResults/spv.subpass.frag.out | 1 + 22 files changed, 36 insertions(+), 34 deletions(-) diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index d472eb53..9246a819 100644 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -402,6 +402,8 @@ Id Builder::makeFunctionType(Id returnType, const std::vector& paramTypes) Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, bool ms, unsigned sampled, ImageFormat format) { + assert(sampled == 1 || sampled == 2); + // try to find it Instruction* type; for (int t = 0; t < (int)groupedTypes[OpTypeImage].size(); ++t) { @@ -433,27 +435,27 @@ Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, boo // deal with capabilities switch (dim) { case DimBuffer: - if (sampled) + if (sampled == 1) addCapability(CapabilitySampledBuffer); else addCapability(CapabilityImageBuffer); break; case Dim1D: - if (sampled) + if (sampled == 1) addCapability(CapabilitySampled1D); else addCapability(CapabilityImage1D); break; case DimCube: if (arrayed) { - if (sampled) + if (sampled == 1) addCapability(CapabilitySampledCubeArray); else addCapability(CapabilityImageCubeArray); } break; case DimRect: - if (sampled) + if (sampled == 1) addCapability(CapabilitySampledRect); else addCapability(CapabilityImageRect); @@ -466,10 +468,11 @@ Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, boo } if (ms) { - if (arrayed) - addCapability(CapabilityImageMSArray); - if (! sampled) + if (sampled == 2) { addCapability(CapabilityStorageImageMultisample); + if (arrayed) + addCapability(CapabilityImageMSArray); + } } return type->getResultId(); diff --git a/Test/baseResults/hlsl.getdimensions.dx10.frag.out b/Test/baseResults/hlsl.getdimensions.dx10.frag.out index ea6c200d..3780bd34 100644 --- a/Test/baseResults/hlsl.getdimensions.dx10.frag.out +++ b/Test/baseResults/hlsl.getdimensions.dx10.frag.out @@ -2322,7 +2322,6 @@ gl_FragCoord origin is upper left Capability Shader Capability Sampled1D Capability SampledCubeArray - Capability ImageMSArray Capability ImageQuery 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 diff --git a/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out b/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out index beb19092..b301a61a 100644 --- a/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out +++ b/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out @@ -720,8 +720,8 @@ gl_FragCoord origin is upper left // Id's are bound by 232 Capability Shader - Capability Sampled1D - Capability SampledBuffer + Capability Image1D + Capability ImageBuffer Capability ImageQuery 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 diff --git a/Test/baseResults/hlsl.getsampleposition.dx10.frag.out b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out index d45d7316..12fe30c8 100644 --- a/Test/baseResults/hlsl.getsampleposition.dx10.frag.out +++ b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out @@ -582,7 +582,6 @@ gl_FragCoord origin is upper left // Id's are bound by 221 Capability Shader - Capability ImageMSArray Capability ImageQuery 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 diff --git a/Test/baseResults/hlsl.load.2dms.dx10.frag.out b/Test/baseResults/hlsl.load.2dms.dx10.frag.out index 462bb81e..b5d04660 100644 --- a/Test/baseResults/hlsl.load.2dms.dx10.frag.out +++ b/Test/baseResults/hlsl.load.2dms.dx10.frag.out @@ -361,7 +361,6 @@ gl_FragCoord origin is upper left Capability Shader Capability ImageGatherExtended - Capability ImageMSArray 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 120 124 diff --git a/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out b/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out index fa66acca..851f8246 100644 --- a/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out +++ b/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out @@ -114,7 +114,7 @@ gl_FragCoord origin is upper left // Id's are bound by 57 Capability Shader - Capability SampledBuffer + Capability ImageBuffer 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 54 diff --git a/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out b/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out index 99070b70..10931001 100644 --- a/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out +++ b/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out @@ -210,7 +210,7 @@ gl_FragCoord origin is upper left // Id's are bound by 119 Capability Shader - Capability Sampled1D + Capability Image1D 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 82 86 diff --git a/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out b/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out index 6c9e2c01..1347a519 100644 --- a/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out +++ b/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out @@ -246,7 +246,7 @@ gl_FragCoord origin is upper left // Id's are bound by 132 Capability Shader - Capability Sampled1D + Capability Image1D 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 104 108 diff --git a/Test/baseResults/hlsl.promote.atomic.frag.out b/Test/baseResults/hlsl.promote.atomic.frag.out index b31ac612..ead4fe31 100644 --- a/Test/baseResults/hlsl.promote.atomic.frag.out +++ b/Test/baseResults/hlsl.promote.atomic.frag.out @@ -68,7 +68,7 @@ gl_FragCoord origin is upper left // Id's are bound by 36 Capability Shader - Capability SampledBuffer + Capability ImageBuffer 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 34 diff --git a/Test/baseResults/hlsl.rw.atomics.frag.out b/Test/baseResults/hlsl.rw.atomics.frag.out index 5e7fdb1d..99c41740 100644 --- a/Test/baseResults/hlsl.rw.atomics.frag.out +++ b/Test/baseResults/hlsl.rw.atomics.frag.out @@ -3950,8 +3950,8 @@ gl_FragCoord origin is upper left // Id's are bound by 1147 Capability Shader - Capability Sampled1D - Capability SampledBuffer + Capability Image1D + Capability ImageBuffer 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 1117 diff --git a/Test/baseResults/hlsl.rw.bracket.frag.out b/Test/baseResults/hlsl.rw.bracket.frag.out index 91172653..7804e33a 100644 --- a/Test/baseResults/hlsl.rw.bracket.frag.out +++ b/Test/baseResults/hlsl.rw.bracket.frag.out @@ -1748,7 +1748,7 @@ gl_FragCoord origin is upper left // Id's are bound by 607 Capability Shader - Capability Sampled1D + Capability Image1D 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 583 diff --git a/Test/baseResults/hlsl.rw.register.frag.out b/Test/baseResults/hlsl.rw.register.frag.out index 237303c4..5464ac2e 100644 --- a/Test/baseResults/hlsl.rw.register.frag.out +++ b/Test/baseResults/hlsl.rw.register.frag.out @@ -102,8 +102,8 @@ gl_FragCoord origin is upper left // Id's are bound by 42 Capability Shader - Capability Sampled1D - Capability SampledBuffer + Capability Image1D + Capability ImageBuffer 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 39 diff --git a/Test/baseResults/hlsl.rw.scalar.bracket.frag.out b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out index da7a5a11..7ff34fa0 100644 --- a/Test/baseResults/hlsl.rw.scalar.bracket.frag.out +++ b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out @@ -1694,7 +1694,7 @@ gl_FragCoord origin is upper left // Id's are bound by 571 Capability Shader - Capability Sampled1D + Capability Image1D 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 547 diff --git a/Test/baseResults/hlsl.rw.swizzle.frag.out b/Test/baseResults/hlsl.rw.swizzle.frag.out index 60a6b997..4d804e98 100644 --- a/Test/baseResults/hlsl.rw.swizzle.frag.out +++ b/Test/baseResults/hlsl.rw.swizzle.frag.out @@ -206,7 +206,7 @@ gl_FragCoord origin is upper left // Id's are bound by 63 Capability Shader - Capability SampledBuffer + Capability ImageBuffer 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 58 diff --git a/Test/baseResults/hlsl.rw.vec2.bracket.frag.out b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out index d920bf3e..980c82b6 100644 --- a/Test/baseResults/hlsl.rw.vec2.bracket.frag.out +++ b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out @@ -1712,7 +1712,7 @@ gl_FragCoord origin is upper left // Id's are bound by 605 Capability Shader - Capability Sampled1D + Capability Image1D Capability StorageImageExtendedFormats 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 diff --git a/Test/baseResults/hlsl.structbuffer.fn2.comp.out b/Test/baseResults/hlsl.structbuffer.fn2.comp.out index cb12ba5d..efe5fe3c 100644 --- a/Test/baseResults/hlsl.structbuffer.fn2.comp.out +++ b/Test/baseResults/hlsl.structbuffer.fn2.comp.out @@ -138,7 +138,7 @@ local_size = (256, 1, 1) // Id's are bound by 61 Capability Shader - Capability SampledBuffer + Capability ImageBuffer Capability StorageImageExtendedFormats 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 diff --git a/Test/baseResults/spv.image.frag.out b/Test/baseResults/spv.image.frag.out index c21f9bf1..d645f2a3 100644 --- a/Test/baseResults/spv.image.frag.out +++ b/Test/baseResults/spv.image.frag.out @@ -4,10 +4,11 @@ spv.image.frag // Id's are bound by 376 Capability Shader - Capability SampledRect - Capability Sampled1D - Capability SampledCubeArray - Capability SampledBuffer + Capability StorageImageMultisample + Capability ImageCubeArray + Capability ImageRect + Capability Image1D + Capability ImageBuffer Capability ImageMSArray Capability StorageImageExtendedFormats Capability ImageQuery diff --git a/Test/baseResults/spv.memoryQualifier.frag.out b/Test/baseResults/spv.memoryQualifier.frag.out index 00608680..c041a522 100644 --- a/Test/baseResults/spv.memoryQualifier.frag.out +++ b/Test/baseResults/spv.memoryQualifier.frag.out @@ -4,8 +4,8 @@ spv.memoryQualifier.frag // Id's are bound by 97 Capability Shader - Capability SampledRect - Capability Sampled1D + Capability ImageRect + Capability Image1D 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" diff --git a/Test/baseResults/spv.rw.autoassign.frag.out b/Test/baseResults/spv.rw.autoassign.frag.out index 0f2a51d2..6121b9b9 100644 --- a/Test/baseResults/spv.rw.autoassign.frag.out +++ b/Test/baseResults/spv.rw.autoassign.frag.out @@ -4,8 +4,8 @@ spv.rw.autoassign.frag // Id's are bound by 42 Capability Shader - Capability Sampled1D - Capability SampledBuffer + Capability Image1D + Capability ImageBuffer 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 39 diff --git a/Test/baseResults/spv.separate.frag.out b/Test/baseResults/spv.separate.frag.out index 5b078afc..38072426 100644 --- a/Test/baseResults/spv.separate.frag.out +++ b/Test/baseResults/spv.separate.frag.out @@ -8,7 +8,6 @@ spv.separate.frag Capability Sampled1D Capability SampledCubeArray Capability SampledBuffer - Capability ImageMSArray 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 11 34 diff --git a/Test/baseResults/spv.sparseTexture.frag.out b/Test/baseResults/spv.sparseTexture.frag.out index af3b63ec..b57b87ca 100644 --- a/Test/baseResults/spv.sparseTexture.frag.out +++ b/Test/baseResults/spv.sparseTexture.frag.out @@ -4,6 +4,7 @@ spv.sparseTexture.frag // Id's are bound by 438 Capability Shader + Capability StorageImageMultisample Capability SampledRect Capability SparseResidency Capability SampledCubeArray diff --git a/Test/baseResults/spv.subpass.frag.out b/Test/baseResults/spv.subpass.frag.out index 661ebbaf..7db9e39d 100644 --- a/Test/baseResults/spv.subpass.frag.out +++ b/Test/baseResults/spv.subpass.frag.out @@ -4,6 +4,7 @@ spv.subpass.frag // Id's are bound by 67 Capability Shader + Capability StorageImageMultisample Capability InputAttachment 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 -- 2.34.1