Skip to content

Commit 8eaf3ff

Browse files
author
devsh
committed
fix some corner cases causing crashes in CHLSLCompiler
1 parent c9b6c0e commit 8eaf3ff

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

src/nbl/asset/utils/CHLSLCompiler.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ using namespace nbl;
2424
using namespace nbl::asset;
2525
using Microsoft::WRL::ComPtr;
2626

27-
static constexpr const wchar_t* SHADER_MODEL_PROFILE = L"XX_6_7";
27+
static constexpr const wchar_t* SHADER_MODEL_PROFILE = L"XX_6_8";
2828
static const wchar_t* ShaderStageToString(asset::IShader::E_SHADER_STAGE stage) {
2929
switch (stage)
3030
{
@@ -128,14 +128,15 @@ static void try_upgrade_hlsl_version(std::vector<std::wstring>& arguments, syste
128128

129129
static void try_upgrade_shader_stage(std::vector<std::wstring>& arguments, asset::IShader::E_SHADER_STAGE shaderStageOverrideFromPragma, system::logger_opt_ptr& logger) {
130130

131-
constexpr int MajorReqVersion = 6, MinorReqVersion = 7;
131+
constexpr int MajorReqVersion = 6, MinorReqVersion = 8;
132132
auto overrideStageStr = ShaderStageToString(shaderStageOverrideFromPragma);
133133
if (shaderStageOverrideFromPragma != IShader::E_SHADER_STAGE::ESS_UNKNOWN && !overrideStageStr)
134134
{
135135
logger.log("Invalid shader stage with int value '%i'.\nThis value does not have a known string representation.",
136136
system::ILogger::ELL_ERROR, shaderStageOverrideFromPragma);
137137
return;
138138
}
139+
// still unknown, then we take value from commandline arguments (precedence: pragma > DXC specific command line > compile option)
139140
bool setDefaultValue = true;
140141
auto foundShaderStageArgument = std::find(arguments.begin(), arguments.end(), L"-T");
141142
if (foundShaderStageArgument != arguments.end() && foundShaderStageArgument +1 != arguments.end()) {
@@ -202,6 +203,9 @@ static void try_upgrade_shader_stage(std::vector<std::wstring>& arguments, asset
202203
}
203204
if (setDefaultValue)
204205
{
206+
// if stage is still not known, lets go with library
207+
if (shaderStageOverrideFromPragma==IShader::E_SHADER_STAGE::ESS_UNKNOWN)
208+
overrideStageStr = ShaderStageToString(hlsl::ShaderStage::ESS_ALL_OR_LIBRARY);
205209
// in case of no -T
206210
// push back default values for -T argument
207211
// can be safely pushed to the back of argument list as output files should be evicted from args before passing to this func
@@ -379,6 +383,7 @@ std::string CHLSLCompiler::preprocessShader(std::string&& code, IShader::E_SHADE
379383
if (context.get_hooks().m_dxc_compile_flags_override.size() != 0)
380384
dxc_compile_flags_override = context.get_hooks().m_dxc_compile_flags_override;
381385

386+
// pragma overrides what we passed in
382387
if(context.get_hooks().m_pragmaStage != IShader::E_SHADER_STAGE::ESS_UNKNOWN)
383388
stage = context.get_hooks().m_pragmaStage;
384389

src/nbl/asset/utils/IShaderCompiler.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ core::smart_refctd_ptr<ICPUShader> nbl::asset::IShaderCompiler::compileToSPIRV(c
4545

4646
auto retVal = compileToSPIRV_impl(code, options, options.writeCache ? &entry.dependencies : nullptr);
4747
// compute the SPIR-V shader content hash
48+
if (retVal)
4849
{
4950
auto backingBuffer = retVal->getContent();
5051
const_cast<ICPUBuffer*>(backingBuffer)->setContentHash(backingBuffer->computeContentHash());

0 commit comments

Comments
 (0)