Move render-graph stage policy into internal host
This commit is contained in:
@@ -1,91 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <XCEngine/Rendering/Execution/CameraFrameRenderGraphResources.h>
|
||||
#include <XCEngine/Rendering/RenderSurface.h>
|
||||
|
||||
namespace XCEngine {
|
||||
namespace Rendering {
|
||||
|
||||
struct CameraFrameRenderGraphSourceBinding {
|
||||
const RenderSurface* sourceSurfaceTemplate = nullptr;
|
||||
RHI::RHIResourceView* sourceColorView = nullptr;
|
||||
RHI::ResourceStates sourceColorState = RHI::ResourceStates::Common;
|
||||
RenderGraphTextureHandle sourceColor = {};
|
||||
};
|
||||
|
||||
inline bool IsCameraFrameFullscreenSequenceStage(
|
||||
CameraFrameStage stage) {
|
||||
return stage == CameraFrameStage::PostProcess ||
|
||||
stage == CameraFrameStage::FinalOutput;
|
||||
}
|
||||
|
||||
inline bool DoesCameraFrameStageGraphOwnColorTransitions(
|
||||
CameraFrameStage stage) {
|
||||
return stage == CameraFrameStage::MainScene ||
|
||||
stage == CameraFrameStage::PostProcess ||
|
||||
stage == CameraFrameStage::FinalOutput ||
|
||||
stage == CameraFrameStage::ObjectId;
|
||||
}
|
||||
|
||||
inline bool DoesCameraFrameStageGraphOwnDepthTransitions(
|
||||
CameraFrameStage stage) {
|
||||
return stage == CameraFrameStage::ShadowCaster ||
|
||||
stage == CameraFrameStage::DepthOnly ||
|
||||
stage == CameraFrameStage::MainScene ||
|
||||
stage == CameraFrameStage::ObjectId;
|
||||
}
|
||||
|
||||
inline bool UsesCameraFrameStageGraphManagedOutputColor(
|
||||
const CameraFramePlan& plan,
|
||||
CameraFrameStage stage) {
|
||||
switch (stage) {
|
||||
case CameraFrameStage::MainScene:
|
||||
return plan.UsesGraphManagedMainSceneColor();
|
||||
default:
|
||||
return plan.UsesGraphManagedOutputColor(stage);
|
||||
}
|
||||
}
|
||||
|
||||
inline CameraFrameColorSource ResolveCameraFrameStageGraphManagedColorSource(
|
||||
const CameraFramePlan& plan,
|
||||
CameraFrameStage stage) {
|
||||
return plan.ResolveStageColorSource(stage);
|
||||
}
|
||||
|
||||
inline CameraFrameRenderGraphSourceBinding ResolveCameraFrameFullscreenStageGraphSourceBinding(
|
||||
const CameraFramePlan& plan,
|
||||
CameraFrameStage stage,
|
||||
const RenderSurface& stageSurfaceTemplate,
|
||||
const RenderSurface* explicitSourceSurfaceTemplate,
|
||||
RHI::RHIResourceView* explicitSourceColorView,
|
||||
RHI::ResourceStates explicitSourceColorState,
|
||||
RenderGraphTextureHandle explicitSourceColor,
|
||||
const RenderGraphBlackboard* blackboard) {
|
||||
CameraFrameRenderGraphSourceBinding binding = {};
|
||||
binding.sourceSurfaceTemplate = explicitSourceSurfaceTemplate;
|
||||
binding.sourceColorView = explicitSourceColorView;
|
||||
binding.sourceColorState = explicitSourceColorState;
|
||||
binding.sourceColor = explicitSourceColor;
|
||||
|
||||
const CameraFrameColorSource graphManagedSource =
|
||||
ResolveCameraFrameStageGraphManagedColorSource(plan, stage);
|
||||
if (graphManagedSource != CameraFrameColorSource::ExplicitSurface) {
|
||||
binding.sourceSurfaceTemplate = &stageSurfaceTemplate;
|
||||
binding.sourceColorView = nullptr;
|
||||
binding.sourceColorState = RHI::ResourceStates::PixelShaderResource;
|
||||
binding.sourceColor =
|
||||
ResolveCameraFrameRenderGraphColorSource(
|
||||
blackboard,
|
||||
graphManagedSource);
|
||||
}
|
||||
|
||||
if (binding.sourceSurfaceTemplate == nullptr &&
|
||||
binding.sourceColor.IsValid()) {
|
||||
binding.sourceSurfaceTemplate = &stageSurfaceTemplate;
|
||||
}
|
||||
|
||||
return binding;
|
||||
}
|
||||
|
||||
} // namespace Rendering
|
||||
} // namespace XCEngine
|
||||
Reference in New Issue
Block a user