WuhuIslandTesting/Library/PackageCache/com.unity.render-pipelines.core@8148.0.3-1/Editor/ShaderVariantStripper.cs

113 lines
3.9 KiB
C#
Raw Normal View History

2025-01-07 02:06:59 +01:00
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.Build;
using UnityEditor.Rendering;
using UnityEngine;
using UnityEngine.Rendering;
/*
class ShaderVariantStripper : IPreprocessShaders
{
public int callbackOrder { get { return 0; } }
ShaderKeyword m_Lightmap;
ShaderKeyword m_AddLights;
ShaderKeyword m_AddLightSh;
ShaderKeyword[] illegalVariants;
string[] illegalVariantNames = new string[] { "_DBUFFER_MRT1", "_DBUFFER_MRT2", "_DBUFFER_MRT3", "_LIGHT_LAYERS", "_CLUSTERED_RENDERING",
"DOTS_INSTANCING_ON", "FOG_LINEAR", "FOG_EXP", "DEBUG_DISPLAY", "_RENDER_PASS_ENABLED", "_GBUFFER_NORMALS_OCT", "EDITOR_VISUALIZATION"};
ShaderKeyword[] illegalVariantsQuest;
string[] illegalVariantNamesQuest = new string[] { "_ADDITIONAL_LIGHTS", "_ADDITIONAL_LIGHT_SHADOWS", "_REFLECTION_PROBE_BLENDING",
"_REFLECTION_PROBE_BOX_PROJECTION", "_SCREEN_SPACE_OCCLUSION", "_SHADOWS_SOFT"};
ShaderKeyword[] illegalVariantsPC;
string[] illegalVariantNamesPC = new string[] { "_ADDITIONAL_LIGHTS_VERTEX" };
ShaderKeyword[] illegalVariantsNonLM;
string[] illegalVariantNamesNonLM = new string[] { "DIRLIGHTMAP_COMBINED", "LIGHTMAP_SHADOW_MIXING", "SHADOWS_SHADOWMASK", "DYNAMICLIGHTMAP_ON"};
public ShaderVariantStripper()
{
m_Lightmap = new ShaderKeyword("LIGHTMAP_ON");
m_AddLights = new ShaderKeyword("_ADDITIONAL_LIGHTS");
m_AddLightSh = new ShaderKeyword("_ADDITIONAL_LIGHT_SHADOWS");
illegalVariants = populateKWArray(illegalVariantNames);
illegalVariantsNonLM = populateKWArray(illegalVariantNamesNonLM);
#if UNITY_ANDROID
illegalVariantsQuest = populateKWArray(illegalVariantNamesQuest);
#elif UNITY_STANDALONE
illegalVariantsPC = populateKWArray(illegalVariantNamesPC);
#endif
}
public void OnProcessShader(
Shader shader, ShaderSnippetData snippet, IList<ShaderCompilerData> shaderCompilerData)
{
int stripCount = 0;
for (int i = 0; i < shaderCompilerData.Count; ++i)
{
if (RemoveIfInList(ref shaderCompilerData, ref i, illegalVariants))
{
++stripCount;
}
#if UNITY_ANDROID
else if (RemoveIfInList(ref shaderCompilerData, ref i, illegalVariantsQuest))
{
++stripCount;
}
#else
else if (RemoveIfInList(ref shaderCompilerData, ref i, illegalVariantsPC))
{
++stripCount;
}
#endif
else if (!shaderCompilerData[i].shaderKeywordSet.IsEnabled(m_Lightmap) &&
RemoveIfInList(ref shaderCompilerData, ref i, illegalVariantsNonLM))
{
++stripCount;
}
else if (shaderCompilerData[i].shaderKeywordSet.IsEnabled(m_AddLightSh) && !shaderCompilerData[i].shaderKeywordSet.IsEnabled(m_AddLights))
{
shaderCompilerData.RemoveAt(i);
--i;
++stripCount;
}
}
if (stripCount > 0)
{
Debug.Log("Scriptable Shader Stripper: Stripped " + stripCount + " variants from " + shader.name + " " + snippet.shaderType + " pass " + snippet.pass.PassIndex + " " + snippet.passName);
}
}
private ShaderKeyword[] populateKWArray(string[] kwNames)
{
ShaderKeyword[] kwList = new ShaderKeyword[kwNames.Length];
for (int i = 0; i < kwNames.Length; i++)
{
kwList[i] = new ShaderKeyword(kwNames[i]);
}
return kwList;
}
private bool RemoveIfInList(ref IList<ShaderCompilerData> data, ref int index, ShaderKeyword[] keyList)
{
for (int i = 0; i < keyList.Length; ++i)
{
if (data[index].shaderKeywordSet.IsEnabled(keyList[i]))
{
data.RemoveAt(index);
--index;
return true;
}
}
return false;
}
}
*/