rendering: thread global shader keywords into builtin variants

This commit is contained in:
2026-04-06 20:30:25 +08:00
parent 0761079b4c
commit c318f34f07
14 changed files with 119 additions and 26 deletions

View File

@@ -5,6 +5,7 @@
#include <XCEngine/Rendering/FrameData/RenderCameraData.h>
#include <XCEngine/Rendering/FrameData/RenderEnvironmentData.h>
#include <XCEngine/Rendering/FrameData/VisibleRenderItem.h>
#include <XCEngine/Resources/Shader/ShaderKeywordTypes.h>
#include <array>
#include <cstdint>
@@ -84,6 +85,7 @@ struct RenderSceneData {
RenderCameraData cameraData;
RenderEnvironmentData environment;
RenderLightingData lighting;
Resources::ShaderKeywordSet globalShaderKeywords;
std::vector<VisibleRenderItem> visibleItems;
bool HasCamera() const {

View File

@@ -139,7 +139,9 @@ private:
bool CreateResources(const RenderContext& context);
void DestroyResources();
ResolvedShaderPass ResolveSurfaceShaderPass(const Resources::Material* material) const;
ResolvedShaderPass ResolveSurfaceShaderPass(
const RenderSceneData& sceneData,
const Resources::Material* material) const;
bool TryBuildSupportedBindingPlan(
const Resources::ShaderPass& shaderPass,
BuiltinPassResourceBindingPlan& outPlan,
@@ -150,6 +152,7 @@ private:
RHI::RHIPipelineState* GetOrCreatePipelineState(
const RenderContext& context,
const RenderSurface& surface,
const RenderSceneData& sceneData,
const Resources::Material* material);
bool CreateOwnedDescriptorSet(
const BuiltinPassSetLayoutMetadata& setLayout,

View File

@@ -222,12 +222,15 @@ private:
static bool TryResolveSurfacePassType(
const Resources::Material* material,
BuiltinMaterialPass& outPass);
ResolvedShaderPass ResolveSurfaceShaderPass(const Resources::Material* material) const;
ResolvedShaderPass ResolveSurfaceShaderPass(
const RenderSceneData& sceneData,
const Resources::Material* material) const;
PassResourceLayout* GetOrCreatePassResourceLayout(
const RenderContext& context,
const ResolvedShaderPass& resolvedShaderPass);
RHI::RHIPipelineState* GetOrCreatePipelineState(
const RenderContext& context,
const RenderSceneData& sceneData,
const Resources::Material* material);
bool CreateOwnedDescriptorSet(
const BuiltinPassSetLayoutMetadata& setLayout,

View File

@@ -112,5 +112,17 @@ inline bool IsShaderKeywordSubset(
return true;
}
inline ShaderKeywordSet CombineShaderKeywordSets(
const ShaderKeywordSet& first,
const ShaderKeywordSet& second) {
ShaderKeywordSet combined = first;
for (const Containers::String& keyword : second.enabledKeywords) {
combined.enabledKeywords.PushBack(keyword);
}
NormalizeShaderKeywordSetInPlace(combined);
return combined;
}
} // namespace Resources
} // namespace XCEngine