diff --git a/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.cs b/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.cs index 405830387e9..f775f98b717 100644 --- a/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.cs +++ b/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.cs @@ -49,6 +49,9 @@ public struct RenderGraphParameters class RenderGraphDebugParams { + DebugUI.Widget[] m_DebugItems; + DebugUI.Panel m_DebugPanel; + public bool clearRenderTargetsAtCreation; public bool clearRenderTargetsAtRelease; public bool disablePassCulling; @@ -56,44 +59,55 @@ class RenderGraphDebugParams public bool logFrameInformation; public bool logResources; - public void RegisterDebug(string name) + public void RegisterDebug(string name, DebugUI.Panel debugPanel = null) { var list = new List(); - list.Add(new DebugUI.BoolField { displayName = "Clear Render Targets at creation", getter = () => clearRenderTargetsAtCreation, setter = value => clearRenderTargetsAtCreation = value }); - // We cannot expose this option as it will change the active render target and the debug menu won't know where to render itself anymore. - // list.Add(new DebugUI.BoolField { displayName = "Clear Render Targets at release", getter = () => clearRenderTargetsAtRelease, setter = value => clearRenderTargetsAtRelease = value }); - list.Add(new DebugUI.BoolField { displayName = "Disable Pass Culling", getter = () => disablePassCulling, setter = value => disablePassCulling = value }); - list.Add(new DebugUI.BoolField { displayName = "Immediate Mode", getter = () => immediateMode, setter = value => immediateMode = value }); - list.Add(new DebugUI.Button - { - displayName = "Log Frame Information", - action = () => - { - logFrameInformation = true; - #if UNITY_EDITOR - UnityEditor.SceneView.RepaintAll(); - #endif - } - }); - list.Add(new DebugUI.Button + list.Add(new DebugUI.Container { - displayName = "Log Resources", - action = () => + displayName = $"{name} Render Graph", + children = { - logResources = true; - #if UNITY_EDITOR - UnityEditor.SceneView.RepaintAll(); - #endif + new DebugUI.BoolField { displayName = "Clear Render Targets at creation", getter = () => clearRenderTargetsAtCreation, setter = value => clearRenderTargetsAtCreation = value }, + // We cannot expose this option as it will change the active render target and the debug menu won't know where to render itself anymore. + // list.Add(new DebugUI.BoolField { displayName = "Clear Render Targets at release", getter = () => clearRenderTargetsAtRelease, setter = value => clearRenderTargetsAtRelease = value }); + new DebugUI.BoolField { displayName = "Disable Pass Culling", getter = () => disablePassCulling, setter = value => disablePassCulling = value }, + new DebugUI.BoolField { displayName = "Immediate Mode", getter = () => immediateMode, setter = value => immediateMode = value }, + new DebugUI.Button + { + displayName = "Log Frame Information", + action = () => + { + logFrameInformation = true; + #if UNITY_EDITOR + UnityEditor.SceneView.RepaintAll(); + #endif + } + }, + new DebugUI.Button + { + displayName = "Log Resources", + action = () => + { + logResources = true; + #if UNITY_EDITOR + UnityEditor.SceneView.RepaintAll(); + #endif + } + } } }); - var panel = DebugManager.instance.GetPanel(name.Length == 0 ? "Render Graph" : name, true); - panel.children.Add(list.ToArray()); + m_DebugItems = list.ToArray(); + m_DebugPanel = debugPanel != null ? debugPanel : DebugManager.instance.GetPanel(name.Length == 0 ? "Render Graph" : name, true); + m_DebugPanel.children.Add(m_DebugItems); } public void UnRegisterDebug(string name) { - DebugManager.instance.RemovePanel(name.Length == 0 ? "Render Graph" : name); + //DebugManager.instance.RemovePanel(name.Length == 0 ? "Render Graph" : name); + m_DebugPanel.children.Remove(m_DebugItems); + m_DebugPanel = null; + m_DebugItems = null; } } @@ -306,8 +320,6 @@ public RenderGraph(string name = "RenderGraph") m_CompiledResourcesInfos[i] = new DynamicArray(); } - m_DebugParameters.RegisterDebug(this.name); - s_RegisteredGraphs.Add(this); onGraphRegistered?.Invoke(this); } @@ -317,7 +329,6 @@ public RenderGraph(string name = "RenderGraph") /// public void Cleanup() { - m_DebugParameters.UnRegisterDebug(this.name); m_Resources.Cleanup(); m_DefaultResources.Cleanup(); @@ -325,6 +336,32 @@ public void Cleanup() onGraphUnregistered?.Invoke(this); } + /// + /// Register the render graph to the debug window. + /// + /// + public void RegisterDebug(DebugUI.Panel panel = null) + { + m_DebugParameters.RegisterDebug(name, panel); + } + + /// + /// Unregister render graph from the debug window. + /// + public void UnRegisterDebug() + { + m_DebugParameters.UnRegisterDebug(this.name); + } + + /// + /// Get the list of all registered render graphs. + /// + /// The list of all registered render graphs. + public static List GetRegisteredRenderGraphs() + { + return s_RegisteredGraphs; + } + /// /// Returns the last rendered frame debug data. Can be null if requireDebugData is set to false. /// @@ -657,11 +694,6 @@ public void EndProfilingSampler(ProfilingSampler sampler) #endregion #region Internal Interface - internal static List GetRegisteredRenderGraphs() - { - return s_RegisteredGraphs; - } - // Internal for testing purpose only internal DynamicArray GetCompiledPassInfos() { return m_CompiledPassInfos; } diff --git a/com.unity.render-pipelines.high-definition/CHANGELOG.md b/com.unity.render-pipelines.high-definition/CHANGELOG.md index 0d99108aae6..e3bbf2cd3af 100644 --- a/com.unity.render-pipelines.high-definition/CHANGELOG.md +++ b/com.unity.render-pipelines.high-definition/CHANGELOG.md @@ -105,6 +105,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Changed resolution (to match the render buffer) of the sky used for camera misses in Path Tracing. (case 1304114). - Tidy up of platform abstraction code for shader optimization. - Display a warning help box when decal atlas is out of size. +- Moved the HDRP render graph debug panel content to the Rendering debug panel. ## [11.0.0] - 2020-10-21 diff --git a/com.unity.render-pipelines.high-definition/Runtime/Debug/DebugDisplay.cs b/com.unity.render-pipelines.high-definition/Runtime/Debug/DebugDisplay.cs index a01ad7cf3c7..136919539a3 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/Debug/DebugDisplay.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/Debug/DebugDisplay.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Reflection; using UnityEngine.Rendering.HighDefinition.Attributes; +using UnityEngine.Experimental.Rendering.RenderGraphModule; namespace UnityEngine.Rendering.HighDefinition { @@ -1806,6 +1807,19 @@ void RegisterRenderingDebug() m_DebugRenderingItems = widgetList.ToArray(); var panel = DebugManager.instance.GetPanel(k_PanelRendering, true); panel.children.Add(m_DebugRenderingItems); + + var renderGraphs = RenderGraph.GetRegisteredRenderGraphs(); + foreach (var graph in renderGraphs) + graph.RegisterDebug(panel); + } + + void UnregisterRenderingDebug() + { + UnregisterDebugItems(k_PanelRendering, m_DebugRenderingItems); + + var renderGraphs = RenderGraph.GetRegisteredRenderGraphs(); + foreach (var graph in renderGraphs) + graph.UnRegisterDebug(); } void RegisterDecalsDebug() @@ -1848,7 +1862,7 @@ internal void UnregisterDebug() UnregisterDebugItems(k_PanelMaterials, m_DebugMaterialItems); UnregisterDebugItems(k_PanelLighting, m_DebugLightingItems); UnregisterDebugItems(k_PanelVolume, m_DebugVolumeItems); - UnregisterDebugItems(k_PanelRendering, m_DebugRenderingItems); + UnregisterRenderingDebug(); DebugManager.instance.UnregisterData(this); } @@ -1948,7 +1962,7 @@ internal void UpdateCameraFreezeOptions() s_CameraNamesStrings = s_CameraNames.ToArray(); s_CameraNamesValues = Enumerable.Range(0, s_CameraNames.Count()).ToArray(); - UnregisterDebugItems(k_PanelRendering, m_DebugRenderingItems); + UnregisterRenderingDebug(); RegisterRenderingDebug(); needsRefreshingCameraFreezeList = false; } diff --git a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs index 99a3b274a1b..3eeaca061d2 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs @@ -260,7 +260,7 @@ internal int GetMaxScreenSpaceShadows() bool frozenCullingParamAvailable = false; // RENDER GRAPH - RenderGraph m_RenderGraph = new RenderGraph("HDRPGraph"); + RenderGraph m_RenderGraph = new RenderGraph("HDRP"); // MSAA resolve materials Material m_ColorResolveMaterial = null; @@ -710,11 +710,6 @@ void UnsetRenderingFeatures() #endif } - void InitializeRenderGraph() - { - m_RenderGraph = new RenderGraph("HDRPGraph"); - } - void CleanupRenderGraph() { m_RenderGraph.Cleanup(); @@ -871,10 +866,10 @@ void DisposeProbeCameraPool() } #endif - - CleanupRenderGraph(); } + CleanupRenderGraph(); + ConstantBuffer.ReleaseAll(); CameraCaptureBridge.enabled = false;