refactor(rendering): shrink render pass graph compatibility helpers
This commit is contained in:
@@ -59,15 +59,6 @@ bool RecordRasterRenderPass(
|
||||
const RenderPassRenderGraphContext& context,
|
||||
const RenderPassGraphIO& io);
|
||||
|
||||
inline bool RecordCompatibleRasterRenderPass(
|
||||
RenderPass& pass,
|
||||
const RenderPassRenderGraphContext& context,
|
||||
const RenderPassGraphIO& io) {
|
||||
return pass.SupportsRenderGraph()
|
||||
? pass.RecordRenderGraph(context)
|
||||
: RecordRasterRenderPass(pass, context, io);
|
||||
}
|
||||
|
||||
inline bool RecordSourceColorFullscreenRasterPass(
|
||||
RenderPass& pass,
|
||||
const RenderPassRenderGraphContext& context) {
|
||||
@@ -95,33 +86,6 @@ inline bool RecordDeclaredRasterPass(
|
||||
BuildDeclaredRasterPassGraphIO(context));
|
||||
}
|
||||
|
||||
inline bool RecordCompatibleSourceColorFullscreenRasterPass(
|
||||
RenderPass& pass,
|
||||
const RenderPassRenderGraphContext& context) {
|
||||
return RecordCompatibleRasterRenderPass(
|
||||
pass,
|
||||
context,
|
||||
BuildSourceColorFullscreenRasterPassGraphIO());
|
||||
}
|
||||
|
||||
inline bool RecordCompatibleColorDepthRasterPass(
|
||||
RenderPass& pass,
|
||||
const RenderPassRenderGraphContext& context) {
|
||||
return RecordCompatibleRasterRenderPass(
|
||||
pass,
|
||||
context,
|
||||
BuildColorDepthRasterPassGraphIO());
|
||||
}
|
||||
|
||||
inline bool RecordCompatibleDeclaredRasterPass(
|
||||
RenderPass& pass,
|
||||
const RenderPassRenderGraphContext& context) {
|
||||
return RecordCompatibleRasterRenderPass(
|
||||
pass,
|
||||
context,
|
||||
BuildDeclaredRasterPassGraphIO(context));
|
||||
}
|
||||
|
||||
inline bool RecordSourceColorFullscreenCallbackRasterPass(
|
||||
const RenderPassRenderGraphContext& context,
|
||||
RenderPassGraphExecutePassCallback executePassCallback,
|
||||
|
||||
@@ -92,6 +92,18 @@ bool ExecuteCameraFrameStandaloneStagePass(
|
||||
});
|
||||
}
|
||||
|
||||
bool RecordCameraFrameFallbackCompatibleRenderPass(
|
||||
RenderPass& pass,
|
||||
const RenderPassRenderGraphContext& renderGraphContext,
|
||||
const RenderPassGraphIO& fallbackIo) {
|
||||
return pass.SupportsRenderGraph()
|
||||
? pass.RecordRenderGraph(renderGraphContext)
|
||||
: RecordRasterRenderPass(
|
||||
pass,
|
||||
renderGraphContext,
|
||||
fallbackIo);
|
||||
}
|
||||
|
||||
std::vector<RenderGraphTextureHandle> BuildCameraFrameStageGraphDefaultColorTargets(
|
||||
const CameraFrameStageGraphBuildState& stageState) {
|
||||
if (stageState.outputColor.IsValid()) {
|
||||
@@ -335,8 +347,7 @@ bool RecordCameraFrameRegularSequenceStageRenderGraphPass(
|
||||
const RenderGraphImportedSurface& outputSurface,
|
||||
const RenderPassGraphBeginCallback& beginPassCallback,
|
||||
RenderPass& pass) {
|
||||
return RecordCompatibleDeclaredRasterPass(
|
||||
pass,
|
||||
const RenderPassRenderGraphContext renderGraphContext =
|
||||
BuildRenderPassRenderGraphContext(
|
||||
BuildCameraFrameStageGraphRecordingContext(
|
||||
context,
|
||||
@@ -346,7 +357,11 @@ bool RecordCameraFrameRegularSequenceStageRenderGraphPass(
|
||||
BuildCameraFrameStageGraphSourceBinding(stageState),
|
||||
outputSurface.colorTextures,
|
||||
outputSurface.depthTexture),
|
||||
beginPassCallback));
|
||||
beginPassCallback);
|
||||
return RecordCameraFrameFallbackCompatibleRenderPass(
|
||||
pass,
|
||||
renderGraphContext,
|
||||
BuildDeclaredRasterPassGraphIO(renderGraphContext));
|
||||
}
|
||||
|
||||
CameraFrameRenderGraphSourceBinding ResolveCameraFrameFullscreenStageGraphSourceBinding(
|
||||
@@ -494,19 +509,22 @@ bool RecordCameraFrameFullscreenSequenceStageGraphPass(
|
||||
: RHI::ResourceStates::PixelShaderResource,
|
||||
currentSourceColor
|
||||
};
|
||||
const RenderPassRenderGraphContext renderGraphContext =
|
||||
BuildRenderPassRenderGraphContext(
|
||||
BuildCameraFrameStageGraphRecordingContext(
|
||||
context,
|
||||
stageState,
|
||||
passName,
|
||||
context.sceneData,
|
||||
passSourceBinding,
|
||||
std::vector<RenderGraphTextureHandle>{ passOutputColor },
|
||||
{}),
|
||||
beginPassCallback);
|
||||
const bool recordSucceeded =
|
||||
RecordCompatibleSourceColorFullscreenRasterPass(
|
||||
RecordCameraFrameFallbackCompatibleRenderPass(
|
||||
pass,
|
||||
BuildRenderPassRenderGraphContext(
|
||||
BuildCameraFrameStageGraphRecordingContext(
|
||||
context,
|
||||
stageState,
|
||||
passName,
|
||||
context.sceneData,
|
||||
passSourceBinding,
|
||||
std::vector<RenderGraphTextureHandle>{ passOutputColor },
|
||||
{}),
|
||||
beginPassCallback));
|
||||
renderGraphContext,
|
||||
BuildSourceColorFullscreenRasterPassGraphIO());
|
||||
if (recordSucceeded) {
|
||||
currentSourceColor = passOutputColor;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include <XCEngine/Rendering/RenderPassGraphContract.h>
|
||||
|
||||
#include "Rendering/Execution/Internal/CameraFrameGraph/SurfaceUtils.h"
|
||||
#include "Rendering/FrameData/RenderSceneData.h"
|
||||
#include "Rendering/Graph/RenderGraph.h"
|
||||
|
||||
@@ -10,24 +11,6 @@ namespace XCEngine {
|
||||
namespace Rendering {
|
||||
namespace {
|
||||
|
||||
RenderSurface BuildGraphManagedImportedSurface(
|
||||
const RenderSurface& templateSurface,
|
||||
RHI::ResourceStates colorStateBefore,
|
||||
RHI::ResourceStates colorStateAfter) {
|
||||
RenderSurface surface = templateSurface;
|
||||
surface.SetAutoTransitionEnabled(false);
|
||||
surface.SetColorStateBefore(colorStateBefore);
|
||||
surface.SetColorStateAfter(colorStateAfter);
|
||||
return surface;
|
||||
}
|
||||
|
||||
RenderSurface BuildGraphManagedPassSurface(
|
||||
const RenderSurface& templateSurface) {
|
||||
RenderSurface surface = templateSurface;
|
||||
surface.SetAutoTransitionEnabled(false);
|
||||
return surface;
|
||||
}
|
||||
|
||||
bool ResolveGraphManagedSourceSurface(
|
||||
const RenderSurface* sourceSurfaceTemplate,
|
||||
RHI::RHIResourceView* sourceColorView,
|
||||
|
||||
@@ -49,30 +49,17 @@ RenderPassContext BuildPassContext(
|
||||
};
|
||||
}
|
||||
|
||||
class CompatibleRecordingRenderPass final : public RenderPass {
|
||||
class RasterRecordingRenderPass final : public RenderPass {
|
||||
public:
|
||||
const char* GetName() const override {
|
||||
return "CompatibleRecordingRenderPass";
|
||||
}
|
||||
|
||||
bool SupportsRenderGraph() const override {
|
||||
return supportsRenderGraph;
|
||||
}
|
||||
|
||||
bool RecordRenderGraph(const RenderPassRenderGraphContext& context) override {
|
||||
++recordRenderGraphCalls;
|
||||
lastPassName = context.passName;
|
||||
return recordRenderGraphResult;
|
||||
return "RasterRecordingRenderPass";
|
||||
}
|
||||
|
||||
bool Execute(const RenderPassContext&) override {
|
||||
return true;
|
||||
return executeResult;
|
||||
}
|
||||
|
||||
bool supportsRenderGraph = false;
|
||||
bool recordRenderGraphResult = true;
|
||||
int recordRenderGraphCalls = 0;
|
||||
XCEngine::Containers::String lastPassName = {};
|
||||
bool executeResult = true;
|
||||
};
|
||||
|
||||
} // namespace
|
||||
@@ -124,7 +111,7 @@ TEST(RenderPassGraphContract_Test, BuildsDeclaredRasterPassGraphIOFromContextRes
|
||||
EXPECT_TRUE(io.writeDepth);
|
||||
}
|
||||
|
||||
TEST(RenderPassGraphContract_Test, RecordCompatibleDeclaredRasterPassUsesRenderGraphPathWhenSupported) {
|
||||
TEST(RenderPassGraphContract_Test, RecordDeclaredRasterPassAddsRasterPassToGraph) {
|
||||
RenderGraph graph = {};
|
||||
RenderGraphBuilder builder(graph);
|
||||
RenderGraphBlackboard blackboard = {};
|
||||
@@ -144,40 +131,8 @@ TEST(RenderPassGraphContract_Test, RecordCompatibleDeclaredRasterPassUsesRenderG
|
||||
sourceSurface,
|
||||
executionSucceeded));
|
||||
|
||||
CompatibleRecordingRenderPass pass = {};
|
||||
pass.supportsRenderGraph = true;
|
||||
|
||||
EXPECT_TRUE(RecordCompatibleDeclaredRasterPass(pass, passContext));
|
||||
EXPECT_EQ(pass.recordRenderGraphCalls, 1);
|
||||
EXPECT_EQ(pass.lastPassName, XCEngine::Containers::String("Recording.Pass"));
|
||||
EXPECT_EQ(graph.GetPassCount(), 0u);
|
||||
}
|
||||
|
||||
TEST(RenderPassGraphContract_Test, RecordCompatibleDeclaredRasterPassFallsBackToNativeRasterRecording) {
|
||||
RenderGraph graph = {};
|
||||
RenderGraphBuilder builder(graph);
|
||||
RenderGraphBlackboard blackboard = {};
|
||||
RenderContext renderContext = {};
|
||||
RenderSceneData sceneData = {};
|
||||
RenderSurface surface(1280u, 720u);
|
||||
RenderSurface sourceSurface(640u, 360u);
|
||||
bool executionSucceeded = true;
|
||||
const RenderPassRenderGraphContext passContext =
|
||||
BuildRenderPassRenderGraphContext(
|
||||
BuildCommonContext(
|
||||
builder,
|
||||
blackboard,
|
||||
renderContext,
|
||||
sceneData,
|
||||
surface,
|
||||
sourceSurface,
|
||||
executionSucceeded));
|
||||
|
||||
CompatibleRecordingRenderPass pass = {};
|
||||
pass.supportsRenderGraph = false;
|
||||
|
||||
EXPECT_TRUE(RecordCompatibleDeclaredRasterPass(pass, passContext));
|
||||
EXPECT_EQ(pass.recordRenderGraphCalls, 0);
|
||||
RasterRecordingRenderPass pass = {};
|
||||
EXPECT_TRUE(RecordDeclaredRasterPass(pass, passContext));
|
||||
EXPECT_EQ(graph.GetPassCount(), 1u);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user