rendering: thread global shader keywords into builtin variants
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user