diff options
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/gfx/vulkan/render-vk.cpp | 15 | ||||
| -rw-r--r-- | tools/render-test/options.cpp | 4 | ||||
| -rw-r--r-- | tools/render-test/options.h | 2 | ||||
| -rw-r--r-- | tools/render-test/render-test-main.cpp | 2 | ||||
| -rw-r--r-- | tools/render-test/slang-support.cpp | 2 |
5 files changed, 23 insertions, 2 deletions
diff --git a/tools/gfx/vulkan/render-vk.cpp b/tools/gfx/vulkan/render-vk.cpp index 88770dbb9..f56a21d20 100644 --- a/tools/gfx/vulkan/render-vk.cpp +++ b/tools/gfx/vulkan/render-vk.cpp @@ -4944,6 +4944,7 @@ public: /// Note that the outShaderModule value should be cleaned up when no longer needed by caller /// via vkShaderModuleDestroy() VkPipelineShaderStageCreateInfo compileEntryPoint( + const char* entryPointName, ISlangBlob* code, VkShaderStageFlagBits stage, VkShaderModule& outShaderModule); @@ -5188,6 +5189,7 @@ VkBool32 VKDevice::handleDebugMessage(VkDebugReportFlagsEXT flags, VkDebugReport } VkPipelineShaderStageCreateInfo VKDevice::compileEntryPoint( + const char* entryPointName, ISlangBlob* code, VkShaderStageFlagBits stage, VkShaderModule& outShaderModule) @@ -5210,7 +5212,7 @@ VkPipelineShaderStageCreateInfo VKDevice::compileEntryPoint( shaderStageCreateInfo.stage = stage; shaderStageCreateInfo.module = module; - shaderStageCreateInfo.pName = "main"; + shaderStageCreateInfo.pName = entryPointName; return shaderStageCreateInfo; } @@ -6861,7 +6863,16 @@ Result VKDevice::createProgram(const IShaderProgram::Desc& desc, IShaderProgram* SLANG_RETURN_ON_FAIL(compileResult); shaderProgram->m_codeBlobs.add(kernelCode); VkShaderModule shaderModule; + // HACK: our direct-spirv-emit path generates SPIRV that respects + // the original entry point name, while the glslang path always + // uses "main" as the name. We should introduce a compiler parameter + // to control the entry point naming behavior in SPIRV-direct path + // so we can remove the ad-hoc logic here. + const char* entryPointName = "main"; + if (m_desc.slang.targetFlags & SLANG_TARGET_FLAG_GENERATE_SPIRV_DIRECTLY) + entryPointName = entryPointInfo->getName(); shaderProgram->m_stageCreateInfos.add(compileEntryPoint( + entryPointName, kernelCode, (VkShaderStageFlagBits)VulkanUtil::getShaderStage(stage), shaderModule)); @@ -7075,7 +7086,7 @@ Result VKDevice::createComputePipelineState(const ComputePipelineStateDesc& inDe returnComPtr(outState, pipelineStateImpl); return SLANG_OK; } - + VkPipelineCache pipelineCache = VK_NULL_HANDLE; VkPipeline pipeline = VK_NULL_HANDLE; diff --git a/tools/render-test/options.cpp b/tools/render-test/options.cpp index 5d3560351..a4a643e22 100644 --- a/tools/render-test/options.cpp +++ b/tools/render-test/options.cpp @@ -141,6 +141,10 @@ static gfx::DeviceType _toRenderType(Slang::RenderApiType apiType) { outOptions.useDXIL = true; } + else if (argValue == "-emit-spirv-directly") + { + outOptions.generateSPIRVDirectly = true; + } else if (argValue == "-only-startup") { outOptions.onlyStartup = true; diff --git a/tools/render-test/options.h b/tools/render-test/options.h index 7940d0d42..f41614360 100644 --- a/tools/render-test/options.h +++ b/tools/render-test/options.h @@ -73,6 +73,8 @@ struct Options Slang::DownstreamArgs downstreamArgs; ///< Args to downstream tools. Here it's just slang + bool generateSPIRVDirectly = false; + Options() { downstreamArgs.addName("slang"); } static SlangResult parse(int argc, const char*const* argv, Slang::WriterHelper stdError, Options& outOptions); diff --git a/tools/render-test/render-test-main.cpp b/tools/render-test/render-test-main.cpp index 96cc94aa3..271356cc3 100644 --- a/tools/render-test/render-test-main.cpp +++ b/tools/render-test/render-test-main.cpp @@ -1326,6 +1326,8 @@ static SlangResult _innerMain(Slang::StdWriters* stdWriters, SlangSession* sessi desc.adapter = options.adapter.getBuffer(); desc.slang.lineDirectiveMode = SLANG_LINE_DIRECTIVE_MODE_NONE; + if (options.generateSPIRVDirectly) + desc.slang.targetFlags = SLANG_TARGET_FLAG_GENERATE_SPIRV_DIRECTLY; List<const char*> requiredFeatureList; for (auto& name : options.renderFeatures) diff --git a/tools/render-test/slang-support.cpp b/tools/render-test/slang-support.cpp index a533a6378..65f8f244b 100644 --- a/tools/render-test/slang-support.cpp +++ b/tools/render-test/slang-support.cpp @@ -96,6 +96,8 @@ void ShaderCompilerUtil::Output::reset() spSetCodeGenTarget(slangRequest, input.target); spSetTargetProfile(slangRequest, 0, spFindProfile(out.session, input.profile.getBuffer())); + if (options.generateSPIRVDirectly) + spSetTargetFlags(slangRequest, 0, SLANG_TARGET_FLAG_GENERATE_SPIRV_DIRECTLY); // Define a macro so that shader code in a test can detect what language we // are nominally working with. |
