refactor(rendering): formalize camera-frame fallback surface io modes
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user