refactor(srp): bind managed fullscreen auxiliary inputs through render graph

This commit is contained in:
2026-04-22 00:43:25 +08:00
parent b40eeb32b8
commit 4dda59a510
10 changed files with 976 additions and 213 deletions

View File

@@ -119,6 +119,8 @@ struct ManagedScriptableRenderContextState {
Rendering::RenderGraphTextureHandle sourceColorTexture = {};
std::vector<Rendering::RenderGraphTextureHandle> readTextures = {};
std::vector<Rendering::RenderGraphTextureHandle> readDepthTextures = {};
std::vector<Rendering::RenderPassGraphTextureBindingRequest>
textureBindings = {};
std::vector<Rendering::RenderGraphTextureHandle> colorTargets = {};
Rendering::RenderGraphTextureHandle depthTarget = {};
};
@@ -423,6 +425,8 @@ bool RecordManagedFullscreenRasterPass(
std::vector<Rendering::RenderGraphTextureHandle> colorTargets,
std::vector<Rendering::RenderGraphTextureHandle> additionalReadTextures,
std::vector<Rendering::RenderGraphTextureHandle> additionalReadDepthTextures,
std::vector<Rendering::RenderPassGraphTextureBindingRequest>
textureBindings,
Rendering::RenderGraphTextureHandle depthTarget,
const Containers::String& passName) {
if (!Rendering::IsCameraFrameFullscreenSequenceStage(stageContext.stage) ||
@@ -466,7 +470,8 @@ bool RecordManagedFullscreenRasterPass(
passPtr->Execute(passContext);
},
std::move(additionalReadTextures),
std::move(additionalReadDepthTextures));
std::move(additionalReadDepthTextures),
std::move(textureBindings));
}
bool RecordManagedFullscreenPassToTexture(
@@ -483,6 +488,7 @@ bool RecordManagedFullscreenPassToTexture(
{},
{},
{},
{},
passName);
}
@@ -1945,6 +1951,7 @@ private:
resolvedColorTargets,
request.readTextures,
request.readDepthTextures,
request.textureBindings,
request.depthTarget,
resolvedPassName)) {
return false;
@@ -4730,6 +4737,67 @@ InternalCall_Rendering_ScriptableRenderContext_AddRasterPassReadDepthTexture(
return 1;
}
mono_bool
InternalCall_Rendering_ScriptableRenderContext_AddRasterPassTextureBinding(
uint64_t nativeHandle,
uint64_t rasterPassHandle,
MonoString* shaderResourceName,
int32_t textureHandle,
mono_bool isDepth) {
ManagedScriptableRenderContextState* const state =
FindManagedScriptableRenderContextState(nativeHandle);
ManagedScriptableRenderContextState::RasterPassRecordRequest*
const request =
FindPendingManagedRasterPassRecordRequest(
state,
rasterPassHandle);
if (request == nullptr) {
return 0;
}
const Containers::String shaderResourceNameString(
MonoStringToUtf8(shaderResourceName).c_str());
if (shaderResourceNameString.Empty()) {
return 0;
}
const Rendering::RenderGraphTextureHandle texture =
DecodeManagedRenderGraphTextureHandle(
textureHandle);
if (!texture.IsValid()) {
return 0;
}
Rendering::RenderPassGraphTextureBindingRequest
bindingRequest = {};
bindingRequest.resourceName =
shaderResourceNameString;
bindingRequest.texture = texture;
bindingRequest.aspect =
isDepth != 0
? Rendering::RenderGraphTextureAspect::Depth
: Rendering::RenderGraphTextureAspect::Color;
auto existingBinding =
std::find_if(
request->textureBindings.begin(),
request->textureBindings.end(),
[&shaderResourceNameString](
const Rendering::RenderPassGraphTextureBindingRequest&
existingRequest) {
return existingRequest.resourceName ==
shaderResourceNameString;
});
if (existingBinding != request->textureBindings.end()) {
*existingBinding = std::move(bindingRequest);
} else {
request->textureBindings.push_back(
std::move(bindingRequest));
}
return 1;
}
mono_bool
InternalCall_Rendering_ScriptableRenderContext_SetRasterPassColorAttachment(
uint64_t nativeHandle,
@@ -6380,6 +6448,7 @@ void RegisterInternalCalls() {
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_AddRasterPassTextureBinding", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_AddRasterPassTextureBinding));
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));