This commit is contained in:
StarBeats 2025-01-10 09:51:30 +08:00
commit e167a58180
2 changed files with 72 additions and 25 deletions

View File

@ -250,8 +250,9 @@ namespace UnityEngine.Rendering.Universal.Internal
} }
else else
{ {
var useDx12 = SystemInfo.graphicsDeviceType == GraphicsDeviceType.Direct3D12;
var asset = UniversalRenderPipeline.asset; var asset = UniversalRenderPipeline.asset;
if(asset.VRSRate != RenderingPlugin.VRSPluginShadingRate.X1_PER_PIXEL) void EnableVrs(CommandBuffer cmd, bool useDx12, in RenderingData renderingData, UniversalRenderPipelineAsset asset)
{ {
#if PLATFORM_IOS || UNITY_STANDALONE_OSX #if PLATFORM_IOS || UNITY_STANDALONE_OSX
DataPack* ptr = (DataPack*)vrsDataPackPtr.ToPointer(); DataPack* ptr = (DataPack*)vrsDataPackPtr.ToPointer();
@ -294,40 +295,86 @@ namespace UnityEngine.Rendering.Universal.Internal
cmd.BeginSample("EnableVrs"); cmd.BeginSample("EnableVrs");
cmd.IssuePluginEventAndData(RenderingPlugin.GetRenderEventAndDataFunc(), (int)RenderingPlugin.NativeRenderingEvent.EnableVRS, vrsDataPackPtr); cmd.IssuePluginEventAndData(RenderingPlugin.GetRenderEventAndDataFunc(), (int)RenderingPlugin.NativeRenderingEvent.EnableVRS, vrsDataPackPtr);
#else #else
cmd.BeginSample("EnableVrs");
*(int*)vrsEnumPtr.ToPointer() = (int)asset.VRSRate; *(int*)vrsEnumPtr.ToPointer() = (int)asset.VRSRate;
cmd.IssuePluginEventAndData(RenderingPlugin.GetRenderEventAndDataFunc(), (int)RenderingPlugin.NativeRenderingEvent.EnableVRS, vrsEnumPtr); cmd.IssuePluginEventAndData(RenderingPlugin.GetRenderEventAndDataFunc(), (int)RenderingPlugin.NativeRenderingEvent.EnableVRS, vrsEnumPtr);
context.ExecuteCommandBuffer(cmd);
cmd.Clear();
#endif #endif
cmd.EndSample("EnableVrs"); cmd.EndSample("EnableVrs");
context.ExecuteCommandBuffer(cmd);
#if DX12 cmd.Clear();
// DX12 下会 context.DrawRenderers 重新设置 view port 和 scissor rect if (useDx12)
cmd.SetViewport(camera.pixelRect); {
cmd.EnableScissorRect(camera.pixelRect); // DX12 下会 context.DrawRenderers 重新设置 view port 和 scissor rect
#endif Rect renderRect = new Rect(0, 0, renderingData.cameraData.cameraTargetDescriptor.width, renderingData.cameraData.cameraTargetDescriptor.height);
cmd.SetViewport(renderRect);
cmd.EnableScissorRect(renderRect);
}
} }
#if DX12 || UNITY_STANDALONE_OSX
RendererUtils.RendererListDesc rendererListDesc = new (data.m_ShaderTagIdList.ToArray(), renderingData.cullResults,camera);
rendererListDesc.layerMask = camera.cullingMask;
rendererListDesc.sortingCriteria = sortFlags;
rendererListDesc.renderQueueRange = filterSettings.renderQueueRange;
rendererListDesc.layerMask = filterSettings.layerMask;
rendererListDesc.excludeObjectMotionVectors = false;
rendererListDesc.rendererConfiguration = drawSettings.perObjectData;
rendererListDesc.stateBlock = data.m_RenderStateBlock;
cmd.DrawRendererList(context.CreateRendererList(rendererListDesc));
#else
context.DrawRenderers(renderingData.cullResults, ref drawSettings, ref filterSettings, ref data.m_RenderStateBlock);
#endif
if (asset.VRSRate != RenderingPlugin.VRSPluginShadingRate.X1_PER_PIXEL) void DisableVrs()
{ {
cmd.BeginSample("DisableVrs"); cmd.BeginSample("DisableVrs");
cmd.IssuePluginEventAndData(RenderingPlugin.GetRenderEventAndDataFunc(), (int)RenderingPlugin.NativeRenderingEvent.DisableVRS, IntPtr.Zero); cmd.IssuePluginEventAndData(RenderingPlugin.GetRenderEventAndDataFunc(), (int)RenderingPlugin.NativeRenderingEvent.DisableVRS, IntPtr.Zero);
cmd.EndSample("DisableVrs"); cmd.EndSample("DisableVrs");
} }
if (data.m_IsOpaque)
{
if (useDx12)
{
RendererUtils.RendererListDesc rendererListDesc = new(data.m_ShaderTagIdList.ToArray(), renderingData.cullResults, camera);
rendererListDesc.sortingCriteria = sortFlags;
rendererListDesc.renderQueueRange = filterSettings.renderQueueRange;
rendererListDesc.layerMask = filterSettings.layerMask;
rendererListDesc.excludeObjectMotionVectors = false;
rendererListDesc.rendererConfiguration = drawSettings.perObjectData;
rendererListDesc.stateBlock = data.m_RenderStateBlock;
cmd.DrawRendererList(context.CreateRendererList(rendererListDesc));
if (asset.VRSRate != RenderingPlugin.VRSPluginShadingRate.X1_PER_PIXEL)
{
EnableVrs(cmd, useDx12, renderingData, asset);
rendererListDesc.layerMask = 1 << 31;
cmd.DrawRendererList(context.CreateRendererList(rendererListDesc));
DisableVrs();
}
cmd.DisableScissorRect();
}
else
{
context.DrawRenderers(renderingData.cullResults, ref drawSettings, ref filterSettings, ref data.m_RenderStateBlock);
if (asset.VRSRate != RenderingPlugin.VRSPluginShadingRate.X1_PER_PIXEL)
{
EnableVrs(cmd, useDx12, renderingData, asset);
filterSettings.layerMask = 1 << 31;
context.DrawRenderers(renderingData.cullResults, ref drawSettings, ref filterSettings, ref data.m_RenderStateBlock);
DisableVrs();
}
}
}
else
{
if (asset.VRSRate != RenderingPlugin.VRSPluginShadingRate.X1_PER_PIXEL)
{
EnableVrs(cmd, useDx12, renderingData, asset);
RendererUtils.RendererListDesc rendererListDesc = new(data.m_ShaderTagIdList.ToArray(), renderingData.cullResults, camera);
rendererListDesc.sortingCriteria = sortFlags;
rendererListDesc.renderQueueRange = filterSettings.renderQueueRange;
rendererListDesc.layerMask = filterSettings.layerMask;
rendererListDesc.excludeObjectMotionVectors = false;
rendererListDesc.rendererConfiguration = drawSettings.perObjectData;
rendererListDesc.stateBlock = data.m_RenderStateBlock;
cmd.DrawRendererList(context.CreateRendererList(rendererListDesc));
DisableVrs();
}
cmd.DisableScissorRect();
}
// Render objects that did not match any shader pass with error shader // Render objects that did not match any shader pass with error shader
RenderingUtils.RenderObjectsWithError(context, ref renderingData.cullResults, camera, filterSettings, SortingCriteria.None); RenderingUtils.RenderObjectsWithError(context, ref renderingData.cullResults, camera, filterSettings, SortingCriteria.None);
} }

View File

@ -1,5 +1,5 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:yousandi.cn,2023: %TAG !u! tag:unity3d.com,2011:
--- !u!78 &1 --- !u!78 &1
TagManager: TagManager:
serializedVersion: 2 serializedVersion: 2
@ -40,7 +40,7 @@ TagManager:
- -
- -
- -
- - VRS
m_SortingLayers: m_SortingLayers:
- name: Default - name: Default
uniqueID: 0 uniqueID: 0