Skip to content

Commit 749774a

Browse files
Esmeralda SalamoneEvergreen
authored andcommitted
[ShaderGraph] Add toggle to override the shader variant limit.
1 parent 2543791 commit 749774a

3 files changed

Lines changed: 31 additions & 7 deletions

File tree

Packages/com.unity.shadergraph/Editor/Generation/Processors/Generator.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,9 @@ GeneratedShader BuildShader(string additionalShaderID, List<BlockNode> outTempor
258258
var variantLimit = this.m_Mode == GenerationMode.Preview
259259
? Mathf.Min(ShaderGraphPreferences.previewVariantLimit, ShaderGraphProjectSettings.instance.shaderVariantLimit)
260260
: ShaderGraphProjectSettings.instance.shaderVariantLimit;
261+
if (!ShaderGraphProjectSettings.instance.overrideShaderVariantLimit)
262+
variantLimit = ShaderGraphProjectSettings.defaultVariantLimit;
263+
261264
// Send an action about our current variant usage. This will either add or clear a warning if it exists
262265
var action = new ShaderVariantLimitAction(shaderKeywords.permutations.Count, variantLimit);
263266
m_GraphData.owner?.graphDataStore?.Dispatch(action);

Packages/com.unity.shadergraph/Editor/ShaderGraphPreferences.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,10 @@ static void OpenGUI()
109109

110110
using (var scope = new LabelWidthScope(10, 300))
111111
{
112-
var actualLimit = ShaderGraphProjectSettings.instance.shaderVariantLimit;
113-
var willPreviewVariantBeIgnored = ShaderGraphPreferences.previewVariantLimit > actualLimit;
112+
var actualLimit = ShaderGraphProjectSettings.instance.overrideShaderVariantLimit
113+
? ShaderGraphProjectSettings.instance.shaderVariantLimit
114+
: ShaderGraphProjectSettings.defaultVariantLimit;
115+
var willPreviewVariantBeIgnored = ShaderGraphPreferences.previewVariantLimit > actualLimit || ShaderGraphProjectSettings.instance.overrideShaderVariantLimit;
114116

115117
var variantLimitLabel = willPreviewVariantBeIgnored
116118
? new GUIContent("Preview Variant Limit", EditorGUIUtility.IconContent("console.infoicon").image, $"The Preview Variant Limit is higher than the Shader Variant Limit in Project Settings: {actualLimit}. The Preview Variant Limit will be ignored.")

Packages/com.unity.shadergraph/Editor/ShaderGraphProjectSettings.cs

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,19 @@
22
using System.Collections.Generic;
33
using UnityEngine.Serialization;
44
using UnityEngine.UIElements;
5+
using static UnityEngine.GraphicsBuffer;
56

67
namespace UnityEditor.ShaderGraph
78
{
89
[FilePath("ProjectSettings/ShaderGraphSettings.asset", FilePathAttribute.Location.ProjectFolder)]
910
internal class ShaderGraphProjectSettings : ScriptableSingleton<ShaderGraphProjectSettings>
1011
{
12+
static internal readonly int defaultVariantLimit = 2048;
13+
14+
[SerializeField]
15+
internal int shaderVariantLimit = defaultVariantLimit;
1116
[SerializeField]
12-
internal int shaderVariantLimit = 2048;
17+
internal bool overrideShaderVariantLimit = false;
1318
[SerializeField]
1419
internal int customInterpolatorErrorThreshold = 32;
1520
[SerializeField]
@@ -37,6 +42,7 @@ class ShaderGraphProjectSettingsProvider : SettingsProvider
3742
private class Styles
3843
{
3944
public static readonly GUIContent shaderVariantLimitLabel = L10n.TextContent("Shader Variant Limit", "");
45+
public static readonly GUIContent overrideShaderVariantLimitLabel = L10n.TextContent("Override Variant Limit", $"The Shader Graph internal default limit Shader Variant Limit is {ShaderGraphProjectSettings.defaultVariantLimit}.");
4046
public static readonly GUIContent CustomInterpLabel = L10n.TextContent("Custom Interpolator Channel Settings", "");
4147
public static readonly GUIContent CustomInterpWarnThresholdLabel = L10n.TextContent("Warning Threshold", $"Shader Graph displays a warning when the user creates more custom interpolators than permitted by this setting. The number of interpolators that trigger this warning must be between {kMinChannelThreshold} and the Error Threshold.");
4248
public static readonly GUIContent CustomInterpErrorThresholdLabel = L10n.TextContent("Error Threshold", $"Shader Graph displays an error message when the user tries to create more custom interpolators than permitted by this setting. The number of interpolators that trigger this error must be between {kMinChannelThreshold} and {kMaxChannelThreshold}.");
@@ -48,6 +54,7 @@ private class Styles
4854

4955
SerializedObject m_SerializedObject;
5056
SerializedProperty m_shaderVariantLimit;
57+
SerializedProperty m_overrideShaderVariantLimit;
5158
SerializedProperty m_customInterpWarn;
5259
SerializedProperty m_customInterpError;
5360
SerializedProperty m_HeatValues;
@@ -62,6 +69,7 @@ public override void OnActivate(string searchContext, VisualElement rootElement)
6269
ShaderGraphProjectSettings.instance.Save();
6370
m_SerializedObject = ShaderGraphProjectSettings.instance.GetSerializedObject();
6471
m_shaderVariantLimit = m_SerializedObject.FindProperty("shaderVariantLimit");
72+
m_overrideShaderVariantLimit = m_SerializedObject.FindProperty("overrideShaderVariantLimit");
6573
m_customInterpWarn = m_SerializedObject.FindProperty("customInterpolatorWarningThreshold");
6674
m_customInterpError = m_SerializedObject.FindProperty("customInterpolatorErrorThreshold");
6775
m_HeatValues = m_SerializedObject.FindProperty(nameof(ShaderGraphProjectSettings.customHeatmapValues));
@@ -74,15 +82,26 @@ void OnGUIHandler(string searchContext)
7482

7583
EditorGUI.BeginChangeCheck();
7684

77-
var newVariantLimitValue = EditorGUILayout.DelayedIntField(Styles.shaderVariantLimitLabel, m_shaderVariantLimit.intValue);
78-
newVariantLimitValue = Mathf.Max(0, newVariantLimitValue);
79-
if (newVariantLimitValue != m_shaderVariantLimit.intValue)
85+
var doOverride = EditorGUILayout.Toggle(Styles.overrideShaderVariantLimitLabel, m_overrideShaderVariantLimit.boolValue);
86+
if (doOverride != m_overrideShaderVariantLimit.boolValue)
8087
{
81-
m_shaderVariantLimit.intValue = newVariantLimitValue;
88+
m_overrideShaderVariantLimit.boolValue = doOverride;
8289
if (ShaderGraphPreferences.onVariantLimitChanged != null)
8390
ShaderGraphPreferences.onVariantLimitChanged();
8491
}
8592

93+
using (new EditorGUI.DisabledScope(!doOverride))
94+
{
95+
var newVariantLimitValue = EditorGUILayout.DelayedIntField(Styles.shaderVariantLimitLabel, m_shaderVariantLimit.intValue);
96+
newVariantLimitValue = Mathf.Max(0, newVariantLimitValue);
97+
if (newVariantLimitValue != m_shaderVariantLimit.intValue)
98+
{
99+
m_shaderVariantLimit.intValue = newVariantLimitValue;
100+
if (ShaderGraphPreferences.onVariantLimitChanged != null)
101+
ShaderGraphPreferences.onVariantLimitChanged();
102+
}
103+
}
104+
86105
EditorGUILayout.LabelField(Styles.CustomInterpLabel, EditorStyles.boldLabel);
87106
EditorGUI.indentLevel++;
88107

0 commit comments

Comments
 (0)