diff --git a/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageContract.cpp b/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageContract.cpp index b506ab80..3387c784 100644 --- a/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageContract.cpp +++ b/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageContract.cpp @@ -19,6 +19,22 @@ CameraFrameRenderGraphSourceBinding BuildCameraFrameStageGraphSourceBinding( }; } +RenderPassContext BuildCameraFrameStageGraphPassContext( + const CameraFrameRenderGraphStageContext& context, + const CameraFrameStageGraphBuildState& stageState, + const RenderSceneData& sceneData) { + const CameraFrameRenderGraphSourceBinding sourceBinding = + BuildCameraFrameStageGraphSourceBinding(stageState); + return { + context.plan.request.context, + stageState.surfaceTemplate, + sceneData, + sourceBinding.sourceSurfaceTemplate, + sourceBinding.sourceColorView, + sourceBinding.sourceColorState + }; +} + CameraFrameRenderGraphSourceBinding ResolveCameraFrameFullscreenStageGraphSourceBinding( const CameraFramePlan& plan, CameraFrameStage stage, diff --git a/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageContract.h b/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageContract.h index 70454d24..a4e14339 100644 --- a/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageContract.h +++ b/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageContract.h @@ -23,6 +23,11 @@ struct CameraFrameStageFallbackSurfaceResolution { CameraFrameRenderGraphSourceBinding BuildCameraFrameStageGraphSourceBinding( const CameraFrameStageGraphBuildState& stageState); +RenderPassContext BuildCameraFrameStageGraphPassContext( + const CameraFrameRenderGraphStageContext& context, + const CameraFrameStageGraphBuildState& stageState, + const RenderSceneData& sceneData); + CameraFrameRenderGraphSourceBinding ResolveCameraFrameFullscreenStageGraphSourceBinding( const CameraFramePlan& plan, CameraFrameStage stage, diff --git a/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageState.cpp b/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageState.cpp index bee5a2ed..35fa504b 100644 --- a/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageState.cpp +++ b/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageState.cpp @@ -10,22 +10,6 @@ namespace XCEngine { namespace Rendering { -RenderPassContext BuildCameraFrameStageGraphPassContext( - const CameraFrameRenderGraphStageContext& context, - const CameraFrameStageGraphBuildState& stageState, - const RenderSceneData& sceneData) { - return { - context.plan.request.context, - stageState.surfaceTemplate, - sceneData, - stageState.hasSourceSurface - ? &stageState.sourceSurfaceTemplate - : nullptr, - stageState.sourceColorView, - stageState.sourceColorState - }; -} - CameraFrameStageGraphBuildState BuildCameraFrameStageGraphBuildState( CameraFrameStage stage, const CameraFrameRenderGraphStageContext& context) { diff --git a/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageState.h b/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageState.h index e6a616d4..5a5d1f4e 100644 --- a/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageState.h +++ b/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageState.h @@ -23,11 +23,6 @@ struct CameraFrameStageGraphBuildState { RenderGraphTextureHandle outputColor = {}; }; -RenderPassContext BuildCameraFrameStageGraphPassContext( - const CameraFrameRenderGraphStageContext& context, - const CameraFrameStageGraphBuildState& stageState, - const RenderSceneData& sceneData); - CameraFrameStageGraphBuildState BuildCameraFrameStageGraphBuildState( CameraFrameStage stage, const CameraFrameRenderGraphStageContext& context); diff --git a/tests/Rendering/unit/test_camera_frame_render_graph_stage_contract.cpp b/tests/Rendering/unit/test_camera_frame_render_graph_stage_contract.cpp index db8bb20a..8bc744bc 100644 --- a/tests/Rendering/unit/test_camera_frame_render_graph_stage_contract.cpp +++ b/tests/Rendering/unit/test_camera_frame_render_graph_stage_contract.cpp @@ -63,6 +63,59 @@ TEST(CameraFrameRenderGraphStageContract_Test, BuildsSourceBindingFromStageState EXPECT_EQ(binding.sourceColor.index, 7u); } +TEST(CameraFrameRenderGraphStageContract_Test, BuildsPassContextFromStageState) { + RenderGraph graph = {}; + RenderGraphBuilder graphBuilder(graph); + RenderGraphBlackboard blackboard = {}; + CameraFrameRenderGraphFrameData& frameData = + EmplaceCameraFrameRenderGraphFrameData(blackboard); + RenderGraphImportedTextureRegistry importedTextures = {}; + CameraFrameExecutionState executionState = {}; + bool stageExecutionSucceeded = true; + CameraFrameRenderGraphBuilderContext builderContext = { + graphBuilder, + blackboard, + frameData, + importedTextures, + executionState, + stageExecutionSucceeded + }; + CameraFramePlan plan = {}; + plan.request.context.backendType = XCEngine::RHI::RHIType::D3D12; + DirectionalShadowExecutionState shadowState = {}; + RenderSceneData sceneData = {}; + const CameraFrameRenderGraphStageContext context = { + plan, + shadowState, + sceneData, + builderContext + }; + + CameraFrameStageGraphBuildState stageState = {}; + stageState.surfaceTemplate = RenderSurface(800, 600); + stageState.hasSourceSurface = true; + stageState.sourceSurfaceTemplate = RenderSurface(640, 360); + stageState.sourceColorView = + reinterpret_cast(17); + stageState.sourceColorState = XCEngine::RHI::ResourceStates::PixelShaderResource; + + const RenderPassContext passContext = + BuildCameraFrameStageGraphPassContext( + context, + stageState, + sceneData); + + EXPECT_EQ(&passContext.renderContext, &plan.request.context); + EXPECT_EQ(&passContext.sceneData, &sceneData); + EXPECT_EQ(passContext.surface.GetWidth(), 800u); + ASSERT_NE(passContext.sourceSurface, nullptr); + EXPECT_EQ(passContext.sourceSurface->GetWidth(), 640u); + EXPECT_EQ(passContext.sourceColorView, stageState.sourceColorView); + EXPECT_EQ( + passContext.sourceColorState, + XCEngine::RHI::ResourceStates::PixelShaderResource); +} + TEST(CameraFrameRenderGraphStageContract_Test, BuildsRecordingContextFromStageStateAndOverrides) { RenderGraph graph = {}; RenderGraphBuilder graphBuilder(graph);