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.
This commit is contained in:
John Kessenich 2017-08-14 22:10:00 -06:00
parent e516d4335f
commit 260f50616a
22 changed files with 36 additions and 34 deletions

View File

@ -402,6 +402,8 @@ Id Builder::makeFunctionType(Id returnType, const std::vector<Id>& paramTypes)
Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, bool ms, unsigned sampled, ImageFormat format) 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 // try to find it
Instruction* type; Instruction* type;
for (int t = 0; t < (int)groupedTypes[OpTypeImage].size(); ++t) { 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 // deal with capabilities
switch (dim) { switch (dim) {
case DimBuffer: case DimBuffer:
if (sampled) if (sampled == 1)
addCapability(CapabilitySampledBuffer); addCapability(CapabilitySampledBuffer);
else else
addCapability(CapabilityImageBuffer); addCapability(CapabilityImageBuffer);
break; break;
case Dim1D: case Dim1D:
if (sampled) if (sampled == 1)
addCapability(CapabilitySampled1D); addCapability(CapabilitySampled1D);
else else
addCapability(CapabilityImage1D); addCapability(CapabilityImage1D);
break; break;
case DimCube: case DimCube:
if (arrayed) { if (arrayed) {
if (sampled) if (sampled == 1)
addCapability(CapabilitySampledCubeArray); addCapability(CapabilitySampledCubeArray);
else else
addCapability(CapabilityImageCubeArray); addCapability(CapabilityImageCubeArray);
} }
break; break;
case DimRect: case DimRect:
if (sampled) if (sampled == 1)
addCapability(CapabilitySampledRect); addCapability(CapabilitySampledRect);
else else
addCapability(CapabilityImageRect); addCapability(CapabilityImageRect);
@ -466,10 +468,11 @@ Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, boo
} }
if (ms) { if (ms) {
if (arrayed) if (sampled == 2) {
addCapability(CapabilityImageMSArray);
if (! sampled)
addCapability(CapabilityStorageImageMultisample); addCapability(CapabilityStorageImageMultisample);
if (arrayed)
addCapability(CapabilityImageMSArray);
}
} }
return type->getResultId(); return type->getResultId();

View File

@ -2322,7 +2322,6 @@ gl_FragCoord origin is upper left
Capability Shader Capability Shader
Capability Sampled1D Capability Sampled1D
Capability SampledCubeArray Capability SampledCubeArray
Capability ImageMSArray
Capability ImageQuery Capability ImageQuery
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450

View File

@ -720,8 +720,8 @@ gl_FragCoord origin is upper left
// Id's are bound by 232 // Id's are bound by 232
Capability Shader Capability Shader
Capability Sampled1D Capability Image1D
Capability SampledBuffer Capability ImageBuffer
Capability ImageQuery Capability ImageQuery
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450

View File

@ -582,7 +582,6 @@ gl_FragCoord origin is upper left
// Id's are bound by 221 // Id's are bound by 221
Capability Shader Capability Shader
Capability ImageMSArray
Capability ImageQuery Capability ImageQuery
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450

View File

@ -361,7 +361,6 @@ gl_FragCoord origin is upper left
Capability Shader Capability Shader
Capability ImageGatherExtended Capability ImageGatherExtended
Capability ImageMSArray
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 120 124 EntryPoint Fragment 4 "main" 120 124

View File

@ -114,7 +114,7 @@ gl_FragCoord origin is upper left
// Id's are bound by 57 // Id's are bound by 57
Capability Shader Capability Shader
Capability SampledBuffer Capability ImageBuffer
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 54 EntryPoint Fragment 4 "main" 54

View File

@ -210,7 +210,7 @@ gl_FragCoord origin is upper left
// Id's are bound by 119 // Id's are bound by 119
Capability Shader Capability Shader
Capability Sampled1D Capability Image1D
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 82 86 EntryPoint Fragment 4 "main" 82 86

View File

@ -246,7 +246,7 @@ gl_FragCoord origin is upper left
// Id's are bound by 132 // Id's are bound by 132
Capability Shader Capability Shader
Capability Sampled1D Capability Image1D
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 104 108 EntryPoint Fragment 4 "main" 104 108

View File

@ -68,7 +68,7 @@ gl_FragCoord origin is upper left
// Id's are bound by 36 // Id's are bound by 36
Capability Shader Capability Shader
Capability SampledBuffer Capability ImageBuffer
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 34 EntryPoint Fragment 4 "main" 34

View File

@ -3950,8 +3950,8 @@ gl_FragCoord origin is upper left
// Id's are bound by 1147 // Id's are bound by 1147
Capability Shader Capability Shader
Capability Sampled1D Capability Image1D
Capability SampledBuffer Capability ImageBuffer
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 1117 EntryPoint Fragment 4 "main" 1117

View File

@ -1748,7 +1748,7 @@ gl_FragCoord origin is upper left
// Id's are bound by 607 // Id's are bound by 607
Capability Shader Capability Shader
Capability Sampled1D Capability Image1D
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 583 EntryPoint Fragment 4 "main" 583

View File

@ -102,8 +102,8 @@ gl_FragCoord origin is upper left
// Id's are bound by 42 // Id's are bound by 42
Capability Shader Capability Shader
Capability Sampled1D Capability Image1D
Capability SampledBuffer Capability ImageBuffer
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 39 EntryPoint Fragment 4 "main" 39

View File

@ -1694,7 +1694,7 @@ gl_FragCoord origin is upper left
// Id's are bound by 571 // Id's are bound by 571
Capability Shader Capability Shader
Capability Sampled1D Capability Image1D
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 547 EntryPoint Fragment 4 "main" 547

View File

@ -206,7 +206,7 @@ gl_FragCoord origin is upper left
// Id's are bound by 63 // Id's are bound by 63
Capability Shader Capability Shader
Capability SampledBuffer Capability ImageBuffer
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 58 EntryPoint Fragment 4 "main" 58

View File

@ -1712,7 +1712,7 @@ gl_FragCoord origin is upper left
// Id's are bound by 605 // Id's are bound by 605
Capability Shader Capability Shader
Capability Sampled1D Capability Image1D
Capability StorageImageExtendedFormats Capability StorageImageExtendedFormats
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450

View File

@ -138,7 +138,7 @@ local_size = (256, 1, 1)
// Id's are bound by 61 // Id's are bound by 61
Capability Shader Capability Shader
Capability SampledBuffer Capability ImageBuffer
Capability StorageImageExtendedFormats Capability StorageImageExtendedFormats
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450

View File

@ -4,10 +4,11 @@ spv.image.frag
// Id's are bound by 376 // Id's are bound by 376
Capability Shader Capability Shader
Capability SampledRect Capability StorageImageMultisample
Capability Sampled1D Capability ImageCubeArray
Capability SampledCubeArray Capability ImageRect
Capability SampledBuffer Capability Image1D
Capability ImageBuffer
Capability ImageMSArray Capability ImageMSArray
Capability StorageImageExtendedFormats Capability StorageImageExtendedFormats
Capability ImageQuery Capability ImageQuery

View File

@ -4,8 +4,8 @@ spv.memoryQualifier.frag
// Id's are bound by 97 // Id's are bound by 97
Capability Shader Capability Shader
Capability SampledRect Capability ImageRect
Capability Sampled1D Capability Image1D
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" EntryPoint Fragment 4 "main"

View File

@ -4,8 +4,8 @@ spv.rw.autoassign.frag
// Id's are bound by 42 // Id's are bound by 42
Capability Shader Capability Shader
Capability Sampled1D Capability Image1D
Capability SampledBuffer Capability ImageBuffer
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 39 EntryPoint Fragment 4 "main" 39

View File

@ -8,7 +8,6 @@ spv.separate.frag
Capability Sampled1D Capability Sampled1D
Capability SampledCubeArray Capability SampledCubeArray
Capability SampledBuffer Capability SampledBuffer
Capability ImageMSArray
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 11 34 EntryPoint Fragment 4 "main" 11 34

View File

@ -4,6 +4,7 @@ spv.sparseTexture.frag
// Id's are bound by 438 // Id's are bound by 438
Capability Shader Capability Shader
Capability StorageImageMultisample
Capability SampledRect Capability SampledRect
Capability SparseResidency Capability SparseResidency
Capability SampledCubeArray Capability SampledCubeArray

View File

@ -4,6 +4,7 @@ spv.subpass.frag
// Id's are bound by 67 // Id's are bound by 67
Capability Shader Capability Shader
Capability StorageImageMultisample
Capability InputAttachment Capability InputAttachment
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450