From bdc7d9e0c2bf33c59809a744a77781a4a5d9b9c7 Mon Sep 17 00:00:00 2001 From: Unity Technologies <@unity> Date: Fri, 4 Oct 2024 00:00:00 +0000 Subject: [PATCH] com.unity.entities.graphics@1.4.2 ## [1.4.2] - 2024-10-04 ### Changed * Updated Burst dependency to version 1.8.18 * Updated entities packages dependencies ### Added * The new `ProceduralMotion_Tag` tag component data type informs Entities Graphics that an Entity needs to participate in the object motion vector pass. The tag is automatically added for entities that go through the builtin MeshRendererBaker path. * Enable entities motion vector pass participation for URP. * PruneUploadBufferPool API to request pruning of the upload buffer pool. ### Fixed * GameObjects that depend on vertex shader logic to generate procedural motion vectors through object motion vector passes will now also do the same when baked to Entities and rendered through Entities Graphics. --- CHANGELOG.md | 18 ++++ .../DrawCommandGeneration.cs | 4 +- .../EntitiesGraphicsComponents.cs | 5 ++ .../EntitiesGraphicsSystem.cs | 11 +++ .../MeshRendererBakingUtility.cs | 3 + Unity.Entities.Graphics/RenderMeshUtility.cs | 35 +++++++- Unity.Entities.Graphics/SparseUploader.cs | 90 +++++++++++++++---- .../Unity.Entities.Graphics.asmdef | 7 +- ValidationExceptions.json | 10 +-- package.json | 12 +-- pvpExceptions.json | 50 +++++++++++ pvpExceptions.json.meta | 7 ++ 12 files changed, 221 insertions(+), 31 deletions(-) create mode 100644 pvpExceptions.json create mode 100644 pvpExceptions.json.meta diff --git a/CHANGELOG.md b/CHANGELOG.md index 23dcb97..ea64fe5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,24 @@ uid: changelog # Changelog +## [1.4.2] - 2024-10-04 + +### Changed + +* Updated Burst dependency to version 1.8.18 +* Updated entities packages dependencies + +### Added + +* The new `ProceduralMotion_Tag` tag component data type informs Entities Graphics that an Entity needs to participate in the object motion vector pass. The tag is automatically added for entities that go through the builtin MeshRendererBaker path. +* Enable entities motion vector pass participation for URP. +* PruneUploadBufferPool API to request pruning of the upload buffer pool. + + +### Fixed + +* GameObjects that depend on vertex shader logic to generate procedural motion vectors through object motion vector passes will now also do the same when baked to Entities and rendered through Entities Graphics. + ## [1.3.2] - 2024-09-06 diff --git a/Unity.Entities.Graphics/DrawCommandGeneration.cs b/Unity.Entities.Graphics/DrawCommandGeneration.cs index ccaa0c2..7d491de 100644 --- a/Unity.Entities.Graphics/DrawCommandGeneration.cs +++ b/Unity.Entities.Graphics/DrawCommandGeneration.cs @@ -1014,6 +1014,7 @@ internal unsafe struct EmitDrawCommandsJob : IJobParallelForDefer [ReadOnly] public ComponentTypeHandle MaterialMeshInfo; [ReadOnly] public ComponentTypeHandle LocalToWorld; [ReadOnly] public ComponentTypeHandle DepthSorted; + [ReadOnly] public ComponentTypeHandle ProceduralMotion; [ReadOnly] public ComponentTypeHandle DeformedMeshIndex; [ReadOnly] public SharedComponentTypeHandle RenderMeshArray; [ReadOnly] public SharedComponentTypeHandle RenderFilterSettings; @@ -1101,7 +1102,8 @@ public void Execute(int index) #else bool isDeformed = false; #endif - hasMotion = orderChanged || transformChanged || isDeformed; + bool hasProceduralMotion = chunk.Has(ref ProceduralMotion); + hasMotion = orderChanged || transformChanged || isDeformed || hasProceduralMotion; } int chunkStartIndex = entitiesGraphicsChunkInfo.CullingData.ChunkOffsetInBatch; diff --git a/Unity.Entities.Graphics/EntitiesGraphicsComponents.cs b/Unity.Entities.Graphics/EntitiesGraphicsComponents.cs index 8f77aef..ed5df02 100644 --- a/Unity.Entities.Graphics/EntitiesGraphicsComponents.cs +++ b/Unity.Entities.Graphics/EntitiesGraphicsComponents.cs @@ -105,4 +105,9 @@ public struct WorldToLocal_Tag : IComponentData {} /// A tag component that enables depth sorting for the entity. /// public struct DepthSorted_Tag : IComponentData {} + + /// + /// A tag component that enables motion vectors generated by vertex shader logic for the entity. + /// + public struct PerVertexMotionVectors_Tag : IComponentData {} } diff --git a/Unity.Entities.Graphics/EntitiesGraphicsSystem.cs b/Unity.Entities.Graphics/EntitiesGraphicsSystem.cs index 003847a..92d47f7 100644 --- a/Unity.Entities.Graphics/EntitiesGraphicsSystem.cs +++ b/Unity.Entities.Graphics/EntitiesGraphicsSystem.cs @@ -1193,6 +1193,16 @@ private void InitializeMaterialProperties() } } + + /// + /// Prune sparse uploader gpu buffer pool. + /// + /// Maximum memory target to keep alive in upload buffer pool. Only buffers marked as free will be pruned, so the memory retained might be more than requested. + public void PruneUploadBufferPool(int maxMemoryToRetainInUploadPoolBytes) + { + m_GPUUploader.PruneUploadBufferPoolOnFrameCleanup(maxMemoryToRetainInUploadPoolBytes); + } + /// /// Called when this system is destroyed. /// @@ -1596,6 +1606,7 @@ private JobHandle OnPerformCulling(BatchRendererGroup rendererGroup, BatchCullin LocalToWorld = GetComponentTypeHandle(true), DepthSorted = GetComponentTypeHandle(true), DeformedMeshIndex = GetComponentTypeHandle(true), + ProceduralMotion = GetComponentTypeHandle(true), RenderFilterSettings = GetSharedComponentTypeHandle(), FilterSettings = m_FilterSettings, CullingLayerMask = cullingContext.cullingLayerMask, diff --git a/Unity.Entities.Graphics/MeshRendererBakingUtility.cs b/Unity.Entities.Graphics/MeshRendererBakingUtility.cs index 794a280..8f34def 100644 --- a/Unity.Entities.Graphics/MeshRendererBakingUtility.cs +++ b/Unity.Entities.Graphics/MeshRendererBakingUtility.cs @@ -176,6 +176,7 @@ static void ConvertToSingleEntity( // Add all components up front using as few calls as possible. var componentFlag = RenderMeshUtility.EntitiesGraphicsComponentFlags.Baking; componentFlag.AppendMotionAndProbeFlags(renderMeshDescription, baker.IsStatic()); + componentFlag.AppendPerVertexMotionPassFlag(materials); componentFlag.AppendDepthSortedFlag(materials); lodComponent.AppendLODFlags(ref componentFlag); baker.AddComponent(entity, RenderMeshUtility.ComputeComponentTypes(componentFlag)); @@ -264,6 +265,8 @@ static bool ValidateMeshAndMaterials(Renderer authoring, Mesh mesh, Material[] m { if (materials[i] == null) errorMessage += $"Material ({i}) is null. "; + else if (materials[i].shader == null) + errorMessage += $"Material {materials[i].name} ({i}) has null shader. "; } if (!string.IsNullOrEmpty(errorMessage)) diff --git a/Unity.Entities.Graphics/RenderMeshUtility.cs b/Unity.Entities.Graphics/RenderMeshUtility.cs index dfbc91e..c03a735 100644 --- a/Unity.Entities.Graphics/RenderMeshUtility.cs +++ b/Unity.Entities.Graphics/RenderMeshUtility.cs @@ -112,9 +112,10 @@ internal enum EntitiesGraphicsComponentFlags Baking = 1 << 5, UseRenderMeshArray = 1 << 6, LODGroup = 1 << 7, + PerVertexMotionPass = 1 << 8, // Count of unique flag combinations - PermutationCount = 1 << 8, + PermutationCount = 1 << 9, } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -171,6 +172,8 @@ static ComponentTypeSet GenerateComponentTypes(EntitiesGraphicsComponentFlags fl #if USE_HYBRID_MOTION_PASS if (flags.HasFlagFast(EntitiesGraphicsComponentFlags.InMotionPass)) components.Add(ComponentType.ReadWrite()); + if (flags.HasFlagFast(EntitiesGraphicsComponentFlags.PerVertexMotionPass)) + components.Add(ComponentType.ReadWrite()); #endif if (flags.HasFlagFast(EntitiesGraphicsComponentFlags.LightProbesBlend)) components.Add(ComponentType.ReadWrite()); @@ -210,6 +213,12 @@ internal static void AppendMotionAndProbeFlags(this ref EntitiesGraphicsComponen flags |= LightProbeFlags(renderMeshDescription.LightProbeUsage); } + internal static void AppendPerVertexMotionPassFlag(this ref EntitiesGraphicsComponentFlags flags, ReadOnlySpan materials) + { + foreach (var material in materials) + flags.AppendPerVertexMotionPassFlag(material); + } + internal static void AppendDepthSortedFlag(this ref EntitiesGraphicsComponentFlags flags, ReadOnlySpan materials) { foreach (var material in materials) @@ -303,6 +312,7 @@ public static void AddComponents( // Add all components up front using as few calls as possible. var componentFlags = EntitiesGraphicsComponentFlags.None; componentFlags.AppendMotionAndProbeFlags(renderMeshDescription, entityManager.HasComponent(entity)); + componentFlags.AppendPerVertexMotionPassFlag(material); componentFlags.AppendDepthSortedFlag(material); entityManager.AddComponent(entity, ComputeComponentTypes(componentFlags)); @@ -311,7 +321,30 @@ public static void AddComponents( entityManager.SetComponentData(entity, new RenderBounds { Value = mesh.bounds.ToAABB() }); } + private const string kMotionVectorsShaderPass_HDRP_URP = "MotionVectors"; + private const string kMotionVectorMaterialTagKey_HDRP = "MotionVector"; + private const string kMotionVectorMaterialTagValue_HDRP = "User"; + private static readonly ShaderTagId kMotionVectorShaderTagKey_URP = new("AlwaysRenderMotionVectors"); + private static readonly ShaderTagId kMotionVectorShaderTagValue_URP = new("true"); + /// + /// Adds the `PerVertexMotionPass` flag if the given material wants to write vertex shader generated motion + /// vectors. Works for materials that use standard HDRP or URP conventions for writing motion vectors. + /// + static void AppendPerVertexMotionPassFlag(this ref EntitiesGraphicsComponentFlags flags, Material material) + { +#if HDRP_10_0_0_OR_NEWER + // For HDRP check that the motion vectors pass is enabled and that the material enables user defined motion vectors. + if(material.GetShaderPassEnabled(kMotionVectorsShaderPass_HDRP_URP) && material.GetTag(kMotionVectorMaterialTagKey_HDRP, false) == kMotionVectorMaterialTagValue_HDRP) + flags |= EntitiesGraphicsComponentFlags.PerVertexMotionPass; +#elif URP_16_0_0_OR_NEWER + // For URP check that the motion vectors pass is enabled and that the shader has user defined motion vectors. + if(material.GetShaderPassEnabled(kMotionVectorsShaderPass_HDRP_URP) && material.shader.FindSubshaderTagValue(0, kMotionVectorShaderTagKey_URP) == kMotionVectorShaderTagValue_URP) + flags |= EntitiesGraphicsComponentFlags.PerVertexMotionPass; +#endif + } + #pragma warning restore CS0162 + static void AppendDepthSortedFlag(this ref EntitiesGraphicsComponentFlags flags, Material material) { if (IsMaterialTransparent(material)) diff --git a/Unity.Entities.Graphics/SparseUploader.cs b/Unity.Entities.Graphics/SparseUploader.cs index 713744a..0a33036 100644 --- a/Unity.Entities.Graphics/SparseUploader.cs +++ b/Unity.Entities.Graphics/SparseUploader.cs @@ -366,6 +366,7 @@ internal class BufferPool : IDisposable { private List m_Buffers; private Stack m_FreeBufferIds; + private Stack m_BuffersReleased; private int m_Count; private int m_Stride; @@ -377,6 +378,7 @@ public BufferPool(int count, int stride, GraphicsBuffer.Target target, GraphicsB { m_Buffers = new List(); m_FreeBufferIds = new Stack(); + m_BuffersReleased = new Stack(); m_Count = count; m_Stride = stride; @@ -388,16 +390,29 @@ public void Dispose() { for (int i = 0; i < m_Buffers.Count; ++i) { - m_Buffers[i].Dispose(); + if (m_Buffers[i].IsValid()) + { + m_Buffers[i].Dispose(); + } } } private int AllocateBuffer() { - var id = m_Buffers.Count; var cb = new GraphicsBuffer(m_Target, m_UsageFlags, m_Count, m_Stride); - m_Buffers.Add(cb); - return id; + cb.name = "SparseUploaderBuffer"; + if (m_BuffersReleased.Count > 0) + { + var id = m_BuffersReleased.Pop(); + m_Buffers[id] = cb; + return id; + } + else + { + var id = m_Buffers.Count; + m_Buffers.Add(cb); + return id; + } } public int GetBufferId() @@ -418,7 +433,26 @@ public void PutBufferId(int id) m_FreeBufferIds.Push(id); } - public int TotalBufferCount => m_Buffers.Count; + /* + * Prune free buffers to allow up to maxMemoryToRetainInBytes to remain. + * Note that this will only release buffers that are marked free, so the actual memory retained might be higher than requested + */ + public void PruneFreeBuffers(int maxMemoryToRetainInBytes) + { + int memoryToFree = TotalBufferSize - maxMemoryToRetainInBytes; + if (memoryToFree <= 0) return; + + while (memoryToFree > 0 && m_FreeBufferIds.Count > 0) + { + var id = m_FreeBufferIds.Pop(); + var buffer = GetBufferFromId(id); + buffer.Dispose(); + m_BuffersReleased.Push(id); + memoryToFree -= m_Count * m_Stride; + } + } + + public int TotalBufferCount => m_Buffers.Count - m_BuffersReleased.Count; public int TotalBufferSize => TotalBufferCount * m_Count * m_Stride; } @@ -493,6 +527,9 @@ public FrameData() int m_OperationsBaseID; int m_ReplaceOperationSize; + int m_RequestedUploadBufferPoolMaxSizeBytes; + bool m_PruneUploadBufferPool; + /// /// Constructs a new sparse uploader with the specified buffer as the target. /// @@ -526,6 +563,9 @@ public SparseUploader(GraphicsBuffer destinationBuffer, int bufferChunkSize = 16 m_CurrentFrameUploadSize = 0; m_MaxUploadSize = 0; + + m_RequestedUploadBufferPoolMaxSizeBytes = 0; + m_PruneUploadBufferPool = false; } /// @@ -775,6 +815,16 @@ public void EndAndCommit(ThreadedSparseUploader tsu) StepFrame(); } + /// + /// Requests pruning of upload buffers. The actual release will happen in FrameCleanup. + /// + /// Maximum memory target to keep alive in upload buffer pool. Only buffers marked as free will be pruned, so the memory retained might be more than requested. + public void PruneUploadBufferPoolOnFrameCleanup(int requestedMaxSizeRetainedInBytes) + { + m_RequestedUploadBufferPoolMaxSizeBytes = requestedMaxSizeRetainedInBytes; + m_PruneUploadBufferPool = true; + } + /// /// Cleans up internal data and recovers buffers into the free buffer pool. /// @@ -785,22 +835,28 @@ public void FrameCleanup() { var numBuffers = m_ThreadData->m_NumBuffers; - if (numBuffers == 0) - return; - - // These buffers where never used, so they gets returned to the pool at once - for (int iBuf = 0; iBuf < numBuffers; ++iBuf) + if (numBuffers > 0) { - var mappedBuffer = m_MappedBuffers[iBuf]; - MappedBuffer.UnpackMarker(mappedBuffer.m_Marker, out var operationOffset, out var dataOffset); - var graphicsBufferID = mappedBuffer.m_BufferID; - var graphicsBuffer = m_UploadBufferPool.GetBufferFromId(graphicsBufferID); + // These buffers were never used, so they get returned to the pool at once + for (int iBuf = 0; iBuf < numBuffers; ++iBuf) + { + var mappedBuffer = m_MappedBuffers[iBuf]; + MappedBuffer.UnpackMarker(mappedBuffer.m_Marker, out var operationOffset, out var dataOffset); + var graphicsBufferID = mappedBuffer.m_BufferID; + var graphicsBuffer = m_UploadBufferPool.GetBufferFromId(graphicsBufferID); + + graphicsBuffer.UnlockBufferAfterWrite(0); + m_UploadBufferPool.PutBufferId(graphicsBufferID); + } - graphicsBuffer.UnlockBufferAfterWrite(0); - m_UploadBufferPool.PutBufferId(graphicsBufferID); + m_MappedBuffers.Dispose(); } - m_MappedBuffers.Dispose(); + if (m_PruneUploadBufferPool) + { + m_UploadBufferPool.PruneFreeBuffers(m_RequestedUploadBufferPoolMaxSizeBytes); + m_PruneUploadBufferPool = false; + } StepFrame(); } diff --git a/Unity.Entities.Graphics/Unity.Entities.Graphics.asmdef b/Unity.Entities.Graphics/Unity.Entities.Graphics.asmdef index f07c762..eef15bc 100644 --- a/Unity.Entities.Graphics/Unity.Entities.Graphics.asmdef +++ b/Unity.Entities.Graphics/Unity.Entities.Graphics.asmdef @@ -36,6 +36,11 @@ "expression": "9.9.9", "define": "URP_10_0_0_OR_NEWER" }, + { + "name": "com.unity.render-pipelines.universal", + "expression": "15.9.9", + "define": "URP_16_0_0_OR_NEWER" + }, { "name": "com.unity.render-pipelines.core", "expression": "9.9.9", @@ -48,4 +53,4 @@ } ], "noEngineReferences": false -} +} \ No newline at end of file diff --git a/ValidationExceptions.json b/ValidationExceptions.json index fbb429f..ca50f45 100644 --- a/ValidationExceptions.json +++ b/ValidationExceptions.json @@ -3,29 +3,29 @@ { "ValidationTest": "API Updater Configuration Validation", "ExceptionMessage": "stdout:\nAPIUpdater Configuration Validation\n-----------------------------------\n\nConfiguration Validation Tests (Failed: 0, Total: 1, Ignored 0):\n----------------------------------------------------------------\n\n\nAuto Generated Tests (Failed: 1, Total: 1, Ignored 0):\n------------------------------------------------------\n1) Expected updates not applied for configuration:\n[*] System.SByte [*] Unity.Rendering.MaterialMeshInfo::Submesh -> * Unity.Rendering.MaterialMeshInfo::SubMesh\n\nInput : unsafe class Test : object { System.SByte Method(System.SByte memberValue, Unity.Rendering.MaterialMeshInfo obj) { System.SByte local = obj.Submesh; return Method(obj.Submesh, obj); } }\nExpected: unsafe class Test : object { System.UInt16 Method(System.UInt16 memberValue, Unity.Rendering.MaterialMeshInfo obj) { System.UInt16 local = obj.SubMesh; return Method(obj.SubMesh, obj); } }\nActual : unsafe class Test : object { System.SByte Method(System.SByte memberValue, Unity.Rendering.MaterialMeshInfo obj) { System.SByte local = obj.SubMesh; return Method(obj.SubMesh, obj); } }\n\n\nBase type validation (Failed: 0, Total: 0, Ignored 0):\n------------------------------------------------------\nstderr:\n", - "PackageVersion": "1.3.2" + "PackageVersion": "1.4.2" }, { "ValidationTest": "API Validation", "ExceptionMessage": "Breaking changes require a new major version.", - "PackageVersion": "1.3.2" + "PackageVersion": "1.4.2" } ], "WarningExceptions": [ { "ValidationTest": "Manifest Validation", "ExceptionMessage": "Package dependency com.unity.entities@0.60.0-preview.88 must be promoted to production before this package is promoted to production. (Except for core packages)", - "PackageVersion": "1.3.2" + "PackageVersion": "1.4.2" }, { "ValidationTest": "Folder Structure Validation", "ExceptionMessage": "The Resources Directory should not be used in packages. For more guidance, please visit https://docs.unity3d.com/Manual/BestPracticeUnderstandingPerformanceInUnity6.html", - "PackageVersion": "1.3.2" + "PackageVersion": "1.4.2" }, { "ValidationTest": "Package Lifecycle Validation", "ExceptionMessage": "com.unity.entities.graphics has never been promoted to production before. Please contact Release Management through slack in #devs-pkg-promotion to promote the first version of your package before trying to use this automated pipeline. Read more about this error and potential solutions at https://docs.unity3d.com/Packages/com.unity.package-validation-suite@latest/index.html?preview=1&subfolder=/manual/lifecycle_validation_error.html#the-very-first-version-of-a-package-must-be-promoted-by-release-management", - "PackageVersion": "1.3.2" + "PackageVersion": "1.4.2" } ] } diff --git a/package.json b/package.json index 9d20027..1e57f84 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,12 @@ { "name": "com.unity.entities.graphics", "displayName": "Entities Graphics", - "version": "1.3.2", + "version": "1.4.2", "unity": "2022.3", "unityRelease": "11f1", "description": "The Entities Graphics package provides systems and components for drawing meshes using DOTS, including support for instanced mesh rendering and LOD.", "dependencies": { - "com.unity.entities": "1.3.2", + "com.unity.entities": "1.3.5", "com.unity.modules.particlesystem": "1.0.0", "com.unity.render-pipelines.core": "14.0.9" }, @@ -17,15 +17,15 @@ "unity" ], "_upm": { - "changelog": "### Changed\n* Updated entities packages dependencies\n\n### Fixed\n\n* Fixed an issue with entities.graphics and Burst 1.8.12" + "changelog": "### Changed\n\n* Updated Burst dependency to version 1.8.18\n* Updated entities packages dependencies\n\n### Added\n\n* The new `ProceduralMotion_Tag` tag component data type informs Entities Graphics that an Entity needs to participate in the object motion vector pass. The tag is automatically added for entities that go through the builtin MeshRendererBaker path.\n* Enable entities motion vector pass participation for URP.\n* PruneUploadBufferPool API to request pruning of the upload buffer pool.\n\n\n### Fixed\n\n* GameObjects that depend on vertex shader logic to generate procedural motion vectors through object motion vector passes will now also do the same when baked to Entities and rendered through Entities Graphics." }, "upmCi": { - "footprint": "b30d75e71b7cb1e38d98d187e7095ae1ea33bbce" + "footprint": "0272692301aadf6ab8f8a54a59dd19a7ea2445c3" }, - "documentationUrl": "https://docs.unity3d.com/Packages/com.unity.entities.graphics@1.3/manual/index.html", + "documentationUrl": "https://docs.unity3d.com/Packages/com.unity.entities.graphics@1.4/manual/index.html", "repository": { "url": "https://github.cds.internal.unity3d.com/unity/dots.git", "type": "git", - "revision": "921920e681054c59b440cc1e2aef10f781dc4124" + "revision": "f9f023a1661a1a7a17264c9907b75c9b46434416" } } diff --git a/pvpExceptions.json b/pvpExceptions.json new file mode 100644 index 0000000..ce40162 --- /dev/null +++ b/pvpExceptions.json @@ -0,0 +1,50 @@ +{ + "exempts": { + "PVP-38-1": { + "errors": [ + "Unity.Entities.Graphics/Deformations/Resources/BlendShapeComputeShader.compute", + "Unity.Entities.Graphics/Deformations/Resources/InstantiateDeformationData.compute", + "Unity.Entities.Graphics/Deformations/Resources/SkinningComputeShader.compute", + "Unity.Entities.Graphics/Resources/SparseUploader.compute", + "Unity.Entities.Graphics/Deformations/Resources/BlendShapeComputeShader.compute.meta", + "Unity.Entities.Graphics/Deformations/Resources/InstantiateDeformationData.compute.meta", + "Unity.Entities.Graphics/Resources/Occlusion/OccludeeScreenSpaceAABB.shader.meta", + "Unity.Entities.Graphics/Resources/Occlusion.meta", + "Unity.Entities.Graphics/Resources/Occlusion/OcclusionDebugComposite.shader.meta", + "Unity.Entities.Graphics/Resources/Occlusion/OcclusionDebugOccluders.shader.meta", + "Unity.Entities.Graphics/Resources/Occlusion/ShowOccluderMesh.shadergraph.meta", + "Unity.Entities.Graphics/Deformations/Resources/SkinningComputeShader.compute.meta", + "Unity.Entities.Graphics/Resources/SparseUploader.compute.meta", + "Unity.Entities.Graphics/Resources/Occlusion/OccludeeScreenSpaceAABB.shader", + "Unity.Entities.Graphics/Resources/Occlusion/OcclusionDebugComposite.shader", + "Unity.Entities.Graphics/Resources/Occlusion/OcclusionDebugOccluders.shader", + "Unity.Entities.Graphics/Resources/Occlusion/ShowOccluderMesh.shadergraph" + ] + }, + "PVP-41-1": { + "errors": [ + "CHANGELOG.md: line 7: Unreleased section is not allowed for public release" + ] + }, + "PVP-150-1": { + "errors": [ + "MaterialOverride: void OnValidate(): cannot auto-inheritdoc (not an override or interface implementation); must specify 'cref'", + "MaterialOverrideAsset: void OnValidate(): cannot auto-inheritdoc (not an override or interface implementation); must specify 'cref'", + "Unity.Rendering.MaterialMeshInfo: MaterialMeshInfo FromMaterialMeshIndexRange(int, int): empty tag" + ] + }, + "PVP-151-1": { + "errors": [ + "MaterialOverride: void OnValidate(): missing ", + "MaterialOverrideAsset: void OnValidate(): missing ", + "Unity.Rendering.OverrideLightProbeAnchorComponent: undocumented", + "Unity.Rendering.OverrideLightProbeAnchorComponent: entity: undocumented", + "Unity.Rendering.OverrideLightProbeAnchorBaker: undocumented", + "Unity.Rendering.OverrideLightProbeAnchorBaker: void Bake(MeshRenderer): undocumented", + "Unity.Rendering.MaterialMeshIndex: MaterialIndex: undocumented", + "Unity.Rendering.MaterialMeshIndex: MeshIndex: undocumented", + "Unity.Rendering.MaterialMeshIndex: SubMeshIndex: undocumented" + ] + } + } +} diff --git a/pvpExceptions.json.meta b/pvpExceptions.json.meta new file mode 100644 index 0000000..b776869 --- /dev/null +++ b/pvpExceptions.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 59d10d254bdb69d44a1d4dbf148aa665 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: