refactor(srp): bind managed fullscreen auxiliary inputs through render graph
This commit is contained in:
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user