From 8e8bee7037765c5efd379f92e0664a639d0300d7 Mon Sep 17 00:00:00 2001 From: SirLynix Date: Wed, 15 Jun 2022 20:26:14 +0200 Subject: [PATCH] Temp fix for NZSL update --- include/Nazara/Graphics/MaterialPass.hpp | 6 +++--- include/Nazara/Graphics/MaterialPass.inl | 4 ++-- include/Nazara/Graphics/MaterialPipeline.hpp | 2 +- include/Nazara/Graphics/UberShader.hpp | 2 +- src/Nazara/Graphics/MaterialPipeline.cpp | 3 ++- src/Nazara/Graphics/UberShader.cpp | 9 ++++++++- xmake/actions/compile_shaders.lua | 2 +- xmake/rules/compile_shaders.lua | 2 +- 8 files changed, 19 insertions(+), 11 deletions(-) diff --git a/include/Nazara/Graphics/MaterialPass.hpp b/include/Nazara/Graphics/MaterialPass.hpp index b77944043..cfe0cf0ef 100644 --- a/include/Nazara/Graphics/MaterialPass.hpp +++ b/include/Nazara/Graphics/MaterialPass.hpp @@ -67,7 +67,7 @@ namespace Nz inline FaceFilling GetFaceFilling() const; inline MaterialPassFlags GetFlags() const; inline float GetLineWidth() const; - inline const nzsl::Ast::ConstantValue& GetOptionValue(std::size_t optionIndex) const; + inline const nzsl::Ast::ConstantSingleValue& GetOptionValue(std::size_t optionIndex) const; inline const std::shared_ptr& GetPipeline() const; inline const MaterialPipelineInfo& GetPipelineInfo() const; inline float GetPointSize() const; @@ -98,7 +98,7 @@ namespace Nz inline void SetFaceCulling(FaceSide faceSide); inline void SetFaceFilling(FaceFilling filling); inline void SetLineWidth(float lineWidth); - inline void SetOptionValue(std::size_t optionIndex, nzsl::Ast::ConstantValue value); + inline void SetOptionValue(std::size_t optionIndex, nzsl::Ast::ConstantSingleValue value); inline void SetPointSize(float pointSize); inline void SetPrimitiveMode(PrimitiveMode mode); inline void SetTexture(std::size_t textureIndex, std::shared_ptr texture); @@ -142,7 +142,7 @@ namespace Nz bool dataInvalidated = true; }; - std::array m_optionValues; + std::array m_optionValues; std::shared_ptr m_settings; std::vector m_textures; std::vector m_shaders; diff --git a/include/Nazara/Graphics/MaterialPass.inl b/include/Nazara/Graphics/MaterialPass.inl index 0693fd9f7..985266636 100644 --- a/include/Nazara/Graphics/MaterialPass.inl +++ b/include/Nazara/Graphics/MaterialPass.inl @@ -319,7 +319,7 @@ namespace Nz return m_pipelineInfo.lineWidth; } - inline const nzsl::Ast::ConstantValue& MaterialPass::GetOptionValue(std::size_t optionIndex) const + inline const nzsl::Ast::ConstantSingleValue& MaterialPass::GetOptionValue(std::size_t optionIndex) const { assert(optionIndex < m_optionValues.size()); return m_optionValues[optionIndex]; @@ -566,7 +566,7 @@ namespace Nz InvalidatePipeline(); } - inline void MaterialPass::SetOptionValue(std::size_t optionIndex, nzsl::Ast::ConstantValue value) + inline void MaterialPass::SetOptionValue(std::size_t optionIndex, nzsl::Ast::ConstantSingleValue value) { assert(optionIndex < m_optionValues.size()); if (m_optionValues[optionIndex] != value) diff --git a/include/Nazara/Graphics/MaterialPipeline.hpp b/include/Nazara/Graphics/MaterialPipeline.hpp index b6c0cb1ec..c225c2a08 100644 --- a/include/Nazara/Graphics/MaterialPipeline.hpp +++ b/include/Nazara/Graphics/MaterialPipeline.hpp @@ -25,7 +25,7 @@ namespace Nz struct Option { UInt32 hash; - nzsl::Ast::ConstantValue value; + nzsl::Ast::ConstantSingleValue value; }; struct Shader diff --git a/include/Nazara/Graphics/UberShader.hpp b/include/Nazara/Graphics/UberShader.hpp index db5a8e23a..5f3857901 100644 --- a/include/Nazara/Graphics/UberShader.hpp +++ b/include/Nazara/Graphics/UberShader.hpp @@ -43,7 +43,7 @@ namespace Nz struct Config { - std::unordered_map optionValues; + std::unordered_map optionValues; }; struct ConfigEqual diff --git a/src/Nazara/Graphics/MaterialPipeline.cpp b/src/Nazara/Graphics/MaterialPipeline.cpp index ee9221845..910d981cf 100644 --- a/src/Nazara/Graphics/MaterialPipeline.cpp +++ b/src/Nazara/Graphics/MaterialPipeline.cpp @@ -49,10 +49,11 @@ namespace Nz renderPipelineInfo.pipelineLayout = m_pipelineInfo.settings->GetRenderPipelineLayout(); - std::unordered_map optionValues; + std::unordered_map optionValues; for (std::size_t i = 0; i < m_pipelineInfo.optionCount; ++i) { const auto& option = m_pipelineInfo.optionValues[i]; + optionValues[option.hash] = option.value; } diff --git a/src/Nazara/Graphics/UberShader.cpp b/src/Nazara/Graphics/UberShader.cpp index 77fad9f2d..17b69ddd6 100644 --- a/src/Nazara/Graphics/UberShader.cpp +++ b/src/Nazara/Graphics/UberShader.cpp @@ -71,7 +71,14 @@ namespace Nz if (it == m_combinations.end()) { nzsl::ShaderWriter::States states; - states.optionValues = config.optionValues; + // TODO: Remove this when arrays are accepted as config values + for (const auto& [optionHash, optionValue] : config.optionValues) + { + std::visit([&](auto&& arg) + { + states.optionValues[optionHash] = arg; + }, optionValue); + } states.shaderModuleResolver = Graphics::Instance()->GetShaderModuleResolver(); std::shared_ptr stage = Graphics::Instance()->GetRenderDevice()->InstantiateShaderModule(m_shaderStages, *m_shaderModule, std::move(states)); diff --git a/xmake/actions/compile_shaders.lua b/xmake/actions/compile_shaders.lua index cc3bfa927..2954b3b46 100644 --- a/xmake/actions/compile_shaders.lua +++ b/xmake/actions/compile_shaders.lua @@ -26,7 +26,7 @@ task("compile-shaders") print("Compiling shaders...") for _, filepath in pairs(os.files("src/Nazara/*/Resources/**.nzsl")) do print(" - Compiling " .. filepath) - local argv = {"--compile=nzslb", "--partial", "--header-file", filepath } + local argv = {"--compile=nzslb-header", "--partial", filepath } if option.get("measure") then table.insert(argv, "--measure") end diff --git a/xmake/rules/compile_shaders.lua b/xmake/rules/compile_shaders.lua index f7568c42b..3c99d696c 100644 --- a/xmake/rules/compile_shaders.lua +++ b/xmake/rules/compile_shaders.lua @@ -11,7 +11,7 @@ rule("nzsl.compile.shaders") -- add commands batchcmds:show_progress(opt.progress, "${color.build.object}compiling shader %s", shaderfile) - local argv = {"--compile=nzslb", "--partial", "--header-file"} + local argv = {"--compile=nzslb-header", "--partial"} -- handle --log-format local kind = target:data("plugin.project.kind") or ""