Skip to content

Commit a957d70

Browse files
thomas-zengEvergreen
authored andcommitted
Fixed XR shader stripping for non-XR project
Jira: https://jira.unity3d.com/browse/UUM-57644 Fixed XROcclusionMesh.shader and XRMirrorView.shader are not stripped down when XR Plugin is not installed
1 parent e9bf069 commit a957d70

File tree

4 files changed

+51
-2
lines changed

4 files changed

+51
-2
lines changed

Packages/com.unity.render-pipelines.universal/Editor/ShaderBuildPreprocessor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ class ShaderBuildPreprocessor : IPreprocessBuildWithReport, IPostprocessBuildWit
106106
public static bool s_StripScreenCoordOverrideVariants;
107107
public static bool s_Strip2DPasses;
108108
public static bool s_UseSoftShadowQualityLevelKeywords;
109+
public static bool s_StripXRVariants;
109110

110111
public static List<ShaderFeatures> supportedFeaturesList
111112
{
@@ -132,7 +133,6 @@ public static VolumeFeatures volumeFeatures
132133
}
133134

134135
// Private
135-
private static bool s_StripXRVariants;
136136
private static bool s_KeepOffVariantForAdditionalLights;
137137
private static bool s_UseSHPerVertexForSHAuto;
138138
private static VolumeFeatures s_VolumeFeatures;

Packages/com.unity.render-pipelines.universal/Editor/ShaderScriptableStripper.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ internal interface IShaderScriptableStrippingData
2828
public bool stripScreenCoordOverrideVariants { get; set; }
2929
public bool stripUnusedVariants { get; set; }
3030
public bool stripUnusedPostProcessingVariants { get; set; }
31+
public bool stripUnusedXRVariants { get; set; }
3132

3233
public Shader shader { get; set; }
3334
public ShaderType shaderType { get; set; }
@@ -63,6 +64,7 @@ internal struct StrippingData : IShaderScriptableStrippingData
6364
public bool stripScreenCoordOverrideVariants { get; set; }
6465
public bool stripUnusedVariants { get; set; }
6566
public bool stripUnusedPostProcessingVariants { get; set; }
67+
public bool stripUnusedXRVariants { get; set; }
6668

6769
public Shader shader { get; set; }
6870
public ShaderType shaderType { get => passData.shaderType; set{} }
@@ -110,6 +112,8 @@ public bool PassHasKeyword(LocalKeyword keyword)
110112
Shader m_HDROutputBlitShader = Shader.Find("Hidden/Universal/BlitHDROverlay");
111113
Shader m_DataDrivenLensFlareShader = Shader.Find("Hidden/Universal Render Pipeline/LensFlareDataDriven");
112114
Shader m_ScreenSpaceLensFlareShader = Shader.Find("Hidden/Universal Render Pipeline/LensFlareScreenSpace");
115+
Shader m_XROcclusionMeshShader = Shader.Find("Hidden/Universal Render Pipeline/XR/XROcclusionMesh");
116+
Shader m_XRMirrorViewShader = Shader.Find("Hidden/Universal Render Pipeline/XR/XRMirrorView");
113117

114118
// Pass names
115119
public static readonly string kPassNameUniversal2D = "Universal2D";
@@ -699,6 +703,22 @@ internal bool StripUnusedFeatures_ScreenSpaceLensFlare(ref IShaderScriptableStri
699703
return !strippingData.IsShaderFeatureEnabled(ShaderFeatures.ScreenSpaceLensFlare);
700704
}
701705

706+
internal bool StripUnusedFeatures_XRMirrorView(ref IShaderScriptableStrippingData strippingData)
707+
{
708+
if (strippingData.shader != m_XRMirrorViewShader)
709+
return false;
710+
711+
return strippingData.stripUnusedXRVariants;
712+
}
713+
714+
internal bool StripUnusedFeatures_XROcclusionMesh(ref IShaderScriptableStrippingData strippingData)
715+
{
716+
if (strippingData.shader != m_XROcclusionMeshShader)
717+
return false;
718+
719+
return strippingData.stripUnusedXRVariants;
720+
}
721+
702722
internal bool StripUnusedFeatures(ref IShaderScriptableStrippingData strippingData)
703723
{
704724
if (StripUnusedFeatures_DebugDisplay(ref strippingData))
@@ -791,6 +811,12 @@ internal bool StripUnusedFeatures(ref IShaderScriptableStrippingData strippingDa
791811
if (StripUnusedFeatures_ProbesVolumes(ref stripTool))
792812
return true;
793813

814+
if (StripUnusedFeatures_XRMirrorView(ref strippingData))
815+
return true;
816+
817+
if (StripUnusedFeatures_XROcclusionMesh(ref strippingData))
818+
return true;
819+
794820
return false;
795821
}
796822

@@ -1044,6 +1070,7 @@ public bool CanRemoveVariant([DisallowNull] Shader shader, ShaderSnippetData pas
10441070
stripScreenCoordOverrideVariants = ShaderBuildPreprocessor.s_StripScreenCoordOverrideVariants,
10451071
stripUnusedVariants = ShaderBuildPreprocessor.s_StripUnusedVariants,
10461072
stripUnusedPostProcessingVariants = ShaderBuildPreprocessor.s_StripUnusedPostProcessingVariants,
1073+
stripUnusedXRVariants = ShaderBuildPreprocessor.s_StripXRVariants,
10471074
IsHDRDisplaySupportEnabled = PlayerSettings.allowHDRDisplaySupport,
10481075
shader = shader,
10491076
passData = passData,

Packages/com.unity.render-pipelines.universal/Tests/Editor/ShaderScriptableStripperTests.cs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ internal struct TestStrippingData : IShaderScriptableStrippingData
2828
public bool stripScreenCoordOverrideVariants { get; set; }
2929
public bool stripUnusedVariants { get; set; }
3030
public bool stripUnusedPostProcessingVariants { get; set; }
31+
public bool stripUnusedXRVariants { get; set; }
3132
public bool IsHDRDisplaySupportEnabled { get; set; }
3233

3334
public Shader shader { get; set; }
@@ -78,7 +79,7 @@ class TestHelper
7879
| VolumeFeatures.BloomHQ | VolumeFeatures.BloomHQDirt;
7980

8081

81-
public TestHelper(Shader shader, ShaderFeatures shaderFeatures, VolumeFeatures volumeFeatures = VolumeFeatures.None, bool stripUnusedVariants = true)
82+
public TestHelper(Shader shader, ShaderFeatures shaderFeatures, VolumeFeatures volumeFeatures = VolumeFeatures.None, bool stripUnusedVariants = true, bool stripUnusedXRVariants = true)
8283
{
8384
s_PassKeywords = new List<string>() { };
8485
s_EnabledKeywords = new List<string>() { };
@@ -92,6 +93,7 @@ public TestHelper(Shader shader, ShaderFeatures shaderFeatures, VolumeFeatures v
9293
data.volumeFeatures = volumeFeatures;
9394
data.stripUnusedVariants = stripUnusedVariants;
9495
data.strip2DPasses = false;
96+
data.stripUnusedXRVariants = stripUnusedXRVariants;
9597

9698
featureStripTool = new ShaderStripTool<ShaderFeatures>(data.shaderFeatures, ref data);
9799
}
@@ -705,6 +707,8 @@ public void StripUnsupportedVariants_EditorVisualization(Shader shader, bool exp
705707
[TestCase("Hidden/Universal Render Pipeline/SubpixelMorphologicalAntialiasing")]
706708
[TestCase("Hidden/Universal Render Pipeline/LensFlareDataDriven")]
707709
[TestCase("Hidden/Universal Render Pipeline/LensFlareScreenSpace")]
710+
[TestCase("Hidden/Universal Render Pipeline/XR/XROcclusionMesh")]
711+
[TestCase("Hidden/Universal Render Pipeline/XR/XRMirrorView")]
708712
public void TestStripUnusedFeatures(string shaderName)
709713
{
710714
Shader shader = Shader.Find(shaderName);
@@ -736,6 +740,7 @@ public void TestStripUnusedFeatures(string shaderName)
736740
TestStripUnusedFeatures_SHAuto(shader);
737741
TestStripUnusedFeatures_DataDrivenLensFlare(shader);
738742
TestStripUnusedFeatures_ScreenSpaceLensFlare(shader);
743+
TestStripUnusedFeatures_XR(shader);
739744
}
740745

741746
public void TestStripUnusedFeatures_DebugDisplay(Shader shader)
@@ -933,6 +938,22 @@ public void TestStripUnusedFeatures_DataDrivenLensFlare(Shader shader)
933938
helper.IsTrue(isLensFlareDataDriven ? helper.stripper.StripUnusedFeatures_DataDrivenLensFlare(ref helper.data) : !helper.stripper.StripUnusedFeatures_DataDrivenLensFlare(ref helper.data));
934939
}
935940

941+
public void TestStripUnusedFeatures_XR(Shader shader)
942+
{
943+
TestHelper helper;
944+
945+
helper = new TestHelper(shader, ShaderFeatures.None, stripUnusedXRVariants: false);
946+
helper.IsFalse(helper.stripper.StripUnusedFeatures_XROcclusionMesh(ref helper.data));
947+
helper.IsFalse(helper.stripper.StripUnusedFeatures_XRMirrorView(ref helper.data));
948+
949+
helper = new TestHelper(shader, ShaderFeatures.None, stripUnusedXRVariants: true);
950+
bool isXROcclusion = shader != null && shader.name == "Hidden/Universal Render Pipeline/XR/XROcclusionMesh";
951+
bool isXRMirror = shader != null && shader.name == "Hidden/Universal Render Pipeline/XR/XRMirrorView";
952+
//We should strip the shader only if it's the XR shader.
953+
helper.IsTrue(isXROcclusion ? helper.stripper.StripUnusedFeatures_XROcclusionMesh(ref helper.data) : !helper.stripper.StripUnusedFeatures_XROcclusionMesh(ref helper.data));
954+
helper.IsTrue(isXRMirror ? helper.stripper.StripUnusedFeatures_XRMirrorView(ref helper.data) : !helper.stripper.StripUnusedFeatures_XRMirrorView(ref helper.data));
955+
}
956+
936957
public void TestStripUnusedFeatures_DeferredRendering(Shader shader)
937958
{
938959
TestHelper helper;

Packages/com.unity.render-pipelines.universal/Tests/Editor/ShaderStripToolTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ internal struct TestStrippingData : IShaderScriptableStrippingData
2727
public bool stripScreenCoordOverrideVariants { get; set; }
2828
public bool stripUnusedVariants { get; set; }
2929
public bool stripUnusedPostProcessingVariants { get; set; }
30+
public bool stripUnusedXRVariants { get; set; }
3031

3132
public Shader shader { get; set; }
3233
public ShaderType shaderType { get; set; }

0 commit comments

Comments
 (0)