Compile shaders for 1.0-compatible tests as SPIRV 1.0, not max supported
authorChris Forbes <chrisforbes@google.com>
Fri, 2 Mar 2018 21:22:20 +0000 (13:22 -0800)
committerChris Forbes <chrisforbes@google.com>
Fri, 9 Mar 2018 16:02:25 +0000 (16:02 +0000)
Test: rebuild prebuilts, inspect. CtsDeqpTestCases against Pixel & Pixel2
Bug: b/74431715

Change-Id: I5a440f97f79be0e6d37d89018ae8b611e9d4e7c1

external/vulkancts/framework/vulkan/vkPrograms.cpp
external/vulkancts/framework/vulkan/vkPrograms.hpp
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmSpirvVersionTests.cpp
external/vulkancts/modules/vulkan/vktBuildPrograms.cpp
external/vulkancts/modules/vulkan/vktTestPackage.cpp

index 4895f56..1ab9c58 100644 (file)
@@ -183,14 +183,15 @@ ProgramBinary* assembleProgram (const SpirVAsmSource& program, SpirVProgramInfo*
        return createProgramBinaryFromSpirV(binary);
 }
 
-void disassembleProgram (const ProgramBinary& program, std::ostream* dst, SpirvVersion spirvVersion)
+void disassembleProgram (const ProgramBinary& program, std::ostream* dst)
 {
        if (program.getFormat() == PROGRAM_FORMAT_SPIRV)
        {
                TCU_CHECK_INTERNAL(isSaneSpirVBinary(program));
 
                if (isNativeSpirVBinaryEndianness())
-                       disassembleSpirV(program.getSize()/sizeof(deUint32), (const deUint32*)program.getBinary(), dst, spirvVersion);
+                       disassembleSpirV(program.getSize()/sizeof(deUint32), (const deUint32*)program.getBinary(), dst,
+                                                        extractSpirvVersion(program));
                else
                        TCU_THROW(InternalError, "SPIR-V endianness translation not supported");
        }
@@ -198,7 +199,7 @@ void disassembleProgram (const ProgramBinary& program, std::ostream* dst, SpirvV
                TCU_THROW(NotSupportedError, "Unsupported program format");
 }
 
-bool validateProgram (const ProgramBinary& program, std::ostream* dst, SpirvVersion spirvVersion)
+bool validateProgram (const ProgramBinary& program, std::ostream* dst)
 {
        if (program.getFormat() == PROGRAM_FORMAT_SPIRV)
        {
@@ -209,7 +210,8 @@ bool validateProgram (const ProgramBinary& program, std::ostream* dst, SpirvVers
                }
 
                if (isNativeSpirVBinaryEndianness())
-                       return validateSpirV(program.getSize()/sizeof(deUint32), (const deUint32*)program.getBinary(), dst, spirvVersion);
+                       return validateSpirV(program.getSize()/sizeof(deUint32), (const deUint32*)program.getBinary(), dst,
+                                                                extractSpirvVersion(program));
                else
                        TCU_THROW(InternalError, "SPIR-V endianness translation not supported");
        }
@@ -267,7 +269,14 @@ VkShaderStageFlagBits getVkShaderStage (glu::ShaderType shaderType)
        return de::getSizedArrayElement<glu::SHADERTYPE_LAST>(s_shaderStages, shaderType);
 }
 
-vk::SpirvVersion getSpirvVersionForAsm (const deUint32 vulkanVersion)
+// Baseline version, to be used for shaders which don't specify a version
+vk::SpirvVersion getBaselineSpirvVersion (const deUint32 /* vulkanVersion */)
+{
+       return vk::SPIRV_VERSION_1_0;
+}
+
+// Max supported versions for each vulkan version
+vk::SpirvVersion getMaxSpirvVersionForAsm (const deUint32 vulkanVersion)
 {
        vk::SpirvVersion        result                  = vk::SPIRV_VERSION_LAST;
 
@@ -282,7 +291,7 @@ vk::SpirvVersion getSpirvVersionForAsm (const deUint32 vulkanVersion)
        return result;
 }
 
-vk::SpirvVersion getSpirvVersionForGlsl (const deUint32 vulkanVersion)
+vk::SpirvVersion getMaxSpirvVersionForGlsl (const deUint32 vulkanVersion)
 {
        vk::SpirvVersion        result                  = vk::SPIRV_VERSION_LAST;
 
index f89fd34..e0bed2b 100644 (file)
@@ -210,19 +210,20 @@ typedef ProgramCollection<ProgramBinary, BinaryBuildOptions>      BinaryCollection;
 ProgramBinary*                 buildProgram            (const GlslSource& program, glu::ShaderProgramInfo* buildInfo);
 ProgramBinary*                 buildProgram            (const HlslSource& program, glu::ShaderProgramInfo* buildInfo);
 ProgramBinary*                 assembleProgram         (const vk::SpirVAsmSource& program, SpirVProgramInfo* buildInfo);
-void                                   disassembleProgram      (const ProgramBinary& program, std::ostream* dst, SpirvVersion spirvVersion);
-bool                                   validateProgram         (const ProgramBinary& program, std::ostream* dst, SpirvVersion spirvVersion);
+void                                   disassembleProgram      (const ProgramBinary& program, std::ostream* dst);
+bool                                   validateProgram         (const ProgramBinary& program, std::ostream* dst);
 
 Move<VkShaderModule>   createShaderModule      (const DeviceInterface& deviceInterface, VkDevice device, const ProgramBinary& binary, VkShaderModuleCreateFlags flags);
 
 glu::ShaderType                        getGluShaderType        (VkShaderStageFlagBits shaderStage);
 VkShaderStageFlagBits  getVkShaderStage        (glu::ShaderType shaderType);
 
-vk::SpirvVersion               getSpirvVersionForAsm   (const deUint32 vulkanVersion);
-vk::SpirvVersion               getSpirvVersionForGlsl  (const deUint32 vulkanVersion);
-SpirvVersion                   extractSpirvVersion             (const ProgramBinary& binary);
-std::string                            getSpirvVersionName             (const SpirvVersion spirvVersion);
-SpirvVersion&                  operator++                              (SpirvVersion& spirvVersion);
+vk::SpirvVersion               getMaxSpirvVersionForAsm        (const deUint32 vulkanVersion);
+vk::SpirvVersion               getMaxSpirvVersionForGlsl       (const deUint32 vulkanVersion);
+vk::SpirvVersion               getBaselineSpirvVersion         (const deUint32 vulkanVersion);
+SpirvVersion                   extractSpirvVersion                     (const ProgramBinary& binary);
+std::string                            getSpirvVersionName                     (const SpirvVersion spirvVersion);
+SpirvVersion&                  operator++                                      (SpirvVersion& spirvVersion);
 
 } // vk
 
index 98ded32..affa27e 100644 (file)
@@ -260,7 +260,7 @@ SpvAsmSpirvVersionsCase::SpvAsmSpirvVersionsCase (tcu::TestContext& testCtx, con
 
 void validateVulkanVersion (const deUint32 usedVulkanVersion, const SpirvVersion testedSpirvVersion)
 {
-       const SpirvVersion      usedSpirvVersionForAsm  = getSpirvVersionForAsm(usedVulkanVersion);
+       const SpirvVersion      usedSpirvVersionForAsm  = getMaxSpirvVersionForAsm(usedVulkanVersion);
 
        if (testedSpirvVersion > usedSpirvVersionForAsm)
                TCU_THROW(NotSupportedError, "Specified SPIR-V version is not supported by the device/instance");
index 099a9ff..7caa836 100644 (file)
@@ -337,10 +337,8 @@ public:
                DE_ASSERT(m_program->binary->getFormat() == vk::PROGRAM_FORMAT_SPIRV);
 
                std::ostringstream                      validationLog;
-               const vk::ProgramBinary&        programBinary   = *(m_program->binary);
-               const vk::SpirvVersion          spirvVersion    = vk::extractSpirvVersion(programBinary);
 
-               if (vk::validateProgram(*m_program->binary, &validationLog, spirvVersion))
+               if (vk::validateProgram(*m_program->binary, &validationLog))
                        m_program->validationStatus = Program::STATUS_PASSED;
                else
                        m_program->validationStatus = Program::STATUS_FAILED;
@@ -377,8 +375,8 @@ BuildStats buildPrograms (tcu::TestContext&                 testCtx,
                                                  const std::string&            dstPath,
                                                  const bool                            validateBinaries,
                                                  const deUint32                        usedVulkanVersion,
-                                                 const vk::SpirvVersion        spirvVersionForGlsl,
-                                                 const vk::SpirvVersion        spirvVersionForAsm)
+                                                 const vk::SpirvVersion        baselineSpirvVersion,
+                                                 const vk::SpirvVersion        maxSpirvVersion)
 {
        const deUint32                                          numThreads                      = deGetNumAvailableLogicalCores();
 
@@ -409,9 +407,9 @@ BuildStats buildPrograms (tcu::TestContext&                 testCtx,
                                {
                                        const TestCase* const           testCase                                        = dynamic_cast<TestCase*>(iterator.getNode());
                                        const string                            casePath                                        = iterator.getNodePath();
-                                       vk::ShaderBuildOptions          defaultGlslBuildOptions         (spirvVersionForGlsl, 0u);
-                                       vk::ShaderBuildOptions          defaultHlslBuildOptions         (spirvVersionForGlsl, 0u);
-                                       vk::SpirVAsmBuildOptions        defaultSpirvAsmBuildOptions     (spirvVersionForAsm);
+                                       vk::ShaderBuildOptions          defaultGlslBuildOptions         (baselineSpirvVersion, 0u);
+                                       vk::ShaderBuildOptions          defaultHlslBuildOptions         (baselineSpirvVersion, 0u);
+                                       vk::SpirVAsmBuildOptions        defaultSpirvAsmBuildOptions     (baselineSpirvVersion);
                                        vk::SourceCollections           sourcePrograms                          (usedVulkanVersion, defaultGlslBuildOptions, defaultHlslBuildOptions, defaultSpirvAsmBuildOptions);
 
                                        try
@@ -430,7 +428,7 @@ BuildStats buildPrograms (tcu::TestContext&                 testCtx,
                                                 ++progIter)
                                        {
                                                // Source program requires higher SPIR-V version than available: skip it to avoid fail
-                                               if (progIter.getProgram().buildOptions.targetVersion > spirvVersionForGlsl)
+                                               if (progIter.getProgram().buildOptions.targetVersion > maxSpirvVersion)
                                                        continue;
 
                                                programs.pushBack(Program(vk::ProgramIdentifier(casePath, progIter.getName()), progIter.getProgram().buildOptions.targetVersion));
@@ -443,7 +441,7 @@ BuildStats buildPrograms (tcu::TestContext&                 testCtx,
                                                 ++progIter)
                                        {
                                                // Source program requires higher SPIR-V version than available: skip it to avoid fail
-                                               if (progIter.getProgram().buildOptions.targetVersion > spirvVersionForGlsl)
+                                               if (progIter.getProgram().buildOptions.targetVersion > maxSpirvVersion)
                                                        continue;
 
                                                programs.pushBack(Program(vk::ProgramIdentifier(casePath, progIter.getName()), progIter.getProgram().buildOptions.targetVersion));
@@ -456,7 +454,7 @@ BuildStats buildPrograms (tcu::TestContext&                 testCtx,
                                                 ++progIter)
                                        {
                                                // Source program requires higher SPIR-V version than available: skip it to avoid fail
-                                               if (progIter.getProgram().buildOptions.targetVersion > spirvVersionForAsm)
+                                               if (progIter.getProgram().buildOptions.targetVersion > maxSpirvVersion)
                                                        continue;
 
                                                programs.pushBack(Program(vk::ProgramIdentifier(casePath, progIter.getName()), progIter.getProgram().buildOptions.targetVersion));
@@ -591,23 +589,23 @@ int main (int argc, const char* argv[])
 
        try
        {
-               tcu::DirArchive                 archive                         (".");
-               tcu::TestLog                    log                                     (deqpCmdLine.getLogFileName(), deqpCmdLine.getLogFlags());
+               tcu::DirArchive                 archive                                 (".");
+               tcu::TestLog                    log                                             (deqpCmdLine.getLogFileName(), deqpCmdLine.getLogFlags());
                tcu::Platform                   platform;
-               tcu::TestContext                testCtx                         (platform, archive, log, deqpCmdLine, DE_NULL);
-               vk::SpirvVersion                spirvVersionForGlsl     = vk::getSpirvVersionForGlsl(cmdLine.getOption<opt::VulkanVersion>());
-               vk::SpirvVersion                spirvVersionForAsm      = vk::getSpirvVersionForAsm(cmdLine.getOption<opt::VulkanVersion>());
+               tcu::TestContext                testCtx                                 (platform, archive, log, deqpCmdLine, DE_NULL);
+               vk::SpirvVersion                baselineSpirvVersion    = vk::getBaselineSpirvVersion(cmdLine.getOption<opt::VulkanVersion>());
+               vk::SpirvVersion                maxSpirvVersion                 = vk::getMaxSpirvVersionForGlsl(cmdLine.getOption<opt::VulkanVersion>());
 
-               tcu::print("SPIR-V versions: for GLSL sources: %s, for SPIR-V asm sources: %s\n",
-                                       getSpirvVersionName(spirvVersionForGlsl).c_str(),
-                                       getSpirvVersionName(spirvVersionForAsm).c_str());
+               tcu::print("SPIR-V versions: baseline: %s, max supported: %s\n",
+                                       getSpirvVersionName(baselineSpirvVersion).c_str(),
+                                       getSpirvVersionName(maxSpirvVersion).c_str());
 
                const vkt::BuildStats   stats           = vkt::buildPrograms(testCtx,
                                                                                                                                 cmdLine.getOption<opt::DstPath>(),
                                                                                                                                 cmdLine.getOption<opt::Validate>(),
                                                                                                                                 cmdLine.getOption<opt::VulkanVersion>(),
-                                                                                                                                spirvVersionForGlsl,
-                                                                                                                                spirvVersionForAsm);
+                                                                                                                                baselineSpirvVersion,
+                                                                                                                                maxSpirvVersion);
 
                tcu::print("DONE: %d passed, %d failed, %d not supported\n", stats.numSucceeded, stats.numFailed, stats.notSupported);
 
index d0a0df6..8d5a612 100644 (file)
@@ -226,11 +226,10 @@ void TestCaseExecutor::init (tcu::TestCase* testCase, const std::string& casePat
        const TestCase*                         vktCase                                         = dynamic_cast<TestCase*>(testCase);
        tcu::TestLog&                           log                                                     = m_context.getTestContext().getLog();
        const deUint32                          usedVulkanVersion                       = m_context.getUsedApiVersion();
-       const vk::SpirvVersion          spirvVersionForGlsl                     = vk::getSpirvVersionForGlsl(usedVulkanVersion);
-       const vk::SpirvVersion          spirvVersionForAsm                      = vk::getSpirvVersionForAsm(usedVulkanVersion);
-       vk::ShaderBuildOptions          defaultGlslBuildOptions         (spirvVersionForGlsl, 0u);
-       vk::ShaderBuildOptions          defaultHlslBuildOptions         (spirvVersionForGlsl, 0u);
-       vk::SpirVAsmBuildOptions        defaultSpirvAsmBuildOptions     (spirvVersionForAsm);
+       const vk::SpirvVersion          baselineSpirvVersion            = vk::getBaselineSpirvVersion(usedVulkanVersion);
+       vk::ShaderBuildOptions          defaultGlslBuildOptions         (baselineSpirvVersion, 0u);
+       vk::ShaderBuildOptions          defaultHlslBuildOptions         (baselineSpirvVersion, 0u);
+       vk::SpirVAsmBuildOptions        defaultSpirvAsmBuildOptions     (baselineSpirvVersion);
        vk::SourceCollections           sourceProgs                                     (usedVulkanVersion, defaultGlslBuildOptions, defaultHlslBuildOptions, defaultSpirvAsmBuildOptions);
 
        DE_UNREF(casePath); // \todo [2015-03-13 pyry] Use this to identify ProgramCollection storage path
@@ -243,7 +242,7 @@ void TestCaseExecutor::init (tcu::TestCase* testCase, const std::string& casePat
 
        for (vk::GlslSourceCollection::Iterator progIter = sourceProgs.glslSources.begin(); progIter != sourceProgs.glslSources.end(); ++progIter)
        {
-               if (progIter.getProgram().buildOptions.targetVersion > vk::getSpirvVersionForGlsl(m_context.getUsedApiVersion()))
+               if (progIter.getProgram().buildOptions.targetVersion > vk::getMaxSpirvVersionForGlsl(m_context.getUsedApiVersion()))
                        TCU_THROW(NotSupportedError, "Shader requires SPIR-V higher than available");
 
                const vk::ProgramBinary* const binProg = buildProgram<glu::ShaderProgramInfo, vk::GlslSourceCollection::Iterator>(casePath, progIter, m_prebuiltBinRegistry, log, &m_progCollection);
@@ -252,7 +251,7 @@ void TestCaseExecutor::init (tcu::TestCase* testCase, const std::string& casePat
                {
                        std::ostringstream disasm;
 
-                       vk::disassembleProgram(*binProg, &disasm, spirvVersionForGlsl);
+                       vk::disassembleProgram(*binProg, &disasm);
 
                        log << vk::SpirVAsmSource(disasm.str());
                }
@@ -264,7 +263,7 @@ void TestCaseExecutor::init (tcu::TestCase* testCase, const std::string& casePat
 
        for (vk::HlslSourceCollection::Iterator progIter = sourceProgs.hlslSources.begin(); progIter != sourceProgs.hlslSources.end(); ++progIter)
        {
-               if (progIter.getProgram().buildOptions.targetVersion > vk::getSpirvVersionForGlsl(m_context.getUsedApiVersion()))
+               if (progIter.getProgram().buildOptions.targetVersion > vk::getMaxSpirvVersionForGlsl(m_context.getUsedApiVersion()))
                        TCU_THROW(NotSupportedError, "Shader requires SPIR-V higher than available");
 
                const vk::ProgramBinary* const binProg = buildProgram<glu::ShaderProgramInfo, vk::HlslSourceCollection::Iterator>(casePath, progIter, m_prebuiltBinRegistry, log, &m_progCollection);
@@ -273,7 +272,7 @@ void TestCaseExecutor::init (tcu::TestCase* testCase, const std::string& casePat
                {
                        std::ostringstream disasm;
 
-                       vk::disassembleProgram(*binProg, &disasm, spirvVersionForGlsl);
+                       vk::disassembleProgram(*binProg, &disasm);
 
                        log << vk::SpirVAsmSource(disasm.str());
                }
@@ -285,7 +284,7 @@ void TestCaseExecutor::init (tcu::TestCase* testCase, const std::string& casePat
 
        for (vk::SpirVAsmCollection::Iterator asmIterator = sourceProgs.spirvAsmSources.begin(); asmIterator != sourceProgs.spirvAsmSources.end(); ++asmIterator)
        {
-               if (asmIterator.getProgram().buildOptions.targetVersion > vk::getSpirvVersionForAsm(m_context.getUsedApiVersion()))
+               if (asmIterator.getProgram().buildOptions.targetVersion > vk::getMaxSpirvVersionForAsm(m_context.getUsedApiVersion()))
                        TCU_THROW(NotSupportedError, "Shader requires SPIR-V higher than available");
 
                buildProgram<vk::SpirVProgramInfo, vk::SpirVAsmCollection::Iterator>(casePath, asmIterator, m_prebuiltBinRegistry, log, &m_progCollection);