bool StripUnusedVariant(PipelineCapabilities capabilities, ShaderCompilerData compilerData)
        {
            if (compilerData.shaderKeywordSet.IsEnabled(LightweightKeyword.AdditionalLights) &&
                !CoreUtils.HasFlag(capabilities, PipelineCapabilities.AdditionalLights))
            {
                return(true);
            }

            if (compilerData.shaderKeywordSet.IsEnabled(LightweightKeyword.VertexLights) &&
                !CoreUtils.HasFlag(capabilities, PipelineCapabilities.VertexLights))
            {
                return(true);
            }

            if (compilerData.shaderKeywordSet.IsEnabled(LightweightKeyword.DirectionalShadows) &&
                !CoreUtils.HasFlag(capabilities, PipelineCapabilities.DirectionalShadows))
            {
                return(true);
            }

            if (compilerData.shaderKeywordSet.IsEnabled(LightweightKeyword.LocalShadows) &&
                !CoreUtils.HasFlag(capabilities, PipelineCapabilities.LocalShadows))
            {
                return(true);
            }

            if (compilerData.shaderKeywordSet.IsEnabled(LightweightKeyword.SoftShadows) &&
                !CoreUtils.HasFlag(capabilities, PipelineCapabilities.SoftShadows))
            {
                return(true);
            }

            return(false);
        }
示例#2
0
        static void SetPipelineCapabilities(LightweightPipelineAsset pipelineAsset)
        {
            s_PipelineCapabilities = 0U;

            if (pipelineAsset.MaxPixelLights > 1 || pipelineAsset.SupportsVertexLight)
            {
                s_PipelineCapabilities |= PipelineCapabilities.AdditionalLights;
            }

            if (pipelineAsset.SupportsVertexLight)
            {
                s_PipelineCapabilities |= PipelineCapabilities.VertexLights;
            }

            if (pipelineAsset.SupportsDirectionalShadows)
            {
                s_PipelineCapabilities |= PipelineCapabilities.DirectionalShadows;
            }

            if (pipelineAsset.SupportsLocalShadows)
            {
                s_PipelineCapabilities |= PipelineCapabilities.LocalShadows;
            }

            bool anyShadows = pipelineAsset.SupportsDirectionalShadows || pipelineAsset.SupportsLocalShadows;

            if (pipelineAsset.SupportsSoftShadows && anyShadows)
            {
                s_PipelineCapabilities |= PipelineCapabilities.SoftShadows;
            }
        }
        public void OnProcessShader(Shader shader, ShaderSnippetData snippetData, IList <ShaderCompilerData> compilerDataList)
        {
            LightweightRP lw = RenderPipelineManager.currentPipeline as LightweightRP;

            if (lw == null)
            {
                return;
            }

            PipelineCapabilities capabilities = LightweightRP.GetPipelineCapabilities();
            int prevVariantCount = compilerDataList.Count;

            for (int i = 0; i < compilerDataList.Count; ++i)
            {
                if (StripUnused(capabilities, shader, snippetData, compilerDataList[i]))
                {
                    compilerDataList.RemoveAt(i);
                    --i;
                }
            }

#if LOG_VARIANTS
            m_TotalVariantsInputCount  += prevVariantCount;
            m_TotalVariantsOutputCount += compilerDataList.Count;

            LogVariants(shader, snippetData, prevVariantCount, compilerDataList.Count);
#endif
        }
示例#4
0
        private void OnEndRequest(object sender, EventArgs e)
        {
            HttpContext context = ((HttpApplication)sender).Context;

            if (context != null)
            {
                PipelineCapabilities caps = context.Request.Browser as PipelineCapabilities;
                caps.FlowData.Dispose();
            }
        }
        bool StripUnusedPass(PipelineCapabilities capabilities, ShaderSnippetData snippetData)
        {
            if (snippetData.passType == PassType.Meta)
            {
                return(true);
            }

            if (snippetData.passType == PassType.ShadowCaster)
            {
                if (!CoreUtils.HasFlag(capabilities, PipelineCapabilities.DirectionalShadows) && !CoreUtils.HasFlag(capabilities, PipelineCapabilities.LocalShadows))
                {
                    return(true);
                }
            }

            return(false);
        }
        bool StripUnusedShader(PipelineCapabilities capabilities, Shader shader)
        {
            if (shader.name.Contains("Debug"))
            {
                return(true);
            }

            if (shader.name.Contains("HDRenderPipeline"))
            {
                return(true);
            }

            if (!CoreUtils.HasFlag(capabilities, PipelineCapabilities.DirectionalShadows) &&
                shader.name.Contains("ScreenSpaceShadows"))
            {
                return(true);
            }

            return(false);
        }
        bool StripUnused(PipelineCapabilities capabilities, Shader shader, ShaderSnippetData snippetData, ShaderCompilerData compilerData)
        {
            if (StripUnusedShader(capabilities, shader))
            {
                return(true);
            }

            if (StripUnusedPass(capabilities, snippetData))
            {
                return(true);
            }

            if (StripUnusedVariant(capabilities, compilerData))
            {
                return(true);
            }

            if (StripInvalidVariants(compilerData))
            {
                return(true);
            }

            return(false);
        }
        static void SetPipelineCapabilities(LightweightPipelineAsset pipelineAsset)
        {
            s_PipelineCapabilities = 0U;

            // Strip variants based on selected pipeline features
            if (!pipelineAsset.customShaderVariantStripping)
            {
                if (pipelineAsset.maxPixelLights > 1 || pipelineAsset.supportsVertexLight)
                {
                    s_PipelineCapabilities |= PipelineCapabilities.AdditionalLights;
                }

                if (pipelineAsset.supportsVertexLight)
                {
                    s_PipelineCapabilities |= PipelineCapabilities.VertexLights;
                }

                if (pipelineAsset.supportsDirectionalShadows)
                {
                    s_PipelineCapabilities |= PipelineCapabilities.DirectionalShadows;
                }

                if (pipelineAsset.supportsLocalShadows)
                {
                    s_PipelineCapabilities |= PipelineCapabilities.LocalShadows;
                }

                bool anyShadows = pipelineAsset.supportsDirectionalShadows || pipelineAsset.supportsLocalShadows;
                if (pipelineAsset.supportsSoftShadows && anyShadows)
                {
                    s_PipelineCapabilities |= PipelineCapabilities.SoftShadows;
                }
            }
            else
            {
                if (pipelineAsset.keepAdditionalLightVariants)
                {
                    s_PipelineCapabilities |= PipelineCapabilities.AdditionalLights;
                }

                if (pipelineAsset.keepVertexLightVariants)
                {
                    s_PipelineCapabilities |= PipelineCapabilities.VertexLights;
                }

                if (pipelineAsset.keepDirectionalShadowVariants)
                {
                    s_PipelineCapabilities |= PipelineCapabilities.DirectionalShadows;
                }

                if (pipelineAsset.keepLocalShadowVariants)
                {
                    s_PipelineCapabilities |= PipelineCapabilities.LocalShadows;
                }

                if (pipelineAsset.keepSoftShadowVariants)
                {
                    s_PipelineCapabilities |= PipelineCapabilities.SoftShadows;
                }
            }
        }