using System; using System.Collections.Generic; using NUnit.Framework; using UnityEditor.Rendering; using UnityEditor.Rendering.Universal; using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; using UnityEngine.SocialPlatforms; using IShaderScriptableStrippingData = UnityEditor.Rendering.Universal.ShaderScriptableStripper.IShaderScriptableStrippingData; namespace ShaderStrippingAndPrefiltering { class ShaderStripToolTests { private static List s_EnabledKeywords; private static List s_PassKeywords; internal struct TestStrippingData : IShaderScriptableStrippingData { public ShaderFeatures shaderFeatures { get; set; } public VolumeFeatures volumeFeatures { get; set; } public bool isGLDevice { get; set; } public bool stripSoftShadowQualityLevels { get; set; } public bool strip2DPasses { get; set; } public bool stripDebugDisplayShaders { get; set; } public bool stripScreenCoordOverrideVariants { get; set; } public bool stripUnusedVariants { get; set; } public bool stripUnusedPostProcessingVariants { get; set; } public bool stripUnusedXRVariants { get; set; } public Shader shader { get; set; } public ShaderType shaderType { get; set; } public ShaderCompilerPlatform shaderCompilerPlatform { get; set; } public string passName { get; set; } public PassType passType { get; set; } public PassIdentifier passIdentifier { get; set; } public bool IsHDRDisplaySupportEnabled { get; set; } public bool IsHDRShaderVariantValid { get; set; } public bool IsKeywordEnabled(LocalKeyword keyword) { return s_EnabledKeywords != null && s_EnabledKeywords.Contains(keyword.name); } public bool IsShaderFeatureEnabled(ShaderFeatures feature) { return (shaderFeatures & feature) != 0; } public bool IsVolumeFeatureEnabled(VolumeFeatures feature) { return (volumeFeatures & feature) != 0; } public void ClearEnablePasses() { s_PassKeywords = null; } public bool PassHasKeyword(LocalKeyword keyword) { return s_PassKeywords != null && s_PassKeywords.Contains(keyword.name); } } [Test] public void TestContainsKeyword() { s_PassKeywords = new List(); s_EnabledKeywords = new List(); ShaderStripTool stripTool; IShaderScriptableStrippingData strippingData; LocalKeyword kw = new (Shader.Find("Universal Render Pipeline/Lit"), ShaderKeywordStrings.ScreenSpaceOcclusion); bool actual; strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.None; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.ContainsKeyword(kw); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.None; s_PassKeywords = new List() { ShaderKeywordStrings.ScreenSpaceOcclusion }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.ContainsKeyword(kw); Assert.IsTrue(actual); } [Test] public void TestStripMultiCompileKeepOffVariant1() { s_PassKeywords = new List(); s_EnabledKeywords = new List(); ShaderStripTool stripTool; IShaderScriptableStrippingData strippingData; LocalKeyword kw = new (Shader.Find("Universal Render Pipeline/Lit"), ShaderKeywordStrings.ScreenSpaceOcclusion); bool actual; strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw, ShaderFeatures.ScreenSpaceOcclusion); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceOcclusion; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw, ShaderFeatures.ScreenSpaceOcclusion); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.ScreenSpaceOcclusion }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw, ShaderFeatures.ScreenSpaceOcclusion); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceOcclusion; s_EnabledKeywords = new List() { ShaderKeywordStrings.ScreenSpaceOcclusion }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw, ShaderFeatures.ScreenSpaceOcclusion); Assert.IsFalse(actual); } [Test] public void TestStripMultiCompile1() { s_PassKeywords = new List(); s_EnabledKeywords = new List(); ShaderStripTool stripTool; IShaderScriptableStrippingData strippingData; LocalKeyword kw = new (Shader.Find("Universal Render Pipeline/Lit"), ShaderKeywordStrings.ScreenSpaceOcclusion); bool actual; // stripUnusedVariants = false; => Same as Keep Off variant strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw, ShaderFeatures.ScreenSpaceOcclusion); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceOcclusion; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw, ShaderFeatures.ScreenSpaceOcclusion); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.ScreenSpaceOcclusion }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw, ShaderFeatures.ScreenSpaceOcclusion); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.ScreenSpaceOcclusion }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw, ShaderFeatures.ScreenSpaceOcclusion); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceOcclusion; s_EnabledKeywords = new List() { ShaderKeywordStrings.ScreenSpaceOcclusion }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw, ShaderFeatures.ScreenSpaceOcclusion); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceOcclusion; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.ScreenSpaceOcclusion }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw, ShaderFeatures.ScreenSpaceOcclusion); Assert.IsFalse(actual); // stripUnusedVariants = true => takes out the Off variant strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw, ShaderFeatures.ScreenSpaceOcclusion); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceOcclusion; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw, ShaderFeatures.ScreenSpaceOcclusion); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.ScreenSpaceOcclusion }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw, ShaderFeatures.ScreenSpaceOcclusion); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.ScreenSpaceOcclusion }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw, ShaderFeatures.ScreenSpaceOcclusion); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceOcclusion; s_EnabledKeywords = new List() { ShaderKeywordStrings.ScreenSpaceOcclusion }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw, ShaderFeatures.ScreenSpaceOcclusion); Assert.IsFalse(actual); // Here the OFF variant is stripped strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceOcclusion; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.ScreenSpaceOcclusion }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw, ShaderFeatures.ScreenSpaceOcclusion); Assert.IsTrue(actual); } [Test] public void TestStripMultiCompileKeepOffVariant2() { s_PassKeywords = new List(); s_EnabledKeywords = new List(); ShaderStripTool stripTool; IShaderScriptableStrippingData strippingData; LocalKeyword kw1 = new (Shader.Find("Universal Render Pipeline/Lit"), ShaderKeywordStrings.AdditionalLightsVertex); LocalKeyword kw2 = new (Shader.Find("Universal Render Pipeline/Lit"), ShaderKeywordStrings.AdditionalLightsPixel); bool actual; // All keywords disabled strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex | ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); // With enabled keywords strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsPixel }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex, ShaderKeywordStrings.AdditionalLightsPixel }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsPixel }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex, ShaderKeywordStrings.AdditionalLightsPixel }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsPixel }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex, ShaderKeywordStrings.AdditionalLightsPixel }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsTrue(actual); // Both features enabled strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex | ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex | ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex | ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsPixel }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex | ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex, ShaderKeywordStrings.AdditionalLightsPixel }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); } [Test] public void TestStripMultiCompile2() { s_PassKeywords = new List(); s_EnabledKeywords = new List(); ShaderStripTool stripTool; IShaderScriptableStrippingData strippingData; LocalKeyword kw1 = new (Shader.Find("Universal Render Pipeline/Lit"), ShaderKeywordStrings.AdditionalLightsVertex); LocalKeyword kw2 = new (Shader.Find("Universal Render Pipeline/Lit"), ShaderKeywordStrings.AdditionalLightsPixel); bool actual; ///////////////////////////////////// /// Strip Unused Variants Disabled ///////////////////////////////////// // All keywords disabled strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex | ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); // With enabled keywords strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsPixel }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex, ShaderKeywordStrings.AdditionalLightsPixel }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsPixel }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex, ShaderKeywordStrings.AdditionalLightsPixel }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsPixel }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex, ShaderKeywordStrings.AdditionalLightsPixel }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsTrue(actual); // Both features enabled strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex | ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex | ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex | ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsPixel }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex | ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex, ShaderKeywordStrings.AdditionalLightsPixel }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); ///////////////////////////////////// /// Strip Unused Variants Enabled ///////////////////////////////////// // All keywords disabled strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex | ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); // With enabled keywords strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsPixel }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.AdditionalLightsPixel }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex, ShaderKeywordStrings.AdditionalLightsPixel }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex, ShaderKeywordStrings.AdditionalLightsPixel }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsPixel }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.AdditionalLightsPixel }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex, ShaderKeywordStrings.AdditionalLightsPixel }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.AdditionalLightsPixel }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex, ShaderKeywordStrings.AdditionalLightsPixel }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsTrue(actual); // Both features enabled strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex | ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex | ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex | ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex | ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsPixel }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex | ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.AdditionalLightsPixel }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex | ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex, ShaderKeywordStrings.AdditionalLightsPixel }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.AdditionalLightsVertex | ShaderFeatures.AdditionalLightsPixel; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.AdditionalLightsVertex, ShaderKeywordStrings.AdditionalLightsPixel }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.AdditionalLightsVertex, kw2, ShaderFeatures.AdditionalLightsPixel); Assert.IsTrue(actual); } [Test] public void TestStripMultiCompileKeepOffVariant3() { s_PassKeywords = new List(); s_EnabledKeywords = new List(); ShaderStripTool stripTool; IShaderScriptableStrippingData strippingData; LocalKeyword kw1 = new (Shader.Find("Universal Render Pipeline/Lit"), ShaderKeywordStrings.MainLightShadows); LocalKeyword kw2 = new (Shader.Find("Universal Render Pipeline/Lit"), ShaderKeywordStrings.MainLightShadowCascades); LocalKeyword kw3 = new (Shader.Find("Universal Render Pipeline/Lit"), ShaderKeywordStrings.MainLightShadowScreen); bool actual; // All keywords disabled strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); // With enabled keywords strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); // Two features enabled strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); // All features enabled strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompileKeepOffVariant(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); } [Test] public void TestStripMultiCompile3() { s_PassKeywords = new List(); s_EnabledKeywords = new List(); ShaderStripTool stripTool; IShaderScriptableStrippingData strippingData; LocalKeyword kw1 = new (Shader.Find("Universal Render Pipeline/Lit"), ShaderKeywordStrings.MainLightShadows); LocalKeyword kw2 = new (Shader.Find("Universal Render Pipeline/Lit"), ShaderKeywordStrings.MainLightShadowCascades); LocalKeyword kw3 = new (Shader.Find("Universal Render Pipeline/Lit"), ShaderKeywordStrings.MainLightShadowScreen); bool actual; ///////////////////////////////////// /// Strip Unused Variants Disabled ///////////////////////////////////// // All keywords disabled strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); // With enabled keywords strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); // Two features enabled strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); // All features enabled strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = false; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); ///////////////////////////////////// /// Strip Unused Variants Enabled ///////////////////////////////////// // All keywords disabled strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); // With enabled keywords strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowScreen }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.None; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowScreen }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowScreen }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowScreen }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); // Two features enabled strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsTrue(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); // All features enabled strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadows }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadowScreen }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowCascades }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadows, ShaderKeywordStrings.MainLightShadowScreen }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; s_PassKeywords = new List(); stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); strippingData = new TestStrippingData(); strippingData.stripUnusedVariants = true; strippingData.shaderFeatures = ShaderFeatures.MainLightShadows | ShaderFeatures.MainLightShadowsCascade | ShaderFeatures.ScreenSpaceShadows; s_EnabledKeywords = new List(); s_PassKeywords = new List() { ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowCascades, ShaderKeywordStrings.MainLightShadowScreen }; stripTool = new ShaderStripTool(strippingData.shaderFeatures, ref strippingData); actual = stripTool.StripMultiCompile(kw1, ShaderFeatures.MainLightShadows, kw2, ShaderFeatures.MainLightShadowsCascade, kw3, ShaderFeatures.ScreenSpaceShadows); Assert.IsFalse(actual); } } }