public void OnProcessShader(Shader shader, ShaderSnippetData snippet, IList <ShaderCompilerData> inputData) { // Do we have a shader variant stripper function for this shader? VariantStrippingFunc stripperFunc = null; m_StripperFuncs.TryGetValue(shader.name, out stripperFunc); if (stripperFunc == null || inputData.Count == 0) { return; } int inputShaderVariantCount = inputData.Count; ShaderCompilerData workaround = inputData[0]; for (int i = 0; i < inputData.Count; ++i) { ShaderCompilerData input = inputData[i]; if (stripperFunc(shader, snippet, input)) { inputData.RemoveAt(i); i--; } } // Currently if a certain snippet is completely stripped (for example if you remove a whole pass) other passes might get broken // To work around that, we make sure that we always have at least one variant. if (inputData.Count == 0) { inputData.Add(workaround); } }
public void OnProcessShader(Shader shader, ShaderSnippetData snippet, IList <ShaderCompilerData> inputData) { // This test will also return if we are not using HDRenderPipelineAsset if (m_CurrentHDRPAsset == null || !m_CurrentHDRPAsset.allowShaderVariantStripping) { return; } // Do we have a shader variant stripper function for this shader? VariantStrippingFunc stripperFunc = null; m_StripperFuncs.TryGetValue(shader.name, out stripperFunc); if (stripperFunc == null) { return; } int inputShaderVariantCount = inputData.Count; for (int i = 0; i < inputData.Count; ++i) { ShaderCompilerData input = inputData[i]; if (stripperFunc(m_CurrentHDRPAsset, shader, snippet, input)) { inputData.RemoveAt(i); i--; } } }