refactor(rendering): formalize compatible raster pass recording helpers
This commit is contained in:
@@ -59,6 +59,15 @@ 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) {
|
||||
@@ -86,6 +95,33 @@ 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,
|
||||
|
||||
@@ -12,15 +12,6 @@ namespace Rendering {
|
||||
|
||||
namespace {
|
||||
|
||||
bool RecordCameraFrameCompatibleGraphPass(
|
||||
RenderPass& pass,
|
||||
const RenderPassRenderGraphContext& context,
|
||||
const RenderPassGraphIO& io) {
|
||||
return pass.SupportsRenderGraph()
|
||||
? pass.RecordRenderGraph(context)
|
||||
: RecordRasterRenderPass(pass, context, io);
|
||||
}
|
||||
|
||||
bool ExecuteCameraFrameScenePassRequestStage(
|
||||
RenderPass* pass,
|
||||
const ScenePassRenderRequest& request,
|
||||
@@ -289,7 +280,7 @@ bool RecordCameraFrameRegularSequenceStageRenderGraphPass(
|
||||
const RenderGraphImportedSurface& outputSurface,
|
||||
const RenderPassGraphBeginCallback& beginPassCallback,
|
||||
RenderPass& pass) {
|
||||
return RecordCameraFrameCompatibleGraphPass(
|
||||
return RecordCompatibleDeclaredRasterPass(
|
||||
pass,
|
||||
BuildRenderPassRenderGraphContext(
|
||||
BuildCameraFrameStageGraphRecordingContext(
|
||||
@@ -300,12 +291,7 @@ bool RecordCameraFrameRegularSequenceStageRenderGraphPass(
|
||||
BuildCameraFrameStageGraphSourceBinding(stageState),
|
||||
outputSurface.colorTextures,
|
||||
outputSurface.depthTexture),
|
||||
beginPassCallback),
|
||||
{
|
||||
false,
|
||||
GetPrimaryColorTexture(outputSurface).IsValid(),
|
||||
outputSurface.depthTexture.IsValid()
|
||||
});
|
||||
beginPassCallback));
|
||||
}
|
||||
|
||||
CameraFrameRenderGraphSourceBinding ResolveCameraFrameFullscreenStageGraphSourceBinding(
|
||||
@@ -447,7 +433,7 @@ bool RecordCameraFrameFullscreenSequenceStageGraphPass(
|
||||
currentSourceColor
|
||||
};
|
||||
const bool recordSucceeded =
|
||||
RecordCameraFrameCompatibleGraphPass(
|
||||
RecordCompatibleSourceColorFullscreenRasterPass(
|
||||
pass,
|
||||
BuildRenderPassRenderGraphContext(
|
||||
BuildCameraFrameStageGraphRecordingContext(
|
||||
@@ -458,12 +444,7 @@ bool RecordCameraFrameFullscreenSequenceStageGraphPass(
|
||||
passSourceBinding,
|
||||
std::vector<RenderGraphTextureHandle>{ passOutputColor },
|
||||
{}),
|
||||
beginPassCallback),
|
||||
{
|
||||
true,
|
||||
true,
|
||||
false
|
||||
});
|
||||
beginPassCallback));
|
||||
if (recordSucceeded) {
|
||||
currentSourceColor = passOutputColor;
|
||||
}
|
||||
|
||||
@@ -49,6 +49,32 @@ RenderPassContext BuildPassContext(
|
||||
};
|
||||
}
|
||||
|
||||
class CompatibleRecordingRenderPass 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;
|
||||
}
|
||||
|
||||
bool Execute(const RenderPassContext&) override {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool supportsRenderGraph = false;
|
||||
bool recordRenderGraphResult = true;
|
||||
int recordRenderGraphCalls = 0;
|
||||
XCEngine::Containers::String lastPassName = {};
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
TEST(RenderPassGraphContract_Test, BuildsSourceColorFullscreenRasterPassGraphIO) {
|
||||
@@ -98,6 +124,63 @@ TEST(RenderPassGraphContract_Test, BuildsDeclaredRasterPassGraphIOFromContextRes
|
||||
EXPECT_TRUE(io.writeDepth);
|
||||
}
|
||||
|
||||
TEST(RenderPassGraphContract_Test, RecordCompatibleDeclaredRasterPassUsesRenderGraphPathWhenSupported) {
|
||||
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 = 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);
|
||||
EXPECT_EQ(graph.GetPassCount(), 1u);
|
||||
}
|
||||
|
||||
TEST(RenderGraphRecordingContext_Test, BuildsRenderPassContextFromSharedRecordingData) {
|
||||
RenderGraph graph = {};
|
||||
RenderGraphBuilder builder(graph);
|
||||
|
||||
Reference in New Issue
Block a user