Skip to content

Commit 7023b74

Browse files
Merge pull request #8164 from Unity-Technologies/internal/6000.0/staging
Internal/6000.0/staging
2 parents 02fe1ae + b44131b commit 7023b74

77 files changed

Lines changed: 5736 additions & 482 deletions

File tree

Some content is hidden

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

Packages/com.unity.render-pipelines.core/Documentation~/advanced-properties.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ There is a global state per user that stores if Unity displays **advanced proper
1010
Not every component or Volume Override includes advanced properties.
1111
If one does, it has a contextual menu to the right of each property section header that includes additional properties. To expose advanced properties for that section, open the contextual menu and click **Advanced Properties**.
1212

13-
For an example, see the **Water Surface** component in [High Definition Render Pipeline (HDRP)](https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@latest).
13+
For an example, refer to the **Water Surface** component in [High Definition Render Pipeline (HDRP)](https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@latest?subfolder=/manual/settings-and-properties-related-to-the-water-system.html).
1414

1515
By default only standard properties are shown.
1616

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
uid: srp-core-api-index
3+
---
4+
5+
# Scriptable Render Pipeline Core scripting API
6+
7+
This is the documentation for the scripting APIs of the Scriptable Render Pipeline (SRP) Core package.
8+
9+
**Note**: URP and HDRP are built on the Scriptable Render Pipeline (SRP) Core package, but have their own class types. For more information, refer to the following:
10+
11+
- [Universal Render Pipeline (URP) Scripting API](https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@17.0/api/index.html)
12+
- [High Definition Render Pipeline (HDRP) Scripting API](https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@17.0/api/index.html)

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

Lines changed: 71 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -597,8 +597,8 @@ private void PostPostLateUpdate()
597597
ProcessRenderers(rendererData, unsupportedRenderers.AsArray());
598598
Profiler.EndSample();
599599

600-
Profiler.BeginSample("GPUResidentDrawer.ProcessRendererMaterialChanges");
601-
ProcessRendererMaterialChanges(rendererData.changedID, supportedChangedMaterials.AsArray(), supportedChangedPackedMaterialDatas.AsArray());
600+
Profiler.BeginSample("GPUResidentDrawer.ProcessRendererMaterialAndMeshChanges");
601+
ProcessRendererMaterialAndMeshChanges(rendererData.changedID, supportedChangedMaterials.AsArray(), supportedChangedPackedMaterialDatas.AsArray(), meshDataSorted.changedID);
602602
Profiler.EndSample();
603603

604604
lodGroupTransformData.Dispose();
@@ -655,9 +655,9 @@ private void ProcessLODGroups(NativeArray<int> changedID, NativeArray<int> destr
655655
m_BatchersContext.TransformLODGroups(transformedID);
656656
}
657657

658-
private void ProcessRendererMaterialChanges(NativeArray<int> excludedRenderers, NativeArray<int> changedMaterials, NativeArray<GPUDrivenPackedMaterialData> changedPackedMaterialDatas)
658+
private void ProcessRendererMaterialAndMeshChanges(NativeArray<int> excludedRenderers, NativeArray<int> changedMaterials, NativeArray<GPUDrivenPackedMaterialData> changedPackedMaterialDatas, NativeArray<int> changedMeshes)
659659
{
660-
if (changedMaterials.Length == 0)
660+
if (changedMaterials.Length == 0 && changedMeshes.Length == 0)
661661
return;
662662

663663
Profiler.BeginSample("GPUResidentDrawer.GetMaterialsWithChangedPackedMaterial");
@@ -669,7 +669,7 @@ private void ProcessRendererMaterialChanges(NativeArray<int> excludedRenderers,
669669

670670
Profiler.EndSample();
671671

672-
if (filteredMaterials.Count == 0)
672+
if (filteredMaterials.Count == 0 && changedMeshes.Length == 0)
673673
{
674674
filteredMaterials.Dispose();
675675
updatePackedMaterialCacheJob.Complete();
@@ -679,37 +679,51 @@ private void ProcessRendererMaterialChanges(NativeArray<int> excludedRenderers,
679679
var sortedExcludedRenderers = new NativeArray<int>(excludedRenderers, Allocator.TempJob);
680680
if (sortedExcludedRenderers.Length > 0)
681681
{
682-
Profiler.BeginSample("ProcessRendererMaterialChanges.Sort");
682+
Profiler.BeginSample("ProcessRendererMaterialAndMeshChanges.Sort");
683683
sortedExcludedRenderers.ParallelSort().Complete();
684684
Profiler.EndSample();
685685
}
686686

687-
Profiler.BeginSample("GPUResidentDrawer.FindRenderersFromMaterials");
687+
Profiler.BeginSample("GPUResidentDrawer.FindRenderersFromMaterialsOrMeshes");
688688

689-
NativeList<int> renderersWithChangedMaterials = FindRenderersFromMaterials(sortedExcludedRenderers, filteredMaterials, Allocator.TempJob);
689+
var (renderersWithChangedMaterials, renderersWithChangedMeshes) = FindRenderersFromMaterialsOrMeshes(sortedExcludedRenderers, filteredMaterials, changedMeshes, Allocator.TempJob);
690690
filteredMaterials.Dispose();
691691

692692
Profiler.EndSample();
693693

694694
sortedExcludedRenderers.Dispose();
695695
updatePackedMaterialCacheJob.Complete();
696696

697-
if (renderersWithChangedMaterials.Length == 0)
697+
if (renderersWithChangedMaterials.Length == 0 && renderersWithChangedMeshes.Length == 0)
698698
{
699699
renderersWithChangedMaterials.Dispose();
700+
renderersWithChangedMeshes.Dispose();
700701
return;
701702
}
702703

703704
Profiler.BeginSample("GPUResidentDrawer.UpdateRenderers");
704705
{
705-
var materialChangedInstances = new NativeArray<InstanceHandle>(renderersWithChangedMaterials.Length, Allocator.TempJob, NativeArrayOptions.UninitializedMemory);
706-
ScheduleQueryRendererGroupInstancesJob(renderersWithChangedMaterials.AsArray(), materialChangedInstances).Complete();
706+
var changedMaterialsCount = renderersWithChangedMaterials.Length;
707+
var changedMeshesCount = renderersWithChangedMeshes.Length;
708+
var totalCount = changedMaterialsCount + changedMeshesCount;
707709

708-
m_Batcher.DestroyDrawInstances(materialChangedInstances);
709-
materialChangedInstances.Dispose();
710+
711+
var changedInstances = new NativeArray<InstanceHandle>(totalCount, Allocator.TempJob, NativeArrayOptions.UninitializedMemory);
712+
var changedRenderers = new NativeArray<int>(totalCount, Allocator.TempJob, NativeArrayOptions.UninitializedMemory);
713+
714+
NativeArray<int>.Copy(renderersWithChangedMaterials.AsArray(), changedRenderers, changedMaterialsCount);
715+
NativeArray<int>.Copy(renderersWithChangedMeshes.AsArray(), changedRenderers.GetSubArray(changedMaterialsCount, changedMeshesCount), changedMeshesCount);
716+
717+
ScheduleQueryRendererGroupInstancesJob(changedRenderers, changedInstances).Complete();
718+
719+
m_Batcher.DestroyDrawInstances(changedInstances);
710720
m_Batcher.UpdateRenderers(renderersWithChangedMaterials.AsArray(), true);
721+
m_Batcher.UpdateRenderers(renderersWithChangedMeshes.AsArray(), false);
711722

723+
changedInstances.Dispose();
724+
changedRenderers.Dispose();
712725
renderersWithChangedMaterials.Dispose();
726+
renderersWithChangedMeshes.Dispose();
713727
}
714728
Profiler.EndSample();
715729
}
@@ -858,22 +872,26 @@ private NativeHashSet<int> GetMaterialsWithChangedPackedMaterial(NativeArray<int
858872
return filteredMaterials;
859873
}
860874

861-
private NativeList<int> FindRenderersFromMaterials(NativeArray<int> sortedExcludeRenderers, NativeHashSet<int> materials, Allocator rendererListAllocator)
875+
private (NativeList<int> renderersWithMaterials, NativeList<int> renderersWithMeshes) FindRenderersFromMaterialsOrMeshes(NativeArray<int> sortedExcludeRenderers, NativeHashSet<int> materials, NativeArray<int> meshes, Allocator rendererListAllocator)
862876
{
863877
var sharedInstanceData = m_BatchersContext.sharedInstanceData;
864-
NativeList<int> renderers = new NativeList<int>(sharedInstanceData.rendererGroupIDs.Length, rendererListAllocator);
878+
NativeList<int> renderersWithMaterials = new NativeList<int>(sharedInstanceData.rendererGroupIDs.Length, rendererListAllocator);
879+
NativeList<int> renderersWithMeshes = new NativeList<int>(sharedInstanceData.rendererGroupIDs.Length, rendererListAllocator);
865880

866-
var jobHandle = new FindRenderersFromMaterialJob
881+
var jobHandle = new FindRenderersFromMaterialOrMeshJob
867882
{
868883
materialIDs = materials.AsReadOnly(),
869884
materialIDArrays = sharedInstanceData.materialIDArrays,
885+
meshIDs = meshes.AsReadOnly(),
886+
meshIDArray = sharedInstanceData.meshIDs,
870887
rendererGroupIDs = sharedInstanceData.rendererGroupIDs,
871888
sortedExcludeRendererIDs = sortedExcludeRenderers.AsReadOnly(),
872-
selectedRenderGroups = renderers.AsParallelWriter(),
873-
}.ScheduleBatch(sharedInstanceData.rendererGroupIDs.Length, FindRenderersFromMaterialJob.k_BatchSize);
889+
selectedRenderGroupsForMaterials = renderersWithMaterials.AsParallelWriter(),
890+
selectedRenderGroupsForMeshes = renderersWithMeshes.AsParallelWriter()
891+
}.ScheduleBatch(sharedInstanceData.rendererGroupIDs.Length, FindRenderersFromMaterialOrMeshJob.k_BatchSize);
874892
jobHandle.Complete();
875893

876-
return renderers;
894+
return (renderersWithMaterials, renderersWithMeshes);
877895
}
878896

879897
[BurstCompile(DisableSafetyChecks = true, OptimizeFor = OptimizeFor.Performance)]
@@ -950,22 +968,29 @@ public unsafe void Execute()
950968
}
951969

952970
[BurstCompile(DisableSafetyChecks = true, OptimizeFor = OptimizeFor.Performance)]
953-
private unsafe struct FindRenderersFromMaterialJob : IJobParallelForBatch
971+
private unsafe struct FindRenderersFromMaterialOrMeshJob : IJobParallelForBatch
954972
{
955973
public const int k_BatchSize = 128;
956974

957975
[ReadOnly] public NativeHashSet<int>.ReadOnly materialIDs;
958976
[ReadOnly] public NativeArray<SmallIntegerArray>.ReadOnly materialIDArrays;
977+
[ReadOnly] public NativeArray<int>.ReadOnly meshIDs;
978+
[ReadOnly] public NativeArray<int>.ReadOnly meshIDArray;
959979
[ReadOnly] public NativeArray<int>.ReadOnly rendererGroupIDs;
960980
[ReadOnly] public NativeArray<int>.ReadOnly sortedExcludeRendererIDs;
961-
962-
[WriteOnly] public NativeList<int>.ParallelWriter selectedRenderGroups;
981+
982+
[WriteOnly] public NativeList<int>.ParallelWriter selectedRenderGroupsForMaterials;
983+
[WriteOnly] public NativeList<int>.ParallelWriter selectedRenderGroupsForMeshes;
963984

964985
public void Execute(int startIndex, int count)
965986
{
966-
int* renderersToAddPtr = stackalloc int[k_BatchSize];
967-
var renderersToAdd = new UnsafeList<int>(renderersToAddPtr, k_BatchSize);
968-
renderersToAdd.Length = 0;
987+
int* renderersToAddForMaterialsPtr = stackalloc int[k_BatchSize];
988+
var renderersToAddForMaterials = new UnsafeList<int>(renderersToAddForMaterialsPtr, k_BatchSize);
989+
renderersToAddForMaterials.Length = 0;
990+
991+
int* renderersToAddForMeshesPtr = stackalloc int[k_BatchSize];
992+
var renderersToAddForMeshes = new UnsafeList<int>(renderersToAddForMeshesPtr, k_BatchSize);
993+
renderersToAddForMeshes.Length = 0;
969994

970995
for (int index = 0; index < count; index++)
971996
{
@@ -976,20 +1001,33 @@ public void Execute(int startIndex, int count)
9761001
if (sortedExcludeRendererIDs.BinarySearch(rendererID) >= 0)
9771002
continue;
9781003

979-
var rendererMaterials = materialIDArrays[rendererIndex];
980-
981-
for (int materialIndex = 0; materialIndex < rendererMaterials.Length; materialIndex++)
9821004
{
983-
var materialID = rendererMaterials[materialIndex];
984-
if (materialIDs.Contains(materialID))
1005+
var meshID = meshIDArray[rendererIndex];
1006+
if (meshIDs.Contains(meshID))
9851007
{
986-
renderersToAdd.AddNoResize(rendererID);
987-
break;
1008+
renderersToAddForMeshes.AddNoResize(rendererID);
1009+
// We can skip the material check if we found a mesh match since at this point
1010+
// the renderer is already added and will be processed by the mesh branch
1011+
continue;
1012+
}
1013+
}
1014+
{
1015+
var rendererMaterials = materialIDArrays[rendererIndex];
1016+
1017+
for (int materialIndex = 0; materialIndex < rendererMaterials.Length; materialIndex++)
1018+
{
1019+
var materialID = rendererMaterials[materialIndex];
1020+
if (materialIDs.Contains(materialID))
1021+
{
1022+
renderersToAddForMaterials.AddNoResize(rendererID);
1023+
break;
1024+
}
9881025
}
9891026
}
9901027
}
9911028

992-
selectedRenderGroups.AddRangeNoResize(renderersToAddPtr, renderersToAdd.Length);
1029+
selectedRenderGroupsForMaterials.AddRangeNoResize(renderersToAddForMaterialsPtr, renderersToAddForMaterials.Length);
1030+
selectedRenderGroupsForMeshes.AddRangeNoResize(renderersToAddForMeshesPtr, renderersToAddForMeshes.Length);
9931031
}
9941032
}
9951033

0 commit comments

Comments
 (0)