Vulkan 1.3 SPIR-V 1.6 framework
authorPiers Daniell <pdaniell@nvidia.com>
Mon, 13 Sep 2021 22:51:59 +0000 (16:51 -0600)
committerMatthew Netsch <quic_mnetsch@quicinc.com>
Fri, 17 Sep 2021 21:48:43 +0000 (21:48 +0000)
Components: Vulkan, Framework

Affects:
dEQP-VK.*

Change-Id: I275ed504144eaf5553e81767425cf7f5c53f757f

android/cts/master/vk-master-2021-03-01/spirv-assembly.txt
android/cts/master/vk-master/spirv-assembly.txt
external/fetch_sources.py
external/vulkancts/framework/vulkan/vkDefs.hpp
external/vulkancts/framework/vulkan/vkPrograms.cpp
external/vulkancts/framework/vulkan/vkShaderToSpirV.cpp
external/vulkancts/framework/vulkan/vkSpirVAsm.cpp
external/vulkancts/modules/vulkan/amber/vktAmberTestCase.cpp
external/vulkancts/modules/vulkan/vktBuildPrograms.cpp
external/vulkancts/mustpass/master/vk-default/spirv-assembly.txt

index 6030be0..219a22f 100644 (file)
@@ -1,3 +1,4 @@
+dEQP-VK.spirv_assembly.instruction.compute.spirv_version.1_6_compute
 dEQP-VK.spirv_assembly.instruction.compute.localsize_id.literal_localsize
 dEQP-VK.spirv_assembly.instruction.compute.localsize_id.literal_and_specid_localsize
 dEQP-VK.spirv_assembly.instruction.compute.localsize_id.literal_localsize_x
@@ -1967,6 +1968,11 @@ dEQP-VK.spirv_assembly.instruction.compute.empty_struct.function.global_variable
 dEQP-VK.spirv_assembly.instruction.compute.empty_struct.function.global_variable_shared
 dEQP-VK.spirv_assembly.instruction.compute.empty_struct.function.local_variable
 dEQP-VK.spirv_assembly.instruction.compute.oparraylength.array-stride-larger-than-element-size
+dEQP-VK.spirv_assembly.instruction.graphics.spirv_version.1_6_vertex
+dEQP-VK.spirv_assembly.instruction.graphics.spirv_version.1_6_tesselation_evaluation
+dEQP-VK.spirv_assembly.instruction.graphics.spirv_version.1_6_tesselation_control
+dEQP-VK.spirv_assembly.instruction.graphics.spirv_version.1_6_geometry
+dEQP-VK.spirv_assembly.instruction.graphics.spirv_version.1_6_fragment
 dEQP-VK.spirv_assembly.instruction.graphics.switch_block_order.switch-case-to-merge-block
 dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.shiftrightlogical_i64_vert
 dEQP-VK.spirv_assembly.instruction.graphics.opspecconstantop.shiftrightlogical_i64_tessc
index 2b17965..774a209 100644 (file)
@@ -4,6 +4,7 @@ dEQP-VK.spirv_assembly.instruction.compute.spirv_version.1_2_compute
 dEQP-VK.spirv_assembly.instruction.compute.spirv_version.1_3_compute
 dEQP-VK.spirv_assembly.instruction.compute.spirv_version.1_4_compute
 dEQP-VK.spirv_assembly.instruction.compute.spirv_version.1_5_compute
+dEQP-VK.spirv_assembly.instruction.compute.spirv_version.1_6_compute
 dEQP-VK.spirv_assembly.instruction.compute.localsize.literal_localsize
 dEQP-VK.spirv_assembly.instruction.compute.localsize.literal_and_specid_localsize
 dEQP-VK.spirv_assembly.instruction.compute.localsize.specid_localsize
@@ -6156,6 +6157,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.spirv_version.1_5_tesselation_evalua
 dEQP-VK.spirv_assembly.instruction.graphics.spirv_version.1_5_tesselation_control
 dEQP-VK.spirv_assembly.instruction.graphics.spirv_version.1_5_geometry
 dEQP-VK.spirv_assembly.instruction.graphics.spirv_version.1_5_fragment
+dEQP-VK.spirv_assembly.instruction.graphics.spirv_version.1_6_vertex
+dEQP-VK.spirv_assembly.instruction.graphics.spirv_version.1_6_tesselation_evaluation
+dEQP-VK.spirv_assembly.instruction.graphics.spirv_version.1_6_tesselation_control
+dEQP-VK.spirv_assembly.instruction.graphics.spirv_version.1_6_geometry
+dEQP-VK.spirv_assembly.instruction.graphics.spirv_version.1_6_fragment
 dEQP-VK.spirv_assembly.instruction.graphics.opnop.opnop_vert
 dEQP-VK.spirv_assembly.instruction.graphics.opnop.opnop_tessc
 dEQP-VK.spirv_assembly.instruction.graphics.opnop.opnop_tesse
index fb76870..901172c 100644 (file)
@@ -331,9 +331,9 @@ PACKAGES = [
                "73bf8a239d5e3a7ef37ede266fcf7d1e485f8a66",
                "spirv-headers"),
        GitRepo(
-               "https://github.com/google/amber.git",
-               None,
-               "3e22a7d6694983df7bf575b0c0ae829b8333a5bf",
+               "https://gitlab.khronos.org/spirv/amber.git",
+               "git@gitlab.khronos.org:spirv/amber.git",
+               "94586d6c879db7394a4203813a40f0d7e437e0aa",
                "amber"),
 ]
 
index 33a4895..8ee4c1c 100644 (file)
@@ -115,6 +115,7 @@ enum SpirvVersion
        SPIRV_VERSION_1_3       = 3,    //!< SPIR-V 1.3
        SPIRV_VERSION_1_4       = 4,    //!< SPIR-V 1.4
        SPIRV_VERSION_1_5       = 5,    //!< SPIR-V 1.5
+       SPIRV_VERSION_1_6       = 6,    //!< SPIR-V 1.6
 
        SPIRV_VERSION_LAST
 };
index 2e41282..00f2cf8 100644 (file)
@@ -112,6 +112,7 @@ void optimizeCompiledBinary (vector<deUint32>& binary, int optimizationRecipe, c
                case SPIRV_VERSION_1_3: targetEnv = SPV_ENV_VULKAN_1_1; break;
                case SPIRV_VERSION_1_4: targetEnv = SPV_ENV_VULKAN_1_1_SPIRV_1_4;       break;
                case SPIRV_VERSION_1_5: targetEnv = SPV_ENV_VULKAN_1_2; break;
+               case SPIRV_VERSION_1_6: targetEnv = SPV_ENV_VULKAN_1_3; break;
                default:
                        TCU_THROW(InternalError, "Unexpected SPIR-V version requested");
        }
@@ -759,8 +760,10 @@ vk::SpirvVersion getMaxSpirvVersionForVulkan (const deUint32 vulkanVersion)
                result = vk::SPIRV_VERSION_1_0;
        else if (vulkanVersionMajorMinor == VK_API_VERSION_1_1)
                result = vk::SPIRV_VERSION_1_3;
-       else if (vulkanVersionMajorMinor >= VK_API_VERSION_1_2)
+       else if (vulkanVersionMajorMinor == VK_API_VERSION_1_2)
                result = vk::SPIRV_VERSION_1_5;
+       else if (vulkanVersionMajorMinor >= VK_API_VERSION_1_3)
+               result = vk::SPIRV_VERSION_1_6;
 
        DE_ASSERT(result < vk::SPIRV_VERSION_LAST);
 
@@ -779,7 +782,7 @@ vk::SpirvVersion getMaxSpirvVersionForGlsl (const deUint32 vulkanVersion)
 
 SpirvVersion extractSpirvVersion (const ProgramBinary& binary)
 {
-       DE_STATIC_ASSERT(SPIRV_VERSION_1_5 + 1 == SPIRV_VERSION_LAST);
+       DE_STATIC_ASSERT(SPIRV_VERSION_1_6 + 1 == SPIRV_VERSION_LAST);
 
        if (binary.getFormat() != PROGRAM_FORMAT_SPIRV)
                TCU_THROW(InternalError, "Binary is not in SPIR-V format");
@@ -793,6 +796,7 @@ SpirvVersion extractSpirvVersion (const ProgramBinary& binary)
        const deUint32                          spirvBinaryVersion13    = 0x00010300;
        const deUint32                          spirvBinaryVersion14    = 0x00010400;
        const deUint32                          spirvBinaryVersion15    = 0x00010500;
+       const deUint32                          spirvBinaryVersion16    = 0x00010600;
        const SpirvBinaryHeader*        header                                  = reinterpret_cast<const SpirvBinaryHeader*>(binary.getBinary());
        const deUint32                          spirvVersion                    = isNativeSpirVBinaryEndianness()
                                                                                                                ? header->version
@@ -807,6 +811,7 @@ SpirvVersion extractSpirvVersion (const ProgramBinary& binary)
                case spirvBinaryVersion13:      result = SPIRV_VERSION_1_3; break; //!< SPIR-V 1.3
                case spirvBinaryVersion14:      result = SPIRV_VERSION_1_4; break; //!< SPIR-V 1.4
                case spirvBinaryVersion15:      result = SPIRV_VERSION_1_5; break; //!< SPIR-V 1.5
+               case spirvBinaryVersion16:      result = SPIRV_VERSION_1_6; break; //!< SPIR-V 1.6
                default:                                        TCU_THROW(InternalError, "Unknown SPIR-V version detected in binary");
        }
 
@@ -815,7 +820,7 @@ SpirvVersion extractSpirvVersion (const ProgramBinary& binary)
 
 std::string getSpirvVersionName (const SpirvVersion spirvVersion)
 {
-       DE_STATIC_ASSERT(SPIRV_VERSION_1_5 + 1 == SPIRV_VERSION_LAST);
+       DE_STATIC_ASSERT(SPIRV_VERSION_1_6 + 1 == SPIRV_VERSION_LAST);
        DE_ASSERT(spirvVersion < SPIRV_VERSION_LAST);
 
        std::string result;
@@ -828,6 +833,7 @@ std::string getSpirvVersionName (const SpirvVersion spirvVersion)
                case SPIRV_VERSION_1_3: result = "1.3"; break; //!< SPIR-V 1.3
                case SPIRV_VERSION_1_4: result = "1.4"; break; //!< SPIR-V 1.4
                case SPIRV_VERSION_1_5: result = "1.5"; break; //!< SPIR-V 1.5
+               case SPIRV_VERSION_1_6: result = "1.6"; break; //!< SPIR-V 1.6
                default:                                result = "Unknown";
        }
 
index 469c2f9..4786941 100644 (file)
@@ -300,6 +300,9 @@ bool compileShaderToSpirV (const std::vector<std::string>* sources, const Shader
                        case SPIRV_VERSION_1_5:
                                shader.setEnvTarget(glslang::EshTargetSpv, (glslang::EShTargetLanguageVersion)0x10500);
                                break;
+                       case SPIRV_VERSION_1_6:
+                               shader.setEnvTarget(glslang::EshTargetSpv, (glslang::EShTargetLanguageVersion)0x10600);
+                               break;
                        default:
                                TCU_THROW(InternalError, "Unsupported SPIR-V target version");
                        }
index 576fa24..bca80a4 100644 (file)
@@ -46,6 +46,7 @@ static spv_target_env getSpirvToolsEnvForValidatorOptions(SpirvValidatorOptions
                case VK_MAKE_VERSION(1, 0, 0): return SPV_ENV_VULKAN_1_0;
                case VK_MAKE_VERSION(1, 1, 0): return allow_1_4 ? SPV_ENV_VULKAN_1_1_SPIRV_1_4 : SPV_ENV_VULKAN_1_1;
                case VK_MAKE_VERSION(1, 2, 0): return SPV_ENV_VULKAN_1_2;
+               case VK_MAKE_VERSION(1, 3, 0): return SPV_ENV_VULKAN_1_3;
                default:
                        break;
        }
@@ -65,6 +66,7 @@ static spv_target_env mapTargetSpvEnvironment(SpirvVersion spirvVersion)
                case SPIRV_VERSION_1_3: result = SPV_ENV_UNIVERSAL_1_3; break;  //!< SPIR-V 1.3
                case SPIRV_VERSION_1_4: result = SPV_ENV_UNIVERSAL_1_4; break;  //!< SPIR-V 1.4
                case SPIRV_VERSION_1_5: result = SPV_ENV_UNIVERSAL_1_5; break;  //!< SPIR-V 1.5
+               case SPIRV_VERSION_1_6: result = SPV_ENV_UNIVERSAL_1_6; break;  //!< SPIR-V 1.6
                default:                                TCU_THROW(InternalError, "Unknown SPIR-V version");
        }
 
index 5a34635..b53db3d 100644 (file)
@@ -330,8 +330,10 @@ void AmberTestCase::initPrograms (vk::SourceCollections& programCollection) cons
                const amber::ShaderInfo& shader = shaders[i];
 
                vk::SpirvVersion spirvVersion = vk::SPIRV_VERSION_1_0;
-               DE_STATIC_ASSERT(vk::SPIRV_VERSION_LAST == vk::SPIRV_VERSION_1_5 + 1);
-               if (shader.target_env == "spv1.5")
+               DE_STATIC_ASSERT(vk::SPIRV_VERSION_LAST == vk::SPIRV_VERSION_1_6 + 1);
+               if (shader.target_env == "spv1.6")
+                       spirvVersion = vk::SPIRV_VERSION_1_6;
+               else if (shader.target_env == "spv1.5")
                        spirvVersion = vk::SPIRV_VERSION_1_5;
                else if (shader.target_env == "spv1.4")
                        spirvVersion = vk::SPIRV_VERSION_1_4;
index b931c1e..51e063e 100644 (file)
@@ -584,9 +584,10 @@ void registerOptions (de::cmdline::Parser& parser)
                { "1.0",        VK_MAKE_VERSION(1, 0, 0)        },
                { "1.1",        VK_MAKE_VERSION(1, 1, 0)        },
                { "1.2",        VK_MAKE_VERSION(1, 2, 0)        },
+               { "1.3",        VK_MAKE_VERSION(1, 3, 0)        },
        };
 
-       DE_STATIC_ASSERT(vk::SPIRV_VERSION_1_5 + 1 == vk::SPIRV_VERSION_LAST);
+       DE_STATIC_ASSERT(vk::SPIRV_VERSION_1_6 + 1 == vk::SPIRV_VERSION_LAST);
 
        parser << Option<opt::DstPath>("d", "dst-path", "Destination path", "out")
                << Option<opt::Cases>("n", "deqp-case", "Case path filter (works as in test binaries)")
index 3f0daae..a31badc 100644 (file)
@@ -4,6 +4,7 @@ dEQP-VK.spirv_assembly.instruction.compute.spirv_version.1_2_compute
 dEQP-VK.spirv_assembly.instruction.compute.spirv_version.1_3_compute
 dEQP-VK.spirv_assembly.instruction.compute.spirv_version.1_4_compute
 dEQP-VK.spirv_assembly.instruction.compute.spirv_version.1_5_compute
+dEQP-VK.spirv_assembly.instruction.compute.spirv_version.1_6_compute
 dEQP-VK.spirv_assembly.instruction.compute.localsize.literal_localsize
 dEQP-VK.spirv_assembly.instruction.compute.localsize.literal_and_specid_localsize
 dEQP-VK.spirv_assembly.instruction.compute.localsize.specid_localsize
@@ -6152,6 +6153,11 @@ dEQP-VK.spirv_assembly.instruction.graphics.spirv_version.1_5_tesselation_evalua
 dEQP-VK.spirv_assembly.instruction.graphics.spirv_version.1_5_tesselation_control
 dEQP-VK.spirv_assembly.instruction.graphics.spirv_version.1_5_geometry
 dEQP-VK.spirv_assembly.instruction.graphics.spirv_version.1_5_fragment
+dEQP-VK.spirv_assembly.instruction.graphics.spirv_version.1_6_vertex
+dEQP-VK.spirv_assembly.instruction.graphics.spirv_version.1_6_tesselation_evaluation
+dEQP-VK.spirv_assembly.instruction.graphics.spirv_version.1_6_tesselation_control
+dEQP-VK.spirv_assembly.instruction.graphics.spirv_version.1_6_geometry
+dEQP-VK.spirv_assembly.instruction.graphics.spirv_version.1_6_fragment
 dEQP-VK.spirv_assembly.instruction.graphics.opnop.opnop_vert
 dEQP-VK.spirv_assembly.instruction.graphics.opnop.opnop_tessc
 dEQP-VK.spirv_assembly.instruction.graphics.opnop.opnop_tesse