Skip to content

Commit 4063d2d

Browse files
Internal/6000.0/staging
Internal/6000.0/staging
2 parents 184d30e + 73ca8ba commit 4063d2d

File tree

117 files changed

+7211
-1935
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

117 files changed

+7211
-1935
lines changed

Packages/com.unity.render-pipelines.core/Runtime/GPUDriven/InstanceCuller.cs

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -681,7 +681,7 @@ unsafe public void Execute()
681681
allocInfo.drawCount = outIndirectCommandIndex;
682682
allocInfo.instanceCount = outIndirectVisibleInstanceIndex;
683683

684-
int drawAllocCount = allocInfo.drawCount + IndirectBufferContextStorage.kExtraDrawAllocationCount;
684+
int drawAllocCount = allocInfo.drawCount;
685685
int drawAllocEnd = Interlocked.Add(ref UnsafeUtility.AsRef<int>(allocCounters + (int)IndirectAllocator.NextDrawIndex), drawAllocCount);
686686
allocInfo.drawAllocIndex = drawAllocEnd - drawAllocCount;
687687

@@ -1525,6 +1525,7 @@ private static class ShaderIDs
15251525
public static readonly int InstanceOcclusionCullerShaderVariables = Shader.PropertyToID("InstanceOcclusionCullerShaderVariables");
15261526
public static readonly int _DrawInfo = Shader.PropertyToID("_DrawInfo");
15271527
public static readonly int _InstanceInfo = Shader.PropertyToID("_InstanceInfo");
1528+
public static readonly int _DispatchArgs = Shader.PropertyToID("_DispatchArgs");
15281529
public static readonly int _DrawArgs = Shader.PropertyToID("_DrawArgs");
15291530
public static readonly int _InstanceIndices = Shader.PropertyToID("_InstanceIndices");
15301531
public static readonly int _InstanceDataBuffer = Shader.PropertyToID("_InstanceDataBuffer");
@@ -1800,7 +1801,7 @@ public unsafe JobHandle CreateCullJobTree(
18001801
cullingOutput = cullingOutput.drawCommands,
18011802
indirectBufferLimits = indirectBufferLimits,
18021803
visibleInstancesBufferHandle = m_IndirectStorage.visibleInstanceBufferHandle,
1803-
indirectArgsBufferHandle = m_IndirectStorage.indirectArgsBufferHandle,
1804+
indirectArgsBufferHandle = m_IndirectStorage.indirectDrawArgsBufferHandle,
18041805
indirectBufferAllocInfo = indirectBufferAllocInfo,
18051806
indirectInstanceInfoGlobalArray = m_IndirectStorage.instanceInfoGlobalArray,
18061807
indirectDrawInfoGlobalArray = m_IndirectStorage.drawInfoGlobalArray,
@@ -2092,7 +2093,7 @@ internal void EnsureValidOcclusionTestResults(int viewInstanceID)
20922093
int kernel = m_CopyInstancesKernel;
20932094
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._DrawInfo, m_IndirectStorage.drawInfoBuffer);
20942095
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._InstanceInfo, m_IndirectStorage.instanceInfoBuffer);
2095-
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._DrawArgs, m_IndirectStorage.argsBuffer);
2096+
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._DrawArgs, m_IndirectStorage.drawArgsBuffer);
20962097
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._InstanceIndices, m_IndirectStorage.instanceBuffer);
20972098

20982099
cmd.DispatchCompute(cs, kernel, (allocInfo.instanceCount + 63) / 64, 1, 1);
@@ -2245,10 +2246,10 @@ private void AddOcclusionCullingDispatch(
22452246
if (doCopyInstances)
22462247
{
22472248
int kernel = m_CopyInstancesKernel;
2248-
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._DrawInfo, m_IndirectStorage.drawInfoBuffer);
2249-
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._InstanceInfo, m_IndirectStorage.instanceInfoBuffer);
2250-
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._DrawArgs, m_IndirectStorage.argsBuffer);
2251-
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._InstanceIndices, m_IndirectStorage.instanceBuffer);
2249+
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._DrawInfo, bufferHandles.drawInfoBuffer);
2250+
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._InstanceInfo, bufferHandles.instanceInfoBuffer);
2251+
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._DrawArgs, bufferHandles.drawArgsBuffer);
2252+
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._InstanceIndices, bufferHandles.instanceBuffer);
22522253

22532254
cmd.DispatchCompute(cs, kernel, (allocInfo.instanceCount + 63) / 64, 1, 1);
22542255
}
@@ -2257,7 +2258,10 @@ private void AddOcclusionCullingDispatch(
22572258
{
22582259
int kernel = m_ResetDrawArgsKernel;
22592260
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._DrawInfo, bufferHandles.drawInfoBuffer);
2260-
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._DrawArgs, bufferHandles.argsBuffer);
2261+
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._DrawArgs, bufferHandles.drawArgsBuffer);
2262+
if (isSecondPass)
2263+
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._DispatchArgs, bufferHandles.dispatchArgsBuffer);
2264+
22612265
cmd.DispatchCompute(cs, kernel, (allocInfo.drawCount + 63) / 64, 1, 1);
22622266
}
22632267

@@ -2266,7 +2270,7 @@ private void AddOcclusionCullingDispatch(
22662270
int kernel = m_CullInstancesKernel;
22672271
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._DrawInfo, bufferHandles.drawInfoBuffer);
22682272
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._InstanceInfo, bufferHandles.instanceInfoBuffer);
2269-
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._DrawArgs, bufferHandles.argsBuffer);
2273+
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._DrawArgs, bufferHandles.drawArgsBuffer);
22702274
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._InstanceIndices, bufferHandles.instanceBuffer);
22712275
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._InstanceDataBuffer, batchersContext.gpuInstanceDataBuffer);
22722276
cmd.SetComputeBufferParam(cs, kernel, ShaderIDs._OcclusionDebugCounters, m_OcclusionEventDebugArray.CounterBuffer);
@@ -2278,7 +2282,7 @@ private void AddOcclusionCullingDispatch(
22782282
OcclusionCullingCommon.SetDebugPyramid(cmd, m_OcclusionTestShader, kernel, occluderHandles);
22792283

22802284
if (isSecondPass)
2281-
cmd.DispatchCompute(cs, kernel, bufferHandles.argsBuffer, (uint)(GraphicsBuffer.IndirectDrawIndexedArgs.size * allocInfo.GetExtraDrawInfoSlotIndex()));
2285+
cmd.DispatchCompute(cs, kernel, bufferHandles.dispatchArgsBuffer, 0);
22822286
else
22832287
cmd.DispatchCompute(cs, kernel, (allocInfo.instanceCount + 63) / 64, 1, 1);
22842288
}

Packages/com.unity.render-pipelines.core/Runtime/GPUDriven/InstanceOcclusionCuller.cs

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -560,22 +560,23 @@ internal struct IndirectBufferContextHandles
560560
{
561561
public BufferHandle instanceBuffer;
562562
public BufferHandle instanceInfoBuffer;
563-
public BufferHandle argsBuffer;
563+
public BufferHandle dispatchArgsBuffer;
564+
public BufferHandle drawArgsBuffer;
564565
public BufferHandle drawInfoBuffer;
565566

566567
public void UseForOcclusionTest(IBaseRenderGraphBuilder builder)
567568
{
568569
instanceBuffer = builder.UseBuffer(instanceBuffer, AccessFlags.ReadWrite);
569570
instanceInfoBuffer = builder.UseBuffer(instanceInfoBuffer, AccessFlags.Read);
570-
argsBuffer = builder.UseBuffer(argsBuffer, AccessFlags.ReadWrite);
571+
dispatchArgsBuffer = builder.UseBuffer(dispatchArgsBuffer, AccessFlags.ReadWrite);
572+
drawArgsBuffer = builder.UseBuffer(drawArgsBuffer, AccessFlags.ReadWrite);
571573
drawInfoBuffer = builder.UseBuffer(drawInfoBuffer, AccessFlags.Read);
572574
}
573575
}
574576

575577
internal struct IndirectBufferContextStorage : IDisposable
576578
{
577579
private const int kAllocatorCount = (int)IndirectAllocator.Count;
578-
internal const int kExtraDrawAllocationCount = 1; // over-allocate by one for indirect args scratch space GPU-side
579580
internal const int kInstanceInfoGpuOffsetMultiplier = 2; // GPU side allocates storage for extra copy of instance list
580581

581582
private IndirectBufferLimits m_BufferLimits;
@@ -584,7 +585,8 @@ internal struct IndirectBufferContextStorage : IDisposable
584585
private GraphicsBuffer m_InstanceInfoBuffer;
585586
private NativeArray<IndirectInstanceInfo> m_InstanceInfoStaging;
586587

587-
private GraphicsBuffer m_ArgsBuffer;
588+
private GraphicsBuffer m_DispatchArgsBuffer;
589+
private GraphicsBuffer m_DrawArgsBuffer;
588590
private GraphicsBuffer m_DrawInfoBuffer;
589591
private NativeArray<IndirectDrawInfo> m_DrawInfoStaging;
590592

@@ -596,19 +598,21 @@ internal struct IndirectBufferContextStorage : IDisposable
596598

597599
public GraphicsBuffer instanceBuffer { get { return m_InstanceBuffer; } }
598600
public GraphicsBuffer instanceInfoBuffer { get { return m_InstanceInfoBuffer; } }
599-
public GraphicsBuffer argsBuffer { get { return m_ArgsBuffer; } }
601+
public GraphicsBuffer dispatchArgsBuffer { get { return m_DispatchArgsBuffer; } }
602+
public GraphicsBuffer drawArgsBuffer { get { return m_DrawArgsBuffer; } }
600603
public GraphicsBuffer drawInfoBuffer { get { return m_DrawInfoBuffer; } }
601604

602605
public GraphicsBufferHandle visibleInstanceBufferHandle { get { return m_InstanceBuffer.bufferHandle; } }
603-
public GraphicsBufferHandle indirectArgsBufferHandle { get { return m_ArgsBuffer.bufferHandle; } }
606+
public GraphicsBufferHandle indirectDrawArgsBufferHandle { get { return m_DrawArgsBuffer.bufferHandle; } }
604607

605608
public IndirectBufferContextHandles ImportBuffers(RenderGraph renderGraph)
606609
{
607610
return new IndirectBufferContextHandles()
608611
{
609612
instanceBuffer = renderGraph.ImportBuffer(m_InstanceBuffer),
610613
instanceInfoBuffer = renderGraph.ImportBuffer(m_InstanceInfoBuffer),
611-
argsBuffer = renderGraph.ImportBuffer(m_ArgsBuffer),
614+
dispatchArgsBuffer = renderGraph.ImportBuffer(m_DispatchArgsBuffer),
615+
drawArgsBuffer = renderGraph.ImportBuffer(m_DrawArgsBuffer),
612616
drawInfoBuffer = renderGraph.ImportBuffer(m_DrawInfoBuffer),
613617
};
614618
}
@@ -653,15 +657,18 @@ void FreeInstanceBuffers()
653657

654658
void AllocateDrawBuffers(int maxDrawCount)
655659
{
656-
m_ArgsBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured | GraphicsBuffer.Target.IndirectArguments, (maxDrawCount + kExtraDrawAllocationCount) * (GraphicsBuffer.IndirectDrawIndexedArgs.size / sizeof(int)), sizeof(int));
660+
// Compute dispatch arguments are number of thread groups in X,Y and Z dimensions, hence 3 integers for the size.
661+
m_DispatchArgsBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured | GraphicsBuffer.Target.IndirectArguments, 3, sizeof(int));
662+
m_DrawArgsBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured | GraphicsBuffer.Target.IndirectArguments, maxDrawCount * (GraphicsBuffer.IndirectDrawIndexedArgs.size / sizeof(int)), sizeof(int));
657663
m_DrawInfoBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, maxDrawCount, System.Runtime.InteropServices.Marshal.SizeOf<IndirectDrawInfo>());
658664
m_DrawInfoStaging = new NativeArray<IndirectDrawInfo>(maxDrawCount, Allocator.Persistent, NativeArrayOptions.UninitializedMemory);
659665
m_BufferLimits.maxDrawCount = maxDrawCount;
660666
}
661667

662668
void FreeDrawBuffers()
663669
{
664-
m_ArgsBuffer.Release();
670+
m_DispatchArgsBuffer.Release();
671+
m_DrawArgsBuffer.Release();
665672
m_DrawInfoBuffer.Release();
666673
m_DrawInfoStaging.Dispose();
667674
m_BufferLimits.maxDrawCount = 0;

Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolume.hlsl

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -911,18 +911,24 @@ void EvaluateAdaptiveProbeVolume(in float3 posWS, in float3 normalWS, in float3
911911
void EvaluateAdaptiveProbeVolume(in float3 posWS, in float2 positionSS, out float3 bakeDiffuseLighting)
912912
{
913913
APVResources apvRes = FillAPVResources();
914-
915914
posWS = AddNoiseToSamplingPosition(posWS, positionSS, 1);
916915
posWS -= _APVWorldOffset;
917916

917+
float3 ambientProbe = EvaluateAmbientProbe(0);
918+
918919
float3 uvw;
919920
if (TryToGetPoolUVW(apvRes, posWS, 0, 0, uvw))
920921
{
921922
bakeDiffuseLighting = SAMPLE_TEXTURE3D_LOD(apvRes.L0_L1Rx, s_linear_clamp_sampler, uvw, 0).rgb;
923+
if (_APVSkyOcclusionWeight > 0)
924+
{
925+
float skyOcclusionL0 = kSHBasis0 * SAMPLE_TEXTURE3D_LOD(apvRes.SkyOcclusionL0L1, s_linear_clamp_sampler, uvw, 0).x;
926+
bakeDiffuseLighting += ambientProbe * skyOcclusionL0;
927+
}
922928
}
923929
else
924930
{
925-
bakeDiffuseLighting = EvaluateAmbientProbe(0);
931+
bakeDiffuseLighting = ambientProbe;
926932
}
927933
}
928934

Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolumeBakingSet.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public LogarithmicAttribute(int min, int max)
2626
/// <summary>
2727
/// An Asset which holds a set of settings to use with a <see cref="Probe Reference Volume"/>.
2828
/// </summary>
29+
[CoreRPHelpURL("probevolumes-usebakingsets", "com.unity.render-pipelines.high-definition")]
2930
public sealed partial class ProbeVolumeBakingSet : ScriptableObject, ISerializationCallbackReceiver
3031
{
3132
internal enum Version

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

0 commit comments

Comments
 (0)