refactor(srp): add depth-aware managed fullscreen raster graph bridge
This commit is contained in:
@@ -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()) {
|
||||
|
||||
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user