From 5c46cad37aebe94c2fafcec6ee65bc3747286262 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Wed, 10 Jan 2018 11:42:41 -0800 Subject: [PATCH] Build prebuilts for HLSL shaders Previously these prebuilts would be missing, causing all the HLSL tests to fail when run via the Android CTS integration which relies on them. VK-GL-CTS Issue: 939 Test: Prebuild shaders and run dEQP via cts-tradefed Change-Id: Ib69f884818ea24692222cc74d8b69b0e0bcb465d Components: Vulkan Affects: dEQP-VK.*hlsl* --- .../vulkancts/modules/vulkan/vktBuildPrograms.cpp | 31 ++++++++++++++++------ 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/external/vulkancts/modules/vulkan/vktBuildPrograms.cpp b/external/vulkancts/modules/vulkan/vktBuildPrograms.cpp index 50bc1c6..099a9ff 100644 --- a/external/vulkancts/modules/vulkan/vktBuildPrograms.cpp +++ b/external/vulkancts/modules/vulkan/vktBuildPrograms.cpp @@ -240,16 +240,17 @@ void writeBuildLogs (const glu::ShaderProgramInfo& buildInfo, std::ostream& dst) << "---\n"; } -class BuildGlslTask : public Task +template +class BuildHighLevelShaderTask : public Task { public: - BuildGlslTask (const vk::GlslSource& source, Program* program) + BuildHighLevelShaderTask (const Source& source, Program* program) : m_source (source) , m_program (program) {} - BuildGlslTask (void) : m_program(DE_NULL) {} + BuildHighLevelShaderTask (void) : m_program(DE_NULL) {} void execute (void) { @@ -274,8 +275,8 @@ public: } private: - vk::GlslSource m_source; - Program* m_program; + Source m_source; + Program* m_program; }; void writeBuildLogs (const vk::SpirVProgramInfo& buildInfo, std::ostream& dst) @@ -390,7 +391,8 @@ BuildStats buildPrograms (tcu::TestContext& testCtx, { de::MemPool tmpPool; - de::PoolArray buildGlslTasks (&tmpPool); + de::PoolArray > buildGlslTasks (&tmpPool); + de::PoolArray > buildHlslTasks (&tmpPool); de::PoolArray buildSpirvAsmTasks (&tmpPool); // Collect build tasks @@ -410,7 +412,7 @@ BuildStats buildPrograms (tcu::TestContext& testCtx, vk::ShaderBuildOptions defaultGlslBuildOptions (spirvVersionForGlsl, 0u); vk::ShaderBuildOptions defaultHlslBuildOptions (spirvVersionForGlsl, 0u); vk::SpirVAsmBuildOptions defaultSpirvAsmBuildOptions (spirvVersionForAsm); - vk::SourceCollections sourcePrograms (usedVulkanVersion, defaultGlslBuildOptions, defaultGlslBuildOptions, defaultSpirvAsmBuildOptions); + vk::SourceCollections sourcePrograms (usedVulkanVersion, defaultGlslBuildOptions, defaultHlslBuildOptions, defaultSpirvAsmBuildOptions); try { @@ -432,10 +434,23 @@ BuildStats buildPrograms (tcu::TestContext& testCtx, continue; programs.pushBack(Program(vk::ProgramIdentifier(casePath, progIter.getName()), progIter.getProgram().buildOptions.targetVersion)); - buildGlslTasks.pushBack(BuildGlslTask(progIter.getProgram(), &programs.back())); + buildGlslTasks.pushBack(BuildHighLevelShaderTask(progIter.getProgram(), &programs.back())); executor.submit(&buildGlslTasks.back()); } + for (vk::HlslSourceCollection::Iterator progIter = sourcePrograms.hlslSources.begin(); + progIter != sourcePrograms.hlslSources.end(); + ++progIter) + { + // Source program requires higher SPIR-V version than available: skip it to avoid fail + if (progIter.getProgram().buildOptions.targetVersion > spirvVersionForGlsl) + continue; + + programs.pushBack(Program(vk::ProgramIdentifier(casePath, progIter.getName()), progIter.getProgram().buildOptions.targetVersion)); + buildHlslTasks.pushBack(BuildHighLevelShaderTask(progIter.getProgram(), &programs.back())); + executor.submit(&buildHlslTasks.back()); + } + for (vk::SpirVAsmCollection::Iterator progIter = sourcePrograms.spirvAsmSources.begin(); progIter != sourcePrograms.spirvAsmSources.end(); ++progIter) -- 2.7.4