SPV: Fix #1487: Only declare AMD int16/half_float extensions when needed.
authorJohn Kessenich <cepheus@frii.com>
Tue, 11 Sep 2018 00:10:51 +0000 (18:10 -0600)
committerJohn Kessenich <cepheus@frii.com>
Tue, 11 Sep 2018 00:10:51 +0000 (18:10 -0600)
SPIRV/GlslangToSpv.cpp [changed mode: 0644->0755]
SPIRV/SpvPostProcess.cpp [changed mode: 0644->0755]
Test/baseResults/spv.16bitstorage-int.frag.out
Test/baseResults/spv.16bitstorage-uint.frag.out
Test/baseResults/spv.16bitstorage.frag.out
Test/baseResults/spv.float16Fetch.frag.out
Test/baseResults/spv.int16.amd.frag.out
Test/baseResults/spv.int16.frag.out
Test/baseResults/spv.shaderBallotAMD.comp.out

old mode 100644 (file)
new mode 100755 (executable)
index 587460e..10ad425
@@ -2729,10 +2729,6 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
         spvType = builder.makeFloatType(64);
         break;
     case glslang::EbtFloat16:
-#if AMD_EXTENSIONS
-        if (builder.getSpvVersion() < glslang::EShTargetSpv_1_3)
-            builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
-#endif
         spvType = builder.makeFloatType(16);
         break;
     case glslang::EbtBool:
@@ -2750,17 +2746,9 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
         spvType = builder.makeUintType(8);
         break;
     case glslang::EbtInt16:
-#ifdef AMD_EXTENSIONS
-        if (builder.getSpvVersion() < glslang::EShTargetSpv_1_3)
-            builder.addExtension(spv::E_SPV_AMD_gpu_shader_int16);
-#endif
         spvType = builder.makeIntType(16);
         break;
     case glslang::EbtUint16:
-#ifdef AMD_EXTENSIONS
-        if (builder.getSpvVersion() < glslang::EShTargetSpv_1_3)
-            builder.addExtension(spv::E_SPV_AMD_gpu_shader_int16);
-#endif
         spvType = builder.makeUintType(16);
         break;
     case glslang::EbtInt:
old mode 100644 (file)
new mode 100755 (executable)
index d9abd91..27f145d
@@ -120,6 +120,25 @@ void Builder::postProcessType(const Instruction& inst, Id typeId)
     case OpSConvert:
     case OpUConvert:
         break;
+    case OpExtInst:
+        switch (inst.getImmediateOperand(1)) {
+#if AMD_EXTENSIONS
+        case GLSLstd450Frexp:
+        case GLSLstd450FrexpStruct:
+            if (getSpvVersion() < glslang::EShTargetSpv_1_3 && containsType(typeId, OpTypeInt, 16))
+                addExtension(spv::E_SPV_AMD_gpu_shader_int16);
+            break;
+        case GLSLstd450InterpolateAtCentroid:
+        case GLSLstd450InterpolateAtSample:
+        case GLSLstd450InterpolateAtOffset:
+            if (getSpvVersion() < glslang::EShTargetSpv_1_3 && containsType(typeId, OpTypeFloat, 16))
+                addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
+            break;
+#endif
+        default:
+            break;
+        }
+        break;
     default:
         if (basicTypeOp == OpTypeFloat && width == 16)
             addCapability(CapabilityFloat16);
index dd7d1b1..1b2a16b 100644 (file)
@@ -6,7 +6,6 @@ spv.16bitstorage-int.frag
                               Capability Shader
                               Capability StorageUniformBufferBlock16
                               Capability StorageUniform16
-                              Extension  "SPV_AMD_gpu_shader_int16"
                               Extension  "SPV_KHR_16bit_storage"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
index 3a13826..f935f26 100644 (file)
@@ -6,7 +6,6 @@ spv.16bitstorage-uint.frag
                               Capability Shader
                               Capability StorageUniformBufferBlock16
                               Capability StorageUniform16
-                              Extension  "SPV_AMD_gpu_shader_int16"
                               Extension  "SPV_KHR_16bit_storage"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
index cf536e8..d2a83ba 100644 (file)
@@ -6,7 +6,6 @@ spv.16bitstorage.frag
                               Capability Shader
                               Capability StorageUniformBufferBlock16
                               Capability StorageUniform16
-                              Extension  "SPV_AMD_gpu_shader_half_float"
                               Extension  "SPV_KHR_16bit_storage"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
index 857ca6f..7632737 100644 (file)
@@ -27,7 +27,6 @@ error: Capability Float16 is not allowed by Vulkan 1.0 specification (or require
                               Capability StorageInputOutput16
                               Capability Float16ImageAMD
                               Capability ImageGatherBiasLodAMD
-                              Extension  "SPV_AMD_gpu_shader_half_float"
                               Extension  "SPV_AMD_gpu_shader_half_float_fetch"
                               Extension  "SPV_AMD_texture_gather_bias_lod"
                               Extension  "SPV_KHR_16bit_storage"
index ab08614..526373b 100644 (file)
@@ -14,7 +14,6 @@ error: Capability Float16 is not allowed by Vulkan 1.0 specification (or require
                               Capability Int16
                               Capability StorageUniform16
                               Capability StorageInputOutput16
-                              Extension  "SPV_AMD_gpu_shader_half_float"
                               Extension  "SPV_AMD_gpu_shader_int16"
                               Extension  "SPV_KHR_16bit_storage"
                1:             ExtInstImport  "GLSL.std.450"
index 11818b7..3ba5c07 100644 (file)
@@ -14,8 +14,6 @@ error: Capability Float16 is not allowed by Vulkan 1.0 specification (or require
                               Capability Int16
                               Capability Int8
                               Capability StorageUniform16
-                              Extension  "SPV_AMD_gpu_shader_half_float"
-                              Extension  "SPV_AMD_gpu_shader_int16"
                               Extension  "SPV_KHR_16bit_storage"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
index a28791e..5219a3a 100644 (file)
@@ -14,8 +14,6 @@ error: Capability Float16 is not allowed by Vulkan 1.0 specification (or require
                               Capability Groups
                               Capability Int16
                               Capability StorageUniformBufferBlock16
-                              Extension  "SPV_AMD_gpu_shader_half_float"
-                              Extension  "SPV_AMD_gpu_shader_int16"
                               Extension  "SPV_AMD_shader_ballot"
                               Extension  "SPV_KHR_16bit_storage"
                1:             ExtInstImport  "GLSL.std.450"