refactor(srp): add depth-aware managed fullscreen raster graph bridge

This commit is contained in:
2026-04-22 00:07:10 +08:00
parent 1bbbc22bcb
commit 08ff505b67
6 changed files with 258 additions and 7 deletions

View File

@@ -152,7 +152,8 @@ bool RecordCallbackRasterRenderPass(
const RenderPassRenderGraphContext& context,
const RenderPassGraphIO& io,
RenderPassGraphExecutePassCallback executePassCallback,
std::vector<RenderGraphTextureHandle> additionalReadTextures) {
std::vector<RenderGraphTextureHandle> additionalReadTextures,
std::vector<RenderGraphTextureHandle> additionalReadDepthTextures) {
if (!executePassCallback) {
return false;
}
@@ -191,6 +192,7 @@ bool RecordCallbackRasterRenderPass(
endPassCallback,
executePassCallback,
additionalReadTextures,
additionalReadDepthTextures,
io](
RenderGraphPassBuilder& passBuilder) {
if (io.readSourceColor && sourceColorTexture.IsValid()) {
@@ -203,6 +205,13 @@ bool RecordCallbackRasterRenderPass(
}
}
for (RenderGraphTextureHandle readDepthTexture :
additionalReadDepthTextures) {
if (readDepthTexture.IsValid()) {
passBuilder.ReadDepthTexture(readDepthTexture);
}
}
if (io.writeColor) {
for (RenderGraphTextureHandle colorTarget : colorTargets) {
if (colorTarget.IsValid()) {

View File

@@ -118,7 +118,9 @@ struct ManagedScriptableRenderContextState {
Rendering::FullscreenPassDesc passDesc = {};
Rendering::RenderGraphTextureHandle sourceColorTexture = {};
std::vector<Rendering::RenderGraphTextureHandle> readTextures = {};
std::vector<Rendering::RenderGraphTextureHandle> readDepthTextures = {};
std::vector<Rendering::RenderGraphTextureHandle> colorTargets = {};
Rendering::RenderGraphTextureHandle depthTarget = {};
};
uint64_t nextPendingRasterPassHandle = 1u;
std::unordered_map<uint64_t, RasterPassRecordRequest>
@@ -420,6 +422,8 @@ bool RecordManagedFullscreenRasterPass(
Rendering::RenderGraphTextureHandle sourceColorTexture,
std::vector<Rendering::RenderGraphTextureHandle> colorTargets,
std::vector<Rendering::RenderGraphTextureHandle> additionalReadTextures,
std::vector<Rendering::RenderGraphTextureHandle> additionalReadDepthTextures,
Rendering::RenderGraphTextureHandle depthTarget,
const Containers::String& passName) {
if (!Rendering::IsCameraFrameFullscreenSequenceStage(stageContext.stage) ||
!sourceColorTexture.IsValid() ||
@@ -442,7 +446,7 @@ bool RecordManagedFullscreenRasterPass(
params.overrideColorTargets = true;
params.colorTargets = std::move(colorTargets);
params.overrideDepthTarget = true;
params.depthTarget = {};
params.depthTarget = depthTarget;
const Rendering::RenderGraphRecordingContext recordingContext =
Rendering::BuildRenderGraphRecordingContext(
@@ -451,14 +455,18 @@ bool RecordManagedFullscreenRasterPass(
const Rendering::RenderPassRenderGraphContext renderGraphContext =
Rendering::BuildRenderPassRenderGraphContext(recordingContext);
Rendering::RenderPass* const passPtr = &pass;
Rendering::RenderPassGraphIO io =
Rendering::BuildSourceColorFullscreenRasterPassGraphIO();
io.writeDepth = depthTarget.IsValid();
return Rendering::RecordCallbackRasterRenderPass(
renderGraphContext,
Rendering::BuildSourceColorFullscreenRasterPassGraphIO(),
io,
[passPtr](const Rendering::RenderPassContext& passContext) {
return passPtr != nullptr &&
passPtr->Execute(passContext);
},
std::move(additionalReadTextures));
std::move(additionalReadTextures),
std::move(additionalReadDepthTextures));
}
bool RecordManagedFullscreenPassToTexture(
@@ -473,6 +481,8 @@ bool RecordManagedFullscreenPassToTexture(
sourceColorTexture,
{ outputColorTexture },
{},
{},
{},
passName);
}
@@ -1934,6 +1944,8 @@ private:
resolvedSourceColor,
resolvedColorTargets,
request.readTextures,
request.readDepthTextures,
request.depthTarget,
resolvedPassName)) {
return false;
}
@@ -4691,6 +4703,33 @@ InternalCall_Rendering_ScriptableRenderContext_AddRasterPassReadTexture(
return 1;
}
mono_bool
InternalCall_Rendering_ScriptableRenderContext_AddRasterPassReadDepthTexture(
uint64_t nativeHandle,
uint64_t rasterPassHandle,
int32_t textureHandle) {
ManagedScriptableRenderContextState* const state =
FindManagedScriptableRenderContextState(nativeHandle);
ManagedScriptableRenderContextState::RasterPassRecordRequest*
const request =
FindPendingManagedRasterPassRecordRequest(
state,
rasterPassHandle);
if (request == nullptr) {
return 0;
}
const Rendering::RenderGraphTextureHandle readDepthTexture =
DecodeManagedRenderGraphTextureHandle(
textureHandle);
if (!readDepthTexture.IsValid()) {
return 0;
}
request->readDepthTextures.push_back(readDepthTexture);
return 1;
}
mono_bool
InternalCall_Rendering_ScriptableRenderContext_SetRasterPassColorAttachment(
uint64_t nativeHandle,
@@ -4727,6 +4766,33 @@ InternalCall_Rendering_ScriptableRenderContext_SetRasterPassColorAttachment(
return 1;
}
mono_bool
InternalCall_Rendering_ScriptableRenderContext_SetRasterPassDepthAttachment(
uint64_t nativeHandle,
uint64_t rasterPassHandle,
int32_t textureHandle) {
ManagedScriptableRenderContextState* const state =
FindManagedScriptableRenderContextState(nativeHandle);
ManagedScriptableRenderContextState::RasterPassRecordRequest*
const request =
FindPendingManagedRasterPassRecordRequest(
state,
rasterPassHandle);
if (request == nullptr) {
return 0;
}
const Rendering::RenderGraphTextureHandle depthAttachment =
DecodeManagedRenderGraphTextureHandle(
textureHandle);
if (!depthAttachment.IsValid()) {
return 0;
}
request->depthTarget = depthAttachment;
return 1;
}
mono_bool
InternalCall_Rendering_ScriptableRenderContext_SetRasterPassColorScaleFullscreenExecution(
uint64_t nativeHandle,
@@ -6313,7 +6379,9 @@ void RegisterInternalCalls() {
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_BeginRasterPass", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_BeginRasterPass));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_SetRasterPassSourceColorTexture", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_SetRasterPassSourceColorTexture));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_AddRasterPassReadTexture", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_AddRasterPassReadTexture));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_AddRasterPassReadDepthTexture", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_AddRasterPassReadDepthTexture));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_SetRasterPassColorAttachment", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_SetRasterPassColorAttachment));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_SetRasterPassDepthAttachment", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_SetRasterPassDepthAttachment));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_SetRasterPassColorScaleFullscreenExecution", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_SetRasterPassColorScaleFullscreenExecution));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_SetRasterPassShaderVectorFullscreenExecution", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_SetRasterPassShaderVectorFullscreenExecution));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_SetRasterPassFinalColorFullscreenExecution", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_SetRasterPassFinalColorFullscreenExecution));