refactor(rendering): share stage runtime request resolution

This commit is contained in:
2026-04-15 15:55:16 +08:00
parent 5d54799f05
commit e93196c7d0
2 changed files with 34 additions and 28 deletions

View File

@@ -1,6 +1,7 @@
#include "Rendering/Execution/Internal/CameraFrameGraph/StageContract.h"
#include "Rendering/Execution/Internal/CameraFrameGraph/BuilderContext.h"
#include "Rendering/Execution/Internal/CameraFrameGraph/SurfaceResolver.h"
#include "Rendering/Execution/Internal/CameraFrameGraph/SurfaceUtils.h"
#include "Rendering/Execution/DirectionalShadowExecutionState.h"
#include "Rendering/Graph/RenderGraph.h"
@@ -31,20 +32,6 @@ struct CameraFrameStageRuntimeRequestBinding {
}
};
const ScenePassRenderRequest* ResolveRequestedScenePassRequest(
const ScenePassRenderRequest* request) {
return request != nullptr && request->IsRequested()
? request
: nullptr;
}
const ObjectIdRenderRequest* ResolveRequestedObjectIdRequest(
const ObjectIdRenderRequest* request) {
return request != nullptr && request->IsRequested()
? request
: nullptr;
}
CameraFrameStageRuntimeRequestBinding ResolveCameraFrameStageRuntimeRequestBinding(
CameraFrameStage stage,
const CameraFrameRenderGraphStageContext& context) {
@@ -52,19 +39,18 @@ CameraFrameStageRuntimeRequestBinding ResolveCameraFrameStageRuntimeRequestBindi
binding.requestKind = GetCameraFrameStageRequestKind(stage);
switch (binding.requestKind) {
case CameraFrameStageRequestKind::ShadowCaster:
binding.scenePassRequest =
ResolveRequestedScenePassRequest(
&context.shadowState.shadowCasterRequest);
break;
case CameraFrameStageRequestKind::DepthOnly:
binding.scenePassRequest =
ResolveRequestedScenePassRequest(
context.plan.GetScenePassRequest(stage));
ResolveCameraFrameStageRuntimeScenePassRequest(
stage,
context.plan,
context.shadowState);
break;
case CameraFrameStageRequestKind::ObjectId:
binding.objectIdRequest =
ResolveRequestedObjectIdRequest(
context.plan.GetObjectIdRequest(stage));
ResolveCameraFrameStageRuntimeObjectIdRequest(
stage,
context.plan);
break;
default:
break;

View File

@@ -13,7 +13,7 @@ struct CameraFrameStageSourceBinding {
RHI::ResourceStates sourceColorState = RHI::ResourceStates::Common;
};
inline const ScenePassRenderRequest* ResolveCameraFrameStageOutputScenePassRequest(
inline const ScenePassRenderRequest* ResolveCameraFrameStageRuntimeScenePassRequest(
CameraFrameStage stage,
const CameraFramePlan& plan,
const DirectionalShadowExecutionState& shadowState) {
@@ -23,12 +23,30 @@ inline const ScenePassRenderRequest* ResolveCameraFrameStageOutputScenePassReque
? &shadowState.shadowCasterRequest
: nullptr;
case CameraFrameStageRequestKind::DepthOnly:
return plan.GetScenePassRequest(stage);
if (const ScenePassRenderRequest* request =
plan.GetScenePassRequest(stage);
request != nullptr && request->IsRequested()) {
return request;
}
return nullptr;
default:
return nullptr;
}
}
inline const ObjectIdRenderRequest* ResolveCameraFrameStageRuntimeObjectIdRequest(
CameraFrameStage stage,
const CameraFramePlan& plan) {
if (const ObjectIdRenderRequest* request =
plan.GetObjectIdRequest(stage);
request != nullptr && request->IsRequested()) {
return request;
}
return nullptr;
}
inline const RenderSurface* ResolveCameraFrameStageOutputSurface(
CameraFrameStage stage,
const CameraFramePlan& plan,
@@ -40,11 +58,11 @@ inline const RenderSurface* ResolveCameraFrameStageOutputSurface(
}
if (const ScenePassRenderRequest* scenePassRequest =
ResolveCameraFrameStageOutputScenePassRequest(
ResolveCameraFrameStageRuntimeScenePassRequest(
stage,
plan,
shadowState);
scenePassRequest != nullptr && scenePassRequest->IsRequested()) {
scenePassRequest != nullptr) {
return &scenePassRequest->surface;
}
@@ -57,8 +75,10 @@ inline const RenderSurface* ResolveCameraFrameStageOutputSurface(
}
if (const ObjectIdRenderRequest* objectIdRequest =
plan.GetObjectIdRequest(stage);
objectIdRequest != nullptr && objectIdRequest->IsRequested()) {
ResolveCameraFrameStageRuntimeObjectIdRequest(
stage,
plan);
objectIdRequest != nullptr) {
return &objectIdRequest->surface;
}