refactor(rendering): share stage runtime request resolution
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user