/// <summary> /// Prepares the shader stripper processors and report generation structures /// This should be called manually before generating asset bundles. /// </summary> public static void PrepareShaderStripper(bool isAssetBundleBuild) { s_IsAssetBundleBuild = isAssetBundleBuild; var graphicsSettingsObj = AssetDatabase.LoadAssetAtPath <GraphicsSettings>("ProjectSettings/GraphicsSettings.asset"); var serializedObject = new SerializedObject(graphicsSettingsObj); s_AlwaysIncludedShaders = serializedObject.FindProperty("m_AlwaysIncludedShaders"); s_ShaderProcessors = null; s_ProcessAlwaysIncludedShaders = ShaderStripperSettings.GetOrCreateSettings().processAlwaysIncludedShaders; s_IsEnabled = ShaderProcessors.Any(x => x.enabled); if (s_IsEnabled) { foreach (var processor in ShaderProcessors) { processor.Initialize(); } Logger.Clear(); s_ShaderLogEntries.Clear(); s_StripTimer.Reset(); s_BuildTimer.Restart(); } else { Debug.Log("[Shader Stripper] No shaders will be stripped due to no processors are enabled."); } }
public static SettingsProvider CreateProjectSettingsProvider() { if (!IsSettingsAvailable()) { ShaderStripperSettings.GetOrCreateSettings(); } return(new ShaderStripperSettingsProvider("Project/Daihenka/Shader Stripping", SettingsScope.Project) { // TODO Setup keywords keywords = new string[0] }); }
public override void OnActivate(string searchContext, VisualElement rootElement) { m_Settings = ShaderStripperSettings.GetSerializedSettings(); m_Target = (ShaderStripperSettings)m_Settings.targetObject; m_ProcessorList = new ReorderableList(m_Settings, m_Settings.FindProperty("m_Processors"), true, true, true, true); m_ProcessorList.drawHeaderCallback = rect => { EditorGUI.LabelField(rect, "Processors are executed from top to bottom per shader variant", new GUIStyle(EditorStyles.miniLabel) { alignment = TextAnchor.MiddleCenter }); EditorGUI.LabelField(rect, "Shader Processors", EditorStyles.boldLabel); }; m_ProcessorList.drawElementCallback = OnDrawProcessorListItem; m_ProcessorList.onAddCallback = OnAddProcessorButtonClicked; m_ProcessorList.onRemoveCallback = OnRemoveProcessorButtonClicked; m_ProcessorList.onSelectCallback = list => DestroyCachedEditor(); m_LogPath = ShaderStripperSettings.LogPath; }
/// <summary> /// Generates the post build stripped shaders report. /// This should be called manually after generating asset bundles /// </summary> public static void GenerateReport() { if (!s_IsEnabled) { return; } s_BuildTimer.Stop(); var buildStats = $@"Build Duration: {s_BuildTimer.ElapsedMilliseconds}ms Shader Stripping Duration: {s_StripTimer.ElapsedMilliseconds}ms Total shaders included: {s_TotalShadersIncluded} Total shaders stripped: {s_TotalShadersStripped}"; Debug.Log(buildStats); var settings = ShaderStripperSettings.GetOrCreateSettings(); Logger.Log(buildStats); Logger.Log(); Logger.Log(new string('-', 100)); Logger.Log(); Logger.Log("INCLUDED SHADER VARIANTS"); Logger.Log(); Logger.Log(new string('-', 100)); Logger.Log(); foreach (var entry in s_ShaderLogEntries) { if (entry.Value.includeCount <= 0) { continue; } Logger.LogFormat(kShaderVariantCountLogFormat, entry.Key, entry.Value.includeCount, entry.Value.includeVariants.Count); if (settings.logIncludedVariants) { foreach (var keywords in entry.Value.includeVariants) { Logger.Log($"\t {(keywords.IsNullOrWhiteSpace() ? "<no keywords>" : keywords)}"); } Logger.Log(); } } Logger.Log(); Logger.Log(new string('-', 100)); Logger.Log(); Logger.Log("STRIPPED SHADER VARIANTS"); Logger.Log(); Logger.Log(new string('-', 100)); Logger.Log(); foreach (var entry in s_ShaderLogEntries) { if (entry.Value.stripCount <= 0) { continue; } Logger.LogFormat(kShaderVariantCountLogFormat, entry.Key, entry.Value.stripCount, entry.Value.stripVariants.Count); if (settings.logStrippedVariants) { foreach (var keywords in entry.Value.stripVariants) { Logger.Log($"\t {(keywords.IsNullOrWhiteSpace() ? "<no keywords>" : keywords)}"); } Logger.Log(); } } Logger.Save(s_IsAssetBundleBuild ? "_AssetBundles" : "_Build"); s_StripTimer.Reset(); s_BuildTimer.Restart(); s_TotalShadersIncluded = 0; s_TotalShadersStripped = 0; }