Tighten URP pass queue snapshot ownership
This commit is contained in:
@@ -1796,6 +1796,7 @@ public:
|
||||
m_ownedSceneDrawBackend->Shutdown();
|
||||
}
|
||||
m_ownedSharedPipelineBackendAsset.reset();
|
||||
m_supportsStageContextualWithFramePlanMethod = nullptr;
|
||||
m_supportsStageContextualMethod = nullptr;
|
||||
m_supportsStageMethod = nullptr;
|
||||
m_recordStageMethod = nullptr;
|
||||
@@ -1813,7 +1814,8 @@ public:
|
||||
return SupportsStageRenderGraph(
|
||||
Rendering::RenderPipelineStageSupportContext{
|
||||
stage,
|
||||
-1 });
|
||||
-1,
|
||||
0u });
|
||||
}
|
||||
|
||||
bool SupportsStageRenderGraph(
|
||||
@@ -1828,6 +1830,36 @@ public:
|
||||
return false;
|
||||
}
|
||||
|
||||
MonoMethod* const contextualWithFramePlanMethod =
|
||||
ResolveSupportsStageContextualWithFramePlanMethod(
|
||||
pipelineObject);
|
||||
if (contextualWithFramePlanMethod != nullptr) {
|
||||
int32_t managedStage =
|
||||
static_cast<int32_t>(context.stage);
|
||||
int32_t rendererIndex =
|
||||
context.rendererIndex;
|
||||
uint64_t framePlanId =
|
||||
context.framePlanId;
|
||||
void* args[3] = {
|
||||
&managedStage,
|
||||
&rendererIndex,
|
||||
&framePlanId };
|
||||
MonoObject* result = nullptr;
|
||||
if (!m_runtime->InvokeManagedMethod(
|
||||
pipelineObject,
|
||||
contextualWithFramePlanMethod,
|
||||
args,
|
||||
&result)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool supportsStage = false;
|
||||
return TryUnboxManagedBoolean(
|
||||
result,
|
||||
supportsStage) &&
|
||||
supportsStage;
|
||||
}
|
||||
|
||||
MonoMethod* const contextualMethod =
|
||||
ResolveSupportsStageContextualMethod(
|
||||
pipelineObject);
|
||||
@@ -1964,6 +1996,7 @@ private:
|
||||
}
|
||||
|
||||
if (pipelineHandle != m_resolvedPipelineHandle) {
|
||||
m_supportsStageContextualWithFramePlanMethod = nullptr;
|
||||
m_supportsStageContextualMethod = nullptr;
|
||||
m_supportsStageMethod = nullptr;
|
||||
m_recordStageMethod = nullptr;
|
||||
@@ -1973,6 +2006,19 @@ private:
|
||||
return m_runtime->GetManagedObject(pipelineHandle);
|
||||
}
|
||||
|
||||
MonoMethod* ResolveSupportsStageContextualWithFramePlanMethod(
|
||||
MonoObject* pipelineObject) const {
|
||||
if (m_supportsStageContextualWithFramePlanMethod == nullptr) {
|
||||
m_supportsStageContextualWithFramePlanMethod =
|
||||
m_runtime->ResolveManagedMethod(
|
||||
pipelineObject,
|
||||
"SupportsStageRenderGraphContextual",
|
||||
3);
|
||||
}
|
||||
|
||||
return m_supportsStageContextualWithFramePlanMethod;
|
||||
}
|
||||
|
||||
MonoMethod* ResolveSupportsStageContextualMethod(
|
||||
MonoObject* pipelineObject) const {
|
||||
if (m_supportsStageContextualMethod == nullptr) {
|
||||
@@ -2159,6 +2205,7 @@ private:
|
||||
|
||||
std::shared_ptr<const MonoManagedRenderPipelineAssetRuntime> m_assetRuntime;
|
||||
MonoScriptRuntime* m_runtime = nullptr;
|
||||
mutable MonoMethod* m_supportsStageContextualWithFramePlanMethod = nullptr;
|
||||
mutable MonoMethod* m_supportsStageContextualMethod = nullptr;
|
||||
mutable MonoMethod* m_supportsStageMethod = nullptr;
|
||||
mutable MonoMethod* m_recordStageMethod = nullptr;
|
||||
@@ -4703,6 +4750,16 @@ int32_t InternalCall_Rendering_ScriptableRenderContext_GetRendererIndex(
|
||||
: -1;
|
||||
}
|
||||
|
||||
uint64_t InternalCall_Rendering_ScriptableRenderContext_GetFramePlanId(
|
||||
uint64_t nativeHandle) {
|
||||
const ManagedScriptableRenderContextState* const state =
|
||||
FindManagedScriptableRenderContextState(nativeHandle);
|
||||
return state != nullptr &&
|
||||
state->graphContext != nullptr
|
||||
? state->graphContext->framePlanId
|
||||
: 0u;
|
||||
}
|
||||
|
||||
int32_t InternalCall_Rendering_ScriptableRenderContext_GetSourceColorTextureHandle(
|
||||
uint64_t nativeHandle) {
|
||||
const ManagedScriptableRenderContextState* const state =
|
||||
@@ -6235,6 +6292,17 @@ InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_GetRendererIndex(
|
||||
: -1;
|
||||
}
|
||||
|
||||
uint64_t
|
||||
InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_GetFramePlanId(
|
||||
uint64_t nativeHandle) {
|
||||
const ManagedScriptableRenderPipelinePlanningContextState* const state =
|
||||
FindManagedScriptableRenderPipelinePlanningContextState(nativeHandle);
|
||||
return state != nullptr &&
|
||||
state->plan != nullptr
|
||||
? state->plan->framePlanId
|
||||
: 0u;
|
||||
}
|
||||
|
||||
mono_bool
|
||||
InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_IsStageRequested(
|
||||
uint64_t nativeHandle,
|
||||
@@ -6597,6 +6665,7 @@ void RegisterInternalCalls() {
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_GetRenderPipelineAsset", reinterpret_cast<const void*>(&InternalCall_Rendering_GetRenderPipelineAsset));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_GetStage", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_GetStage));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_GetRendererIndex", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_GetRendererIndex));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_GetFramePlanId", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_GetFramePlanId));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_GetSourceColorTextureHandle", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_GetSourceColorTextureHandle));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_GetPrimaryColorTargetHandle", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_GetPrimaryColorTargetHandle));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_GetDepthTargetHandle", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_GetDepthTargetHandle));
|
||||
@@ -6668,6 +6737,7 @@ void RegisterInternalCalls() {
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_RecordScenePhase", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_RecordScenePhase));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_DrawRenderersByDesc", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_DrawRenderersByDesc));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderPipelinePlanningContext_GetRendererIndex", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_GetRendererIndex));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderPipelinePlanningContext_GetFramePlanId", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_GetFramePlanId));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderPipelinePlanningContext_IsStageRequested", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_IsStageRequested));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderPipelinePlanningContext_GetStageColorSource", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_GetStageColorSource));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderPipelinePlanningContext_GetStageUsesGraphManagedOutputColor", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_GetStageUsesGraphManagedOutputColor));
|
||||
|
||||
Reference in New Issue
Block a user