Esempio n. 1
0
        public void ShaderVariantsAreReported()
        {
            var issues = BuildAndAnalyze();

            Assert.True(ShadersAuditor.BuildDataAvailable());

            var keywords = issues.Select(i => i.GetCustomProperty((int)ShaderVariantProperty.Keywords));

            Assert.True(keywords.Any(key => key.Equals(s_KeywordName)));

            var variants = issues.Where(i => i.description.Equals("Custom/MyTestShader")).ToArray();
            var shaderCompilerPlatforms    = variants.Select(v => v.GetCustomProperty((int)ShaderVariantProperty.Platform)).Distinct();
            var numShaderCompilerPlatforms = shaderCompilerPlatforms.Count();

            Assert.AreEqual(5 * numShaderCompilerPlatforms, variants.Length);

            foreach (var plat in shaderCompilerPlatforms)
            {
                var variantsForPlatform = variants.Where(v => v.GetCustomProperty((int)ShaderVariantProperty.Platform).Equals(plat)).ToArray();
                Assert.AreEqual((int)ShaderVariantProperty.Num, variantsForPlatform[0].GetNumCustomProperties());

                // "#pragma multi_compile __ KEYWORD_A KEYWORD_B" should produce 3 variants for each graphics API
                Assert.True(variantsForPlatform.Any(v => v.GetCustomProperty((int)ShaderVariantProperty.Keywords).Equals(ShadersAuditor.k_NoKeywords)));
                Assert.True(variantsForPlatform.Any(v => v.GetCustomProperty((int)ShaderVariantProperty.Keywords).Equals("KEYWORD_A")));
                Assert.True(variantsForPlatform.Any(v => v.GetCustomProperty((int)ShaderVariantProperty.Keywords).Equals("KEYWORD_B")));
            }
        }
        public void ShaderVariantsAreReported()
        {
            var issues = Utility.AnalyzeBuild().GetIssues(IssueCategory.ShaderVariants);

            Assert.True(ShadersAuditor.BuildDataAvailable());

            var keywords = issues.Select(i => i.GetCustomProperty(ShaderVariantProperty.Keywords));

            Assert.True(keywords.Any(key => key.Equals(s_KeywordName)));

            var variants = issues.Where(i => i.description.Equals(k_ShaderName)).ToArray();

            Assert.Positive(variants.Length);

            var shaderCompilerPlatforms = variants.Select(v => v.GetCustomProperty(ShaderVariantProperty.Platform)).Distinct();
            var compilerPlatformNames   = ShaderUtilProxy.GetCompilerPlatformNames();

            foreach (var plat in shaderCompilerPlatforms)
            {
                Assert.Contains(plat, compilerPlatformNames);

                var variantsForPlatform = variants.Where(v => v.GetCustomProperty(ShaderVariantProperty.Platform).Equals(plat)).ToArray();
                Assert.AreEqual((int)ShaderVariantProperty.Num, variantsForPlatform[0].GetNumCustomProperties());

                // "#pragma multi_compile __ KEYWORD_A KEYWORD_B" should produce 3 variants for each graphics API
                Assert.True(variantsForPlatform.Any(v => v.GetCustomProperty(ShaderVariantProperty.Keywords).Equals(ShadersAuditor.k_NoKeywords)));
                Assert.True(variantsForPlatform.Any(v => v.GetCustomProperty(ShaderVariantProperty.Keywords).Equals("KEYWORD_A")));
                Assert.True(variantsForPlatform.Any(v => v.GetCustomProperty(ShaderVariantProperty.Keywords).Equals("KEYWORD_B")));
                Assert.True(variantsForPlatform.All(v => v.GetCustomProperty(ShaderVariantProperty.Compiled).Equals(ShadersAuditor.k_NoRuntimeData)));

                // check descriptor
                Assert.True(variantsForPlatform.All(v => v.descriptor.area.Equals("Info")));
            }
        }
        public void ShaderVariantsRequireBuild()
        {
            ShadersAuditor.ClearBuildData();
            var issues = Utility.Analyze(IssueCategory.ShaderVariants);

            Assert.Zero(issues.Length);
            Assert.False(ShadersAuditor.BuildDataAvailable());
        }
Esempio n. 4
0
        public void ShaderVariantsRequireBuild()
        {
            ShadersAuditor.CleanupBuildData();
            var projectAuditor = new Unity.ProjectAuditor.Editor.ProjectAuditor();

            var projectReport = projectAuditor.Audit();
            var issues        = projectReport.GetIssues(IssueCategory.ShaderVariants);

            Assert.Zero(issues.Length);
            Assert.False(ShadersAuditor.BuildDataAvailable());
        }
        public override void OnGUI()
        {
            var buildAvailable = ShadersAuditor.BuildDataAvailable();

            EditorGUILayout.BeginVertical(GUI.skin.box);

            var helpStyle = new GUIStyle(EditorStyles.textField);

            helpStyle.wordWrap = true;
            EditorGUILayout.LabelField(buildAvailable ? k_PlayerLogInfo : k_BuildRequiredInfo, helpStyle);

            EditorGUI.BeginChangeCheck();

            var lastEnabled = GUI.enabled;

            GUI.enabled            = buildAvailable;
            m_FlatView             = EditorGUILayout.ToggleLeft("Flat View", m_FlatView, GUILayout.Width(160));
            m_HideCompiledVariants = EditorGUILayout.ToggleLeft("Hide Compiled Variants", m_HideCompiledVariants, GUILayout.Width(160));
            GUI.enabled            = lastEnabled;

            if (EditorGUI.EndChangeCheck())
            {
                m_AnalysisView.SetFlatView(m_FlatView);
                m_AnalysisView.Refresh();
            }

            EditorGUILayout.EndVertical();

            if (buildAvailable)
            {
                var evt = Event.current;

                switch (evt.type)
                {
                case EventType.DragExited:
                    break;

                case EventType.DragUpdated:
                    var valid = 1 == DragAndDrop.paths.Count(path => Path.HasExtension(path) && Path.GetExtension(path).Equals(".log"));
                    DragAndDrop.visualMode = valid ? DragAndDropVisualMode.Generic : DragAndDropVisualMode.Rejected;
                    evt.Use();
                    break;

                case EventType.DragPerform:
                    DragAndDrop.AcceptDrag();
                    HandleDragAndDrop();
                    evt.Use();
                    break;
                }
                base.OnGUI();
            }
        }