Skip to content

Commit f742305

Browse files
YohannVaastUnityEvergreen
authored andcommitted
[Port] [6000.0] RenderGraph - Fix "Cannot return local 'actualPasses'" error
1 parent fa2fca0 commit f742305

File tree

3 files changed

+22
-7
lines changed

3 files changed

+22
-7
lines changed

Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -656,7 +656,7 @@ void DetectMemoryLessResources()
656656
foreach (ref readonly var nativePass in contextData.NativePasses)
657657
{
658658
// Loop over all created resources by this nrp
659-
var graphPasses = nativePass.GraphPasses(contextData);
659+
var graphPasses = nativePass.GraphPasses(contextData, out var actualPasses);
660660
foreach (ref readonly var subPass in graphPasses)
661661
{
662662
foreach (ref readonly var createdRes in subPass.FirstUsedResources(contextData))
@@ -698,6 +698,8 @@ void DetectMemoryLessResources()
698698
}
699699
}
700700
}
701+
if (actualPasses.IsCreated)
702+
actualPasses.Dispose();
701703
}
702704
}
703705
}
@@ -742,7 +744,8 @@ private void ExecuteInitializeResource(InternalRenderGraphContext rgContext, Ren
742744
if (pass.mergeState == PassMergeState.Begin || pass.mergeState == PassMergeState.None)
743745
{
744746
ref var nativePass = ref contextData.nativePassData.ElementAt(pass.nativePassIndex);
745-
foreach (ref readonly var subPass in nativePass.GraphPasses(contextData))
747+
var graphPasses = nativePass.GraphPasses(contextData, out var actualPasses);
748+
foreach (ref readonly var subPass in graphPasses)
746749
{
747750
foreach (ref readonly var res in subPass.FirstUsedResources(contextData))
748751
{
@@ -770,6 +773,8 @@ private void ExecuteInitializeResource(InternalRenderGraphContext rgContext, Ren
770773
}
771774
}
772775
}
776+
if (actualPasses.IsCreated)
777+
actualPasses.Dispose();
773778
}
774779
}
775780
// Other passes just create them at the beginning of the individual pass
@@ -1290,7 +1295,8 @@ private void ExecuteDestroyResource(InternalRenderGraphContext rgContext, Render
12901295
if (pass.mergeState == PassMergeState.End || pass.mergeState == PassMergeState.None)
12911296
{
12921297
ref var nativePass = ref contextData.nativePassData.ElementAt(pass.nativePassIndex);
1293-
foreach (ref readonly var subPass in nativePass.GraphPasses(contextData))
1298+
var graphPasses = nativePass.GraphPasses(contextData, out var actualPasses);
1299+
foreach (ref readonly var subPass in graphPasses)
12941300
{
12951301
foreach (ref readonly var res in subPass.LastUsedResources(contextData))
12961302
{
@@ -1301,6 +1307,8 @@ private void ExecuteDestroyResource(InternalRenderGraphContext rgContext, Render
13011307
}
13021308
}
13031309
}
1310+
if (actualPasses.IsCreated)
1311+
actualPasses.Dispose();
13041312
}
13051313
}
13061314
else

Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/PassesData.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -615,15 +615,16 @@ public readonly bool IsValid()
615615
}
616616

617617
[MethodImpl(MethodImplOptions.AggressiveInlining)]
618-
public readonly ReadOnlySpan<PassData> GraphPasses(CompilerContextData ctx)
618+
public readonly ReadOnlySpan<PassData> GraphPasses(CompilerContextData ctx, out NativeArray<PassData> actualPasses)
619619
{
620620
// When there's no pass being culled, we can directly return a Span of the Native List
621621
if (lastGraphPass - firstGraphPass + 1 == numGraphPasses)
622622
{
623+
actualPasses = default;
623624
return ctx.passData.MakeReadOnlySpan(firstGraphPass, numGraphPasses);
624625
}
625626

626-
var actualPasses =
627+
actualPasses =
627628
new NativeArray<PassData>(numGraphPasses, Allocator.Temp,
628629
NativeArrayOptions.UninitializedMemory);
629630

@@ -642,10 +643,14 @@ public readonly ReadOnlySpan<PassData> GraphPasses(CompilerContextData ctx)
642643
[MethodImpl(MethodImplOptions.AggressiveInlining)]
643644
public readonly void GetGraphPassNames(CompilerContextData ctx, DynamicArray<Name> dest)
644645
{
645-
foreach (ref readonly var pass in GraphPasses(ctx))
646+
var span = GraphPasses(ctx, out var actualPasses);
647+
foreach (ref readonly var pass in span)
646648
{
647649
dest.Add(pass.GetName(ctx));
648650
}
651+
652+
if (actualPasses.IsCreated)
653+
actualPasses.Dispose();
649654
}
650655

651656
// This function does not modify the current render graph state, it only evaluates and returns the correct PassBreakAudit

Packages/com.unity.render-pipelines.core/Tests/Editor/NativePassCompilerRenderGraphTests.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1316,7 +1316,9 @@ public void GraphPassesDoesNotAlloc()
13161316

13171317
ValidateNoGCAllocs(() =>
13181318
{
1319-
passes[0].GraphPasses(result.contextData);
1319+
var graphPasses = passes[0].GraphPasses(result.contextData, out var actualPasses);
1320+
if (actualPasses.IsCreated)
1321+
actualPasses.Dispose();
13201322
});
13211323

13221324
// From RenderPassCullingTests.cs

0 commit comments

Comments
 (0)