Graphics/UberShader: Hotreload shader when an imported module is modified
This commit is contained in:
parent
fa54f1a3e4
commit
5382dd3ccd
|
|
@ -15,6 +15,7 @@
|
||||||
#include <NZSL/ModuleResolver.hpp>
|
#include <NZSL/ModuleResolver.hpp>
|
||||||
#include <NZSL/Ast/Module.hpp>
|
#include <NZSL/Ast/Module.hpp>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
#include <unordered_set>
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
{
|
{
|
||||||
|
|
@ -70,6 +71,7 @@ namespace Nz
|
||||||
|
|
||||||
std::unordered_map<Config, std::shared_ptr<ShaderModule>, ConfigHasher, ConfigEqual> m_combinations;
|
std::unordered_map<Config, std::shared_ptr<ShaderModule>, ConfigHasher, ConfigEqual> m_combinations;
|
||||||
std::unordered_map<std::string, Option> m_optionIndexByName;
|
std::unordered_map<std::string, Option> m_optionIndexByName;
|
||||||
|
std::unordered_set<std::string> m_usedModules;
|
||||||
nzsl::Ast::ModulePtr m_shaderModule;
|
nzsl::Ast::ModulePtr m_shaderModule;
|
||||||
ConfigCallback m_configCallback;
|
ConfigCallback m_configCallback;
|
||||||
nzsl::ShaderStageTypeFlags m_shaderStages;
|
nzsl::ShaderStageTypeFlags m_shaderStages;
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ namespace Nz
|
||||||
|
|
||||||
m_onShaderModuleUpdated.Connect(moduleResolver.OnModuleUpdated, [this, name = std::move(moduleName)](nzsl::ModuleResolver* resolver, const std::string& updatedModuleName)
|
m_onShaderModuleUpdated.Connect(moduleResolver.OnModuleUpdated, [this, name = std::move(moduleName)](nzsl::ModuleResolver* resolver, const std::string& updatedModuleName)
|
||||||
{
|
{
|
||||||
if (updatedModuleName != name)
|
if (m_usedModules.find(updatedModuleName) == m_usedModules.end())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
nzsl::Ast::ModulePtr newShaderModule = resolver->Resolve(name);
|
nzsl::Ast::ModulePtr newShaderModule = resolver->Resolve(name);
|
||||||
|
|
@ -120,6 +120,9 @@ namespace Nz
|
||||||
sanitizeOptions.moduleResolver = Graphics::Instance()->GetShaderModuleResolver();
|
sanitizeOptions.moduleResolver = Graphics::Instance()->GetShaderModuleResolver();
|
||||||
|
|
||||||
nzsl::Ast::ModulePtr sanitizedModule = nzsl::Ast::Sanitize(module, sanitizeOptions);
|
nzsl::Ast::ModulePtr sanitizedModule = nzsl::Ast::Sanitize(module, sanitizeOptions);
|
||||||
|
m_usedModules.insert(sanitizedModule->metadata->moduleName);
|
||||||
|
for (auto&& importedModule : sanitizedModule->importedModules)
|
||||||
|
m_usedModules.insert(importedModule.module->metadata->moduleName);
|
||||||
|
|
||||||
nzsl::ShaderStageTypeFlags supportedStageType;
|
nzsl::ShaderStageTypeFlags supportedStageType;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue