A game about forced loneliness, made by TACStudios
at master 152 lines 7.6 kB view raw
1using System.Collections.Generic; 2using NameAndTooltip = UnityEngine.Rendering.DebugUI.Widget.NameAndTooltip; 3 4namespace UnityEngine.Rendering.RenderGraphModule 5{ 6 class RenderGraphDebugParams : IDebugDisplaySettingsQuery 7 { 8 DebugUI.Widget[] m_DebugItems; 9 DebugUI.Panel m_DebugPanel; 10 11 public bool clearRenderTargetsAtCreation; 12 public bool clearRenderTargetsAtRelease; 13 public bool disablePassCulling; 14 public bool immediateMode; 15 public bool enableLogging; 16 public bool logFrameInformation; 17 public bool logResources; 18 19 internal void Reset() 20 { 21 clearRenderTargetsAtCreation = false; 22 clearRenderTargetsAtRelease = false; 23 disablePassCulling = false; 24 immediateMode = false; 25 enableLogging = false; 26 logFrameInformation = false; 27 logResources = false; 28 } 29 30 private static class Strings 31 { 32 public static readonly NameAndTooltip ClearRenderTargetsAtCreation = new() { name = "Clear Render Targets At Creation", tooltip = "Enable to clear all render textures before any rendergraph passes to check if some clears are missing." }; 33 public static readonly NameAndTooltip ClearRenderTargetsAtFree = new() { name = "Clear Render Targets When Freed", tooltip = "Enable to clear all render textures when textures are freed by the graph to detect use after free of textures." }; 34 public static readonly NameAndTooltip DisablePassCulling = new() { name = "Disable Pass Culling", tooltip = "Enable to temporarily disable culling to assess if a pass is culled." }; 35 public static readonly NameAndTooltip ImmediateMode = new() { name = "Immediate Mode", tooltip = "Enable to force render graph to execute all passes in the order you registered them." }; 36 public static readonly NameAndTooltip EnableLogging = new() { name = "Enable Logging", tooltip = "Enable to allow HDRP to capture information in the log." }; 37 public static readonly NameAndTooltip LogFrameInformation = new() { name = "Log Frame Information", tooltip = "Enable to log information output from each frame." }; 38 public static readonly NameAndTooltip LogResources = new() { name = "Log Resources", tooltip = "Enable to log the current render graph's global resource usage." }; 39 public static readonly NameAndTooltip EnableNativeCompiler = new() { name = "Enable Native Pass Compiler", tooltip = "Enable the new native pass compiler." }; 40 } 41 42 internal List<DebugUI.Widget> GetWidgetList(string name) 43 { 44 var list = new List<DebugUI.Widget> 45 { 46 new DebugUI.Container 47 { 48 displayName = $"{name} Render Graph", 49 children = 50 { 51 new DebugUI.BoolField 52 { 53 nameAndTooltip = Strings.ClearRenderTargetsAtCreation, 54 getter = () => clearRenderTargetsAtCreation, 55 setter = value => clearRenderTargetsAtCreation = value 56 }, 57 new DebugUI.BoolField 58 { 59 nameAndTooltip = Strings.ClearRenderTargetsAtFree, 60 getter = () => clearRenderTargetsAtRelease, 61 setter = value => clearRenderTargetsAtRelease = value 62 }, 63 // 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. 64 // list.Add(new DebugUI.BoolField { displayName = "Clear Render Targets at release", getter = () => clearRenderTargetsAtRelease, setter = value => clearRenderTargetsAtRelease = value }); 65 new DebugUI.BoolField 66 { 67 nameAndTooltip = Strings.DisablePassCulling, 68 getter = () => disablePassCulling, 69 setter = value => disablePassCulling = value 70 }, 71 new DebugUI.BoolField 72 { 73 nameAndTooltip = Strings.ImmediateMode, 74 getter = () => immediateMode, 75 setter = value => immediateMode = value, 76 // [UUM-64948] Temporarily disable for URP while we implement support for Immediate Mode in the RenderGraph 77 isHiddenCallback = () => !IsImmediateModeSupported() 78 }, 79 new DebugUI.BoolField 80 { 81 nameAndTooltip = Strings.EnableLogging, 82 getter = () => enableLogging, 83 setter = value => enableLogging = value 84 }, 85 new DebugUI.Button 86 { 87 nameAndTooltip = Strings.LogFrameInformation, 88 action = () => 89 { 90 if (!enableLogging) 91 Debug.Log("You must first enable logging before logging frame information."); 92 logFrameInformation = true; 93#if UNITY_EDITOR 94 UnityEditor.SceneView.RepaintAll(); 95#endif 96 } 97 }, 98 new DebugUI.Button 99 { 100 nameAndTooltip = Strings.LogResources, 101 action = () => 102 { 103 if (!enableLogging) 104 Debug.Log("You must first enable logging before logging resources."); 105 logResources = true; 106#if UNITY_EDITOR 107 UnityEditor.SceneView.RepaintAll(); 108#endif 109 } 110 } 111 } 112 } 113 }; 114 115 return list; 116 } 117 118 private bool IsImmediateModeSupported() 119 { 120 return GraphicsSettings.currentRenderPipeline is IRenderGraphEnabledRenderPipeline rgPipeline && 121 rgPipeline.isImmediateModeSupported; 122 } 123 124 public void RegisterDebug(string name, DebugUI.Panel debugPanel = null) 125 { 126 var list = GetWidgetList(name); 127 m_DebugItems = list.ToArray(); 128 m_DebugPanel = debugPanel != null ? debugPanel : DebugManager.instance.GetPanel(name.Length == 0 ? "Render Graph" : name, true); 129 m_DebugPanel.children.Add(m_DebugItems); 130 } 131 132 public void UnRegisterDebug(string name) 133 { 134 //DebugManager.instance.RemovePanel(name.Length == 0 ? "Render Graph" : name); 135 if ( m_DebugPanel != null ) m_DebugPanel.children.Remove(m_DebugItems); 136 m_DebugPanel = null; 137 m_DebugItems = null; 138 } 139 140 public bool AreAnySettingsActive 141 { 142 get 143 { 144 return clearRenderTargetsAtCreation || 145 clearRenderTargetsAtRelease || 146 disablePassCulling || 147 immediateMode || 148 enableLogging; 149 } 150 } 151 } 152}