Skip to content

Commit 959e914

Browse files
EmreDoganUnityEvergreen
authored andcommitted
[HDRP] Migrated performance warning platform check from HDRP package code to engine-side.
1 parent b0d24fe commit 959e914

15 files changed

Lines changed: 499 additions & 206 deletions

File tree

Packages/com.unity.render-pipelines.high-definition/Editor/BuildProcessors/HDRPPreprocessBuild.cs

Lines changed: 224 additions & 68 deletions
Large diffs are not rendered by default.

Packages/com.unity.render-pipelines.high-definition/Editor/Compositor/CompositionManagerEditor.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,13 @@ public override void OnInspectorGUI()
146146
}
147147
m_SerializedProperties.Update();
148148

149+
if (EditorGraphicsSettings.ShouldValidateGraphicsForActiveBuildTarget())
150+
{
151+
var validationSettings = HDProjectSettings.validationSettings;
152+
if (!validationSettings.k_GraphicsCompositor_Recommended && m_compositionManager.enableInternal)
153+
HDEditorUtils.ShowFeatureOptimisationWarning("Graphics Compositor");
154+
}
155+
149156
m_EnablePreview = EditorGUILayout.Toggle(Styles.k_EnablePreview, m_compositionManager.enableOutput);
150157
{
151158
m_compositionManager.enableOutput = m_EnablePreview;

Packages/com.unity.render-pipelines.high-definition/Editor/Lighting/VolumetricClouds/VolumetricCloudsEditor.cs

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -519,9 +519,35 @@ public override void OnInspectorGUI()
519519
}
520520
using var disableScope = new EditorGUI.DisabledScope(notSupported);
521521

522+
if (EditorGraphicsSettings.ShouldValidateGraphicsForActiveBuildTarget())
523+
{
524+
var validationSettings = HDProjectSettings.validationSettings;
525+
VolumetricClouds defaultClouds = HDEditorUtils.GetVolumeComponentDefaultState<VolumetricClouds>();
526+
527+
// Get effective quality value (use local if overridden, otherwise use default)
528+
bool useDefaultEnabled = !m_Enable.overrideState.boolValue;
529+
bool effectiveEnabled = useDefaultEnabled
530+
? (defaultClouds?.enable.value ?? false)
531+
: m_Enable.value.boolValue;
532+
533+
if (effectiveEnabled && !validationSettings.k_VolumetricClouds_Recommended)
534+
{
535+
if (useDefaultEnabled && HDEditorUtils.TryGetVolumeParameterSource<VolumetricClouds>(
536+
clouds => clouds.enable.overrideState && clouds.enable.value == effectiveEnabled,
537+
out var sourceProfile,
538+
out var sourceName))
539+
{
540+
HDEditorUtils.ShowFeatureOptimisationWarning(HDRenderPipelineUI.Styles.volumetricCloudsSubTitle.text, sourceName, () => Selection.activeObject = sourceProfile);
541+
}
542+
else
543+
{
544+
HDEditorUtils.ShowFeatureOptimisationWarning(HDRenderPipelineUI.Styles.volumetricCloudsSubTitle.text);
545+
}
546+
}
547+
}
548+
522549
EditorGUILayout.LabelField("General", EditorStyles.miniLabel);
523550
PropertyField(m_Enable, EditorGUIUtility.TrTextContent("State"));
524-
525551
if (m_Enable.value.boolValue && !notSupported)
526552
HDEditorUtils.EnsureFrameSetting(FrameSettingsField.VolumetricClouds);
527553

Packages/com.unity.render-pipelines.high-definition/Editor/PostProcessing/FilmGrainEditor.cs

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,31 +25,35 @@ public override void OnInspectorGUI()
2525
{
2626
HDEditorUtils.EnsureFrameSetting(FrameSettingsField.FilmGrain);
2727

28-
var defaultFilmGrain = HDEditorUtils.GetVolumeComponentDefaultState<FilmGrain>();
28+
if (EditorGraphicsSettings.ShouldValidateGraphicsForActiveBuildTarget())
29+
{
30+
var defaultFilmGrain = HDEditorUtils.GetVolumeComponentDefaultState<FilmGrain>();
2931

30-
// Get effective intensity value (use local if overridden, otherwise use default)
31-
bool useDefaultIntensity = !m_Intensity.overrideState.boolValue;
32-
float effectiveIntensity = useDefaultIntensity
33-
? (defaultFilmGrain?.intensity.value ?? -1.0f)
34-
: m_Intensity.value.floatValue;
32+
// Get effective intensity value (use local if overridden, otherwise use default)
33+
bool useDefaultIntensity = !m_Intensity.overrideState.boolValue;
34+
float effectiveIntensity = useDefaultIntensity
35+
? (defaultFilmGrain?.intensity.value ?? 0.0f)
36+
: m_Intensity.value.floatValue;
3537

36-
if (effectiveIntensity > 0.0f)
37-
{
38-
using (new IndentLevelScope())
38+
var validationSettings = HDProjectSettings.validationSettings;
39+
if (effectiveIntensity > 0.0f && !validationSettings.k_FilmGrain_Recommended)
3940
{
40-
if (useDefaultIntensity && HDEditorUtils.TryGetVolumeParameterSource<FilmGrain>(
41-
filmGrain => filmGrain.intensity.overrideState && filmGrain.intensity.value > 0.0f,
42-
out var sourceProfile,
43-
out var sourceName))
44-
{
45-
HDEditorUtils.ShowPlatformPerformanceWarning(BuildTarget.Switch2, "Film Grain", sourceName, () => Selection.activeObject = sourceProfile);
46-
}
47-
else
41+
using (new IndentLevelScope())
4842
{
49-
HDEditorUtils.ShowPlatformPerformanceWarning(BuildTarget.Switch2, "Film Grain");
43+
if (useDefaultIntensity && HDEditorUtils.TryGetVolumeParameterSource<FilmGrain>(
44+
filmGrain => filmGrain.intensity.overrideState && filmGrain.intensity.value > 0.0f,
45+
out var sourceProfile,
46+
out var sourceName))
47+
{
48+
HDEditorUtils.ShowFeatureOptimisationWarning("Film Grain", sourceName, () => Selection.activeObject = sourceProfile);
49+
}
50+
else
51+
{
52+
HDEditorUtils.ShowFeatureOptimisationWarning("Film Grain");
53+
}
5054
}
51-
}
52-
}
55+
56+
} }
5357

5458
PropertyField(m_Type);
5559

Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDEditorUtils.cs

Lines changed: 24 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -498,26 +498,19 @@ internal static bool TryGetVolumeParameterSource<T>(
498498
/// <summary>
499499
/// Shows a platform-specific performance warning help box for a given feature.
500500
/// </summary>
501-
/// <param name="targetPlatform">The build target platform to check and display</param>
502501
/// <param name="featureName">The name of the feature (e.g., "Ray Tracing", "Film Grain")</param>
503502
/// <param name="recommendation">Optional recommendation text. If null, uses default "is not recommended for this platform"</param>
504-
internal static void ShowPlatformPerformanceWarning(BuildTarget targetPlatform, string featureName, string recommendation = null)
503+
internal static void ShowFeatureOptimisationWarning(string featureName, string recommendation = null)
505504
{
506-
if (EditorUserBuildSettings.activeBuildTarget != targetPlatform)
507-
return;
508-
509-
var activeBuildTargetGroup = BuildPipeline.GetBuildTargetGroup(targetPlatform);
510-
var namedBuildTarget = NamedBuildTarget.FromBuildTargetGroup(activeBuildTargetGroup);
511-
512-
string message = $"{featureName} is enabled for {namedBuildTarget.TargetName}. ";
505+
string message = $"{featureName} is enabled for the active platform.\n";
513506

514507
if (!string.IsNullOrEmpty(recommendation))
515508
{
516509
message += recommendation;
517510
}
518511
else
519512
{
520-
message += "\nThis may significantly impact performance and is not recommended for this platform.";
513+
message += HDRenderPipelineUI.Styles.featureNotRecommendedWarning;
521514
}
522515

523516
EditorGUILayout.HelpBox(message, MessageType.Warning, wide: true);
@@ -526,26 +519,19 @@ internal static void ShowPlatformPerformanceWarning(BuildTarget targetPlatform,
526519
/// <summary>
527520
/// Shows a platform-specific performance warning help box for a given feature.
528521
/// </summary>
529-
/// <param name="targetPlatform">The build target platform to check and display</param>
530522
/// <param name="featureName">The name of the feature (e.g., "Ray Tracing", "Film Grain")</param>
531523
/// <param name="recommendation">Optional recommendation text. If null, uses default "is not recommended for this platform"</param>
532-
internal static void ShowPlatformPerformanceWarning(BuildTarget targetPlatform, string featureName, string sourceAssetName, Action onButtonClicked, string recommendation = null)
524+
internal static void ShowFeatureOptimisationWarning(string featureName, string sourceAssetName, Action onButtonClicked, string recommendation = null)
533525
{
534-
if (EditorUserBuildSettings.activeBuildTarget != targetPlatform)
535-
return;
536-
537-
var activeBuildTargetGroup = BuildPipeline.GetBuildTargetGroup(targetPlatform);
538-
var namedBuildTarget = NamedBuildTarget.FromBuildTargetGroup(activeBuildTargetGroup);
539-
540-
string message = $"{featureName} is enabled in {sourceAssetName} for {namedBuildTarget.TargetName}. ";
526+
string message = $"{featureName} is enabled in {sourceAssetName} for the active platform.\n";
541527

542528
if (!string.IsNullOrEmpty(recommendation))
543529
{
544530
message += recommendation;
545531
}
546532
else
547533
{
548-
message += "\nThis may significantly impact performance and is not recommended for this platform.";
534+
message += HDRenderPipelineUI.Styles.featureNotRecommendedWarning;
549535
}
550536

551537
CoreEditorUtils.DrawFixMeBox(
@@ -555,54 +541,32 @@ internal static void ShowPlatformPerformanceWarning(BuildTarget targetPlatform,
555541
onButtonClicked);
556542
}
557543

558-
/// <summary>
559-
/// Shows a platform-specific performance warning help box for a given setting within a feature.
560-
/// </summary>
561-
/// <param name="targetPlatform">The build target platform to check and display</param>
562-
/// <param name="settingName">The name of the setting responsible for the performance warning in the feature.</param>
563-
/// <param name="settingValue">The current value of the setting.</param>
564-
/// <param name="recommendation">Optional recommendation text. If null, uses default "is not recommended for this platform"</param>
565-
internal static void ShowPlatformParameterPerformanceWarning(BuildTarget targetPlatform, string settingName, string settingValue, string recommendation = null)
544+
internal static void ShowFeatureParameterOptimisationWarning(string settingName, string settingValue, string recommendation = null)
566545
{
567-
if (EditorUserBuildSettings.activeBuildTarget != targetPlatform)
568-
return;
569-
570-
var activeBuildTargetGroup = BuildPipeline.GetBuildTargetGroup(targetPlatform);
571-
var namedBuildTarget = NamedBuildTarget.FromBuildTargetGroup(activeBuildTargetGroup).TargetName;
546+
EditorGUILayout.HelpBox(CreateParameterWarningMessage(settingName, settingValue, null, recommendation), MessageType.Warning, wide: true);
547+
}
572548

573-
string message = $"{settingName}: {settingValue} is used for {namedBuildTarget}.";
549+
internal static void ShowFeatureParameterOptimisationWarning(string settingName, string settingValue, string sourceAssetName, Action onButtonClicked, string recommendation = null)
550+
{
551+
CoreEditorUtils.DrawFixMeBox(
552+
CreateParameterWarningMessage(settingName, settingValue, sourceAssetName, recommendation),
553+
MessageType.Warning,
554+
"Open",
555+
onButtonClicked);
556+
}
574557

575-
if (!string.IsNullOrEmpty(recommendation))
558+
internal static string CreateParameterWarningMessage(string settingName, string settingValue, string sourceAssetName = null, string recommendation = null)
559+
{
560+
string message = $"{settingName}: {settingValue} ";
561+
if (sourceAssetName != null)
576562
{
577-
message += '\n' + recommendation;
563+
message += $"is set in {sourceAssetName}.";
578564
}
579565
else
580566
{
581-
message += "\nThis may significantly impact performance and is not recommended for this platform.";
567+
message += $"is used for the active platform.";
582568
}
583569

584-
EditorGUILayout.HelpBox(message, MessageType.Warning, wide: true);
585-
}
586-
587-
/// <summary>
588-
/// Shows a platform-specific performance warning help box for a given setting within a feature.
589-
/// </summary>
590-
/// <param name="targetPlatform">The build target platform to check and display</param>
591-
/// <param name="settingName">The name of the setting responsible for the performance warning in the feature.</param>
592-
/// <param name="settingValue">The current value of the setting.</param>
593-
/// <param name="sourceAssetName">The name of the asset responsible for producing this warning.</param>
594-
/// <param name="onButtonClicked">Action to perform when the helpbox button is clicked.</param>
595-
/// <param name="recommendation">Optional recommendation text. If null, uses default "is not recommended for this platform"</param>
596-
internal static void ShowPlatformParameterPerformanceWarning(BuildTarget targetPlatform, string settingName, string settingValue, string sourceAssetName, Action onButtonClicked, string recommendation = null)
597-
{
598-
if (EditorUserBuildSettings.activeBuildTarget != targetPlatform)
599-
return;
600-
601-
var activeBuildTargetGroup = BuildPipeline.GetBuildTargetGroup(targetPlatform);
602-
var namedBuildTarget = NamedBuildTarget.FromBuildTargetGroup(activeBuildTargetGroup).TargetName;
603-
604-
string message = $"{settingName}: {settingValue} is set in {sourceAssetName} for {namedBuildTarget}. ";
605-
606570
if (!string.IsNullOrEmpty(recommendation))
607571
{
608572
message += '\n' + recommendation;
@@ -612,11 +576,7 @@ internal static void ShowPlatformParameterPerformanceWarning(BuildTarget targetP
612576
message += $"\nThis may impact performance and is not recommended for this platform.";
613577
}
614578

615-
CoreEditorUtils.DrawFixMeBox(
616-
message,
617-
MessageType.Warning,
618-
"Open",
619-
onButtonClicked);
579+
return message;
620580
}
621581

622582
internal static bool IsInTestSuiteOrBatchMode()

Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDRenderPipelineUI.Skin.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,10 @@ int CountBits(uint bitMask) // System.Numerics.BitOperations not available
422422
public static GUIContent staticBatchingInfoMessage =
423423
EditorGUIUtility.TrTextContent("Static Batching is not recommended when using GPU draw submission modes, performance may improve if Static Batching is disabled in Player Settings.");
424424

425+
public static readonly string featureNotRecommendedWarning = L10n.Tr("This feature is not optimized for this platform, enabling it may affect performance.");
426+
public static readonly string maxFogBudgetWarning = L10n.Tr("The maximum recommended fog budget for this platform is {0}. Lower the tier to stay under this for optimal performance.");
427+
public static readonly string minFogBudgetForDensityCutoffWarning = L10n.Tr("It is recommended to use Density cutoff when the fog budget is > {0} for this platform.");
428+
425429
public const string memoryDrawback = "Adds GPU memory";
426430
public const string shaderVariantDrawback = "Adds Shader Variants";
427431
public const string lotShaderVariantDrawback = "Adds multiple Shader Variants";

Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDRenderPipelineUI.cs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,13 @@ static void Drawer_Volumetric(SerializedHDRenderPipelineAsset serialized, Editor
230230
}
231231

232232
EditorGUILayout.PropertyField(serialized.renderPipelineSettings.supportVolumetricClouds, Styles.supportVolumetricCloudsContent);
233+
234+
if (EditorGraphicsSettings.ShouldValidateGraphicsForActiveBuildTarget())
235+
{
236+
var validationSettings = HDProjectSettings.validationSettings;
237+
if (serialized.renderPipelineSettings.supportVolumetricClouds.boolValue && !validationSettings.k_VolumetricClouds_Recommended)
238+
HDEditorUtils.ShowFeatureOptimisationWarning(Styles.volumetricCloudsSubTitle.text);
239+
}
233240
}
234241

235242
static void Drawer_SectionProbeVolume(SerializedHDRenderPipelineAsset serialized, Editor owner)
@@ -1231,6 +1238,13 @@ static void Drawer_SectionHighQualityLineRenderingSettings(SerializedHDRenderPip
12311238
{
12321239
EditorGUILayout.PropertyField(serialized.renderPipelineSettings.supportHighQualityLineRendering, Styles.supportHighQualityLineRenderingContent);
12331240

1241+
if (EditorGraphicsSettings.ShouldValidateGraphicsForActiveBuildTarget())
1242+
{
1243+
var validationSettings = HDProjectSettings.validationSettings;
1244+
if (serialized.renderPipelineSettings.supportHighQualityLineRendering.boolValue && !validationSettings.k_HighQualityLineRendering_Recommended)
1245+
HDEditorUtils.ShowFeatureOptimisationWarning(Styles.highQualityLineRenderingSubTitle.text);
1246+
}
1247+
12341248
++EditorGUI.indentLevel;
12351249
using (new EditorGUI.DisabledScope(!serialized.renderPipelineSettings.supportHighQualityLineRendering.boolValue))
12361250
{
@@ -1448,7 +1462,7 @@ static void DrawSSGIQualitySetting(SerializedHDRenderPipelineAsset serialized, i
14481462
internal static void DisplayRayTracingSupportBox()
14491463
{
14501464
var currentBuildTarget = EditorUserBuildSettings.activeBuildTarget;
1451-
if (HDRenderPipeline.PlatformHasRaytracingIssues(currentBuildTarget, out var warning))
1465+
if (HDRenderPipeline.CheckPlatformRaytracingCompatability(currentBuildTarget, out var warning))
14521466
{
14531467
EditorGUILayout.HelpBox(warning, MessageType.Warning);
14541468
}
@@ -1604,8 +1618,13 @@ static void Drawer_SectionMaterialUnsorted(SerializedHDRenderPipelineAsset seria
16041618
EditorGUILayout.PropertyField(serialized.renderPipelineSettings.supportDistortion, Styles.supportDistortion);
16051619

16061620
EditorGUILayout.PropertyField(serialized.renderPipelineSettings.supportSubsurfaceScattering, Styles.supportedSSSContent);
1607-
if (serialized.renderPipelineSettings.supportSubsurfaceScattering.boolValue)
1608-
HDEditorUtils.ShowPlatformPerformanceWarning(BuildTarget.Switch2, "Subsurface Scattering");
1621+
1622+
if (EditorGraphicsSettings.ShouldValidateGraphicsForActiveBuildTarget())
1623+
{
1624+
var validationSettings = HDProjectSettings.validationSettings;
1625+
if (serialized.renderPipelineSettings.supportSubsurfaceScattering.boolValue && !validationSettings.k_SubsurfaceScattering_Recommended)
1626+
HDEditorUtils.ShowFeatureOptimisationWarning(Styles.supportedSSSContent.text);
1627+
}
16091628

16101629
using (new EditorGUI.DisabledScope(serialized.renderPipelineSettings.supportSubsurfaceScattering.hasMultipleDifferentValues
16111630
|| !serialized.renderPipelineSettings.supportSubsurfaceScattering.boolValue))

0 commit comments

Comments
 (0)