Align URP pass queue to single camera snapshot

This commit is contained in:
2026-04-27 22:38:56 +08:00
parent 520413fa0d
commit eaa90d835f
9 changed files with 104 additions and 255 deletions

View File

@@ -380,8 +380,7 @@ namespace Gameplay
RenderingData renderingData)
{
if (renderer == null ||
renderingData == null ||
!renderingData.isShadowCasterStage)
renderingData == null)
{
return;
}
@@ -413,8 +412,7 @@ namespace Gameplay
for (int i = 0; i < m_passes.Length; ++i)
{
ScriptableRenderPass renderPass = m_passes[i];
if (renderPass == null ||
!renderPass.SupportsStage(renderingData.stage))
if (renderPass == null)
{
continue;
}
@@ -1694,40 +1692,41 @@ namespace Gameplay
new FullscreenPass(
RenderPassEvent.BeforeRenderingPostProcessing,
"ManagedPassQueueSnapshot.PostProcess");
private ulong m_enqueuedFramePlanId;
private bool m_enqueuedForCurrentFramePlan;
private readonly FullscreenPass m_unexpectedDuplicatePass =
new FullscreenPass(
RenderPassEvent.BeforeRenderingPostProcessing,
"ManagedPassQueueSnapshot.UnexpectedDuplicate");
private ulong m_addRenderPassesFramePlanId;
private int m_addRenderPassesCallCount;
public override void AddRenderPasses(
ScriptableRenderer renderer,
RenderingData renderingData)
{
if (renderer == null ||
renderingData == null ||
!renderingData.isPostProcessStage)
renderingData == null)
{
return;
}
if (renderingData.framePlanId == 0UL)
if (renderingData.framePlanId != 0UL &&
renderingData.framePlanId != m_addRenderPassesFramePlanId)
{
renderer.EnqueuePass(m_pass);
return;
}
if (renderingData.framePlanId != m_enqueuedFramePlanId)
{
m_enqueuedFramePlanId =
m_addRenderPassesFramePlanId =
renderingData.framePlanId;
m_enqueuedForCurrentFramePlan = false;
m_addRenderPassesCallCount = 0;
}
if (m_enqueuedForCurrentFramePlan)
if (renderingData.framePlanId != 0UL)
{
return;
m_addRenderPassesCallCount++;
if (m_addRenderPassesCallCount > 1)
{
renderer.EnqueuePass(m_unexpectedDuplicatePass);
}
}
renderer.EnqueuePass(m_pass);
m_enqueuedForCurrentFramePlan = true;
}
}