SPV: Correct selection of storage-image capabilities. Fixes #986.
authorJohn Kessenich <cepheus@frii.com>
Tue, 15 Aug 2017 04:10:00 +0000 (22:10 -0600)
committerJohn Kessenich <cepheus@frii.com>
Tue, 15 Aug 2017 04:10:00 +0000 (22:10 -0600)
Code was reflecting an old historical use of sampled as a SPIR-V
2-valued operand, instead of its current 3 values.

22 files changed:
SPIRV/SpvBuilder.cpp
Test/baseResults/hlsl.getdimensions.dx10.frag.out
Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
Test/baseResults/hlsl.getsampleposition.dx10.frag.out
Test/baseResults/hlsl.load.2dms.dx10.frag.out
Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
Test/baseResults/hlsl.promote.atomic.frag.out
Test/baseResults/hlsl.rw.atomics.frag.out
Test/baseResults/hlsl.rw.bracket.frag.out
Test/baseResults/hlsl.rw.register.frag.out
Test/baseResults/hlsl.rw.scalar.bracket.frag.out
Test/baseResults/hlsl.rw.swizzle.frag.out
Test/baseResults/hlsl.rw.vec2.bracket.frag.out
Test/baseResults/hlsl.structbuffer.fn2.comp.out
Test/baseResults/spv.image.frag.out
Test/baseResults/spv.memoryQualifier.frag.out
Test/baseResults/spv.rw.autoassign.frag.out
Test/baseResults/spv.separate.frag.out
Test/baseResults/spv.sparseTexture.frag.out
Test/baseResults/spv.subpass.frag.out

index d472eb5..9246a81 100644 (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)
 {
+    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();
index ea6c200..3780bd3 100644 (file)
@@ -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
index beb1909..b301a61 100644 (file)
@@ -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
index d45d731..12fe30c 100644 (file)
@@ -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
index 462bb81..b5d0466 100644 (file)
@@ -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
index fa66acc..851f824 100644 (file)
@@ -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
index 99070b7..1093100 100644 (file)
@@ -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
index 6c9e2c0..1347a51 100644 (file)
@@ -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
index b31ac61..ead4fe3 100644 (file)
@@ -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
index 5e7fdb1..99c4174 100644 (file)
@@ -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
index 9117265..7804e33 100644 (file)
@@ -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
index 237303c..5464ac2 100644 (file)
@@ -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
index da7a5a1..7ff34fa 100644 (file)
@@ -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
index 60a6b99..4d804e9 100644 (file)
@@ -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
index d920bf3..980c82b 100644 (file)
@@ -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
index cb12ba5..efe5fe3 100644 (file)
@@ -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
index c21f9bf..d645f2a 100644 (file)
@@ -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
index 0060868..c041a52 100644 (file)
@@ -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"
index 0f2a51d..6121b9b 100644 (file)
@@ -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
index 5b078af..3807242 100644 (file)
@@ -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
index af3b63e..b57b87c 100644 (file)
@@ -4,6 +4,7 @@ spv.sparseTexture.frag
 // Id's are bound by 438
 
                               Capability Shader
+                              Capability StorageImageMultisample
                               Capability SampledRect
                               Capability SparseResidency
                               Capability SampledCubeArray
index 661ebba..7db9e39 100644 (file)
@@ -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