Skip to content

Commit e49f549

Browse files
RoseHirigoyenEvergreen
authored andcommitted
UUM-69513 Disable immediate mode for URP
JIRA: [UUM-69513](https://jira.unity3d.com/browse/UUM-69513) Immediate Mode is a rendergraph debug mode that is only supported by non-NRP RG in HDRP While we decide if we want to implement it for URP, it should be removed in URP so that users do not encounter issues with it.
1 parent 456903b commit e49f549

File tree

6 files changed

+93
-38
lines changed

6 files changed

+93
-38
lines changed

Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Debug/RenderGraphDebugParams.cs

Lines changed: 68 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -41,53 +41,86 @@ private static class Strings
4141

4242
internal List<DebugUI.Widget> GetWidgetList(string name)
4343
{
44-
var list = new List<DebugUI.Widget>();
45-
46-
list.Add(new DebugUI.Container
44+
var list = new List<DebugUI.Widget>
4745
{
48-
displayName = $"{name} Render Graph",
49-
children =
46+
new DebugUI.Container
5047
{
51-
new DebugUI.BoolField { nameAndTooltip = Strings.ClearRenderTargetsAtCreation, getter = () => clearRenderTargetsAtCreation, setter = value => clearRenderTargetsAtCreation = value },
52-
new DebugUI.BoolField { nameAndTooltip = Strings.ClearRenderTargetsAtFree, getter = () => clearRenderTargetsAtRelease, setter = value => clearRenderTargetsAtRelease = value },
53-
// 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.
54-
// list.Add(new DebugUI.BoolField { displayName = "Clear Render Targets at release", getter = () => clearRenderTargetsAtRelease, setter = value => clearRenderTargetsAtRelease = value });
55-
new DebugUI.BoolField { nameAndTooltip = Strings.DisablePassCulling, getter = () => disablePassCulling, setter = value => disablePassCulling = value },
56-
new DebugUI.BoolField { nameAndTooltip = Strings.ImmediateMode, getter = () => immediateMode, setter = value => immediateMode = value },
57-
new DebugUI.BoolField { nameAndTooltip = Strings.EnableLogging, getter = () => enableLogging, setter = value => enableLogging = value },
58-
new DebugUI.Button
48+
displayName = $"{name} Render Graph",
49+
children =
5950
{
60-
nameAndTooltip = Strings.LogFrameInformation,
61-
action = () =>
51+
new DebugUI.BoolField
6252
{
63-
if (!enableLogging)
64-
Debug.Log("You must first enable logging before this logging frame information.");
65-
logFrameInformation = true;
66-
#if UNITY_EDITOR
67-
UnityEditor.SceneView.RepaintAll();
68-
#endif
69-
}
70-
},
71-
new DebugUI.Button
72-
{
73-
nameAndTooltip = Strings.LogResources,
74-
action = () =>
53+
nameAndTooltip = Strings.ClearRenderTargetsAtCreation,
54+
getter = () => clearRenderTargetsAtCreation,
55+
setter = value => clearRenderTargetsAtCreation = value
56+
},
57+
new DebugUI.BoolField
7558
{
76-
if (!enableLogging)
77-
Debug.Log("You must first enable logging before this logging resources.");
78-
logResources = true;
79-
80-
#if UNITY_EDITOR
81-
UnityEditor.SceneView.RepaintAll();
82-
#endif
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+
}
83110
}
84111
}
85112
}
86-
});
113+
};
87114

88115
return list;
89116
}
90117

118+
private bool IsImmediateModeSupported()
119+
{
120+
return GraphicsSettings.currentRenderPipeline is IRenderGraphEnabledRenderPipeline rgPipeline &&
121+
rgPipeline.isImmediateModeSupported;
122+
}
123+
91124
public void RegisterDebug(string name, DebugUI.Panel debugPanel = null)
92125
{
93126
var list = GetWidgetList(name);
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
namespace UnityEngine.Rendering.RenderGraphModule
2+
{
3+
/// <summary>
4+
/// Interface to add/manage Render Graph related parameters across different types of RenderPipelineAssets.
5+
/// </summary>
6+
public interface IRenderGraphEnabledRenderPipeline
7+
{
8+
/// <summary>
9+
/// Indicates if this render pipeline instance supports ImmediateMode when debugging the render graph.
10+
/// </summary>
11+
bool isImmediateModeSupported { get; }
12+
}
13+
}

Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/IRenderGraphEnabledRenderPipeline.cs.meta

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipelineAsset.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using UnityEditor.Rendering;
4+
using UnityEngine.Rendering.RenderGraphModule;
45
using UnityEngine.Serialization;
56
#if UNITY_EDITOR
67
using System.Linq;
@@ -20,7 +21,7 @@ namespace UnityEngine.Rendering.HighDefinition
2021
#if UNITY_EDITOR
2122
// [ShaderKeywordFilter.ApplyRulesIfTagsEqual("RenderPipeline", "HDRenderPipeline")]
2223
#endif
23-
public partial class HDRenderPipelineAsset : RenderPipelineAsset<HDRenderPipeline>, IVirtualTexturingEnabledRenderPipeline, IProbeVolumeEnabledRenderPipeline, IGPUResidentRenderPipeline
24+
public partial class HDRenderPipelineAsset : RenderPipelineAsset<HDRenderPipeline>, IVirtualTexturingEnabledRenderPipeline, IProbeVolumeEnabledRenderPipeline, IGPUResidentRenderPipeline, IRenderGraphEnabledRenderPipeline
2425
{
2526
/// <inheritdoc/>
2627
public override string renderPipelineShaderTag => HDRenderPipeline.k_ShaderTagName;
@@ -203,6 +204,9 @@ internal bool useRenderGraph
203204
set => m_UseRenderGraph = value;
204205
}
205206

207+
/// <inheritdoc/>
208+
public bool isImmediateModeSupported => true;
209+
206210
[SerializeField] private CustomPostProcessVolumeComponentList m_CompositorCustomVolumeComponentsList = new(CustomPostProcessInjectionPoint.BeforePostProcess);
207211

208212
internal CustomPostProcessVolumeComponentList compositorCustomVolumeComponentsList =>

Packages/com.unity.render-pipelines.universal/Documentation~/features/rendering-debugger.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,6 @@ The properties in this section let you change how the [render graph system](../r
207207
| **Clear Render Targets At Creation** | Clear render textures the first time the render graph system uses them. |
208208
| **Clear Render Targets When Freed** | Clear render textures when they're no longer used by render graph. |
209209
| **Disable Pass Culling** | Disable URP culling render passes that have no impact on the final render. |
210-
| **Immediate Mode** | Force URP to execute passes in the order you set them up. |
211210
| **Enable Logging** | Enable logging to the **Console** window. |
212211
| **Log Frame Information** | Log how URP uses the resources during the frame, in the **Console** window. |
213212
| **Log Resources** | Log the resources URP uses during the frame, in the **Console** window. |

Packages/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
using UnityEngine;
1313
using UnityEngine.Serialization;
1414
using UnityEngine.Experimental.Rendering;
15+
using UnityEngine.Rendering.RenderGraphModule;
1516

1617
namespace UnityEngine.Rendering.Universal
1718
{
@@ -454,7 +455,7 @@ internal static void EmitConsoleWarning()
454455
#if UNITY_EDITOR
455456
[ShaderKeywordFilter.ApplyRulesIfTagsEqual("RenderPipeline", "UniversalPipeline")]
456457
#endif
457-
public partial class UniversalRenderPipelineAsset : RenderPipelineAsset<UniversalRenderPipeline>, ISerializationCallbackReceiver, IProbeVolumeEnabledRenderPipeline, IGPUResidentRenderPipeline
458+
public partial class UniversalRenderPipelineAsset : RenderPipelineAsset<UniversalRenderPipeline>, ISerializationCallbackReceiver, IProbeVolumeEnabledRenderPipeline, IGPUResidentRenderPipeline, IRenderGraphEnabledRenderPipeline
458459
{
459460
ScriptableRenderer[] m_Renderers = new ScriptableRenderer[1];
460461

@@ -685,6 +686,9 @@ public partial class UniversalRenderPipelineAsset : RenderPipelineAsset<Universa
685686
static string[] s_Names;
686687
static int[] s_Values;
687688

689+
/// <inheritdoc/>
690+
public bool isImmediateModeSupported => false;
691+
688692
#if UNITY_EDITOR
689693
public static readonly string packagePath = "Packages/com.unity.render-pipelines.universal";
690694

0 commit comments

Comments
 (0)