refactor(rendering): formalize camera-frame fallback surface io modes

This commit is contained in:
2026-04-15 13:16:13 +08:00
parent b97f9a1555
commit 07516b8c2c
3 changed files with 85 additions and 25 deletions

View File

@@ -69,6 +69,13 @@ std::vector<RenderGraphTextureHandle> BuildCameraFrameStageGraphDefaultColorTarg
return stageState.outputSurface.colorTextures;
}
RenderGraphSurfaceAccessMode BuildCameraFrameStageFallbackSurfaceAccessMode(
CameraFrameStage stage) {
return IsCameraFrameFullscreenSequenceStage(stage)
? RenderGraphSurfaceAccessMode::ColorOnly
: RenderGraphSurfaceAccessMode::ColorDepth;
}
} // namespace
CameraFrameRenderGraphSourceBinding BuildCameraFrameStageGraphSourceBinding(
@@ -521,14 +528,11 @@ bool RecordCameraFrameMainSceneGraphPass(
void RecordCameraFrameStageFallbackPassIO(
const CameraFrameStageGraphBuildState& stageState,
RenderGraphPassBuilder& passBuilder) {
if (IsCameraFrameFullscreenSequenceStage(stageState.stage)) {
ReadRenderGraphColorSurface(passBuilder, stageState.sourceSurface);
WriteRenderGraphColorSurface(passBuilder, stageState.outputSurface);
return;
}
ReadRenderGraphSurface(passBuilder, stageState.sourceSurface);
WriteRenderGraphSurface(passBuilder, stageState.outputSurface);
RecordRenderGraphSurfaceIO(
passBuilder,
stageState.sourceSurface,
stageState.outputSurface,
BuildCameraFrameStageFallbackSurfaceAccessMode(stageState.stage));
}
bool ExecuteCameraFrameStageFallbackPass(

View File

@@ -181,50 +181,85 @@ RenderGraphTextureHandle GetPrimaryColorTexture(
void ReadRenderGraphSurface(
RenderGraphPassBuilder& passBuilder,
const RenderGraphImportedSurface& surface) {
const RenderGraphImportedSurface& surface,
RenderGraphSurfaceAccessMode accessMode) {
for (RenderGraphTextureHandle texture : surface.colorTextures) {
if (texture.IsValid()) {
passBuilder.ReadTexture(texture);
}
}
if (surface.depthTexture.IsValid()) {
if (accessMode == RenderGraphSurfaceAccessMode::ColorDepth &&
surface.depthTexture.IsValid()) {
passBuilder.ReadDepthTexture(surface.depthTexture);
}
}
void ReadRenderGraphSurface(
RenderGraphPassBuilder& passBuilder,
const RenderGraphImportedSurface& surface) {
ReadRenderGraphSurface(
passBuilder,
surface,
RenderGraphSurfaceAccessMode::ColorDepth);
}
void ReadRenderGraphColorSurface(
RenderGraphPassBuilder& passBuilder,
const RenderGraphImportedSurface& surface) {
ReadRenderGraphSurface(
passBuilder,
surface,
RenderGraphSurfaceAccessMode::ColorOnly);
}
void WriteRenderGraphSurface(
RenderGraphPassBuilder& passBuilder,
const RenderGraphImportedSurface& surface,
RenderGraphSurfaceAccessMode accessMode) {
for (RenderGraphTextureHandle texture : surface.colorTextures) {
if (texture.IsValid()) {
passBuilder.ReadTexture(texture);
passBuilder.WriteTexture(texture);
}
}
if (accessMode == RenderGraphSurfaceAccessMode::ColorDepth &&
surface.depthTexture.IsValid()) {
passBuilder.WriteDepthTexture(surface.depthTexture);
}
}
void WriteRenderGraphSurface(
RenderGraphPassBuilder& passBuilder,
const RenderGraphImportedSurface& surface) {
for (RenderGraphTextureHandle texture : surface.colorTextures) {
if (texture.IsValid()) {
passBuilder.WriteTexture(texture);
}
}
if (surface.depthTexture.IsValid()) {
passBuilder.WriteDepthTexture(surface.depthTexture);
}
WriteRenderGraphSurface(
passBuilder,
surface,
RenderGraphSurfaceAccessMode::ColorDepth);
}
void WriteRenderGraphColorSurface(
RenderGraphPassBuilder& passBuilder,
const RenderGraphImportedSurface& surface) {
for (RenderGraphTextureHandle texture : surface.colorTextures) {
if (texture.IsValid()) {
passBuilder.WriteTexture(texture);
}
}
WriteRenderGraphSurface(
passBuilder,
surface,
RenderGraphSurfaceAccessMode::ColorOnly);
}
void RecordRenderGraphSurfaceIO(
RenderGraphPassBuilder& passBuilder,
const RenderGraphImportedSurface& sourceSurface,
const RenderGraphImportedSurface& outputSurface,
RenderGraphSurfaceAccessMode accessMode) {
ReadRenderGraphSurface(
passBuilder,
sourceSurface,
accessMode);
WriteRenderGraphSurface(
passBuilder,
outputSurface,
accessMode);
}
RenderSurface BuildGraphManagedImportedSurface(

View File

@@ -25,6 +25,11 @@ struct RenderGraphImportedSurface {
RenderGraphTextureHandle depthTexture = {};
};
enum class RenderGraphSurfaceAccessMode {
ColorOnly = 0,
ColorDepth = 1
};
using RenderGraphImportedTextureRegistry =
std::unordered_map<RHI::RHIResourceView*, RenderGraphTextureHandle>;
@@ -52,6 +57,11 @@ RenderGraphImportedSurface ImportRenderGraphSurface(
RenderGraphTextureHandle GetPrimaryColorTexture(
const RenderGraphImportedSurface& surface);
void ReadRenderGraphSurface(
RenderGraphPassBuilder& passBuilder,
const RenderGraphImportedSurface& surface,
RenderGraphSurfaceAccessMode accessMode);
void ReadRenderGraphSurface(
RenderGraphPassBuilder& passBuilder,
const RenderGraphImportedSurface& surface);
@@ -60,6 +70,11 @@ void ReadRenderGraphColorSurface(
RenderGraphPassBuilder& passBuilder,
const RenderGraphImportedSurface& surface);
void WriteRenderGraphSurface(
RenderGraphPassBuilder& passBuilder,
const RenderGraphImportedSurface& surface,
RenderGraphSurfaceAccessMode accessMode);
void WriteRenderGraphSurface(
RenderGraphPassBuilder& passBuilder,
const RenderGraphImportedSurface& surface);
@@ -68,6 +83,12 @@ void WriteRenderGraphColorSurface(
RenderGraphPassBuilder& passBuilder,
const RenderGraphImportedSurface& surface);
void RecordRenderGraphSurfaceIO(
RenderGraphPassBuilder& passBuilder,
const RenderGraphImportedSurface& sourceSurface,
const RenderGraphImportedSurface& outputSurface,
RenderGraphSurfaceAccessMode accessMode);
RenderSurface BuildGraphManagedImportedSurface(
const RenderSurface& templateSurface,
RHI::ResourceStates stateBefore,