private HDCachedShadowManager()
 {
     punctualShadowAtlas = new HDCachedShadowAtlas(ShadowMapType.PunctualAtlas);
     if (ShaderConfig.s_AreaLights == 1)
     {
         areaShadowAtlas = new HDCachedShadowAtlas(ShadowMapType.AreaLightAtlas);
     }
 }
        internal ShadowBlitParameters PrepareShadowBlitParameters(HDCachedShadowAtlas cachedAtlas, Material blitMaterial, MaterialPropertyBlock blitMpb)
        {
            ShadowBlitParameters parameters = new ShadowBlitParameters();

            parameters.requestsWaitingBlits      = m_MixedRequestsPendingBlits;
            parameters.blitMaterial              = blitMaterial;
            parameters.blitMaterialPropertyBlock = blitMpb;
            parameters.cachedShadowAtlasSize     = new Vector2Int(cachedAtlas.width, cachedAtlas.height);
            return(parameters);
        }
        public void BlitCachedIntoAtlas(RenderGraph renderGraph, HDCachedShadowAtlas cachedAtlas, Material blitMaterial, string passName, HDProfileId profileID)
        {
            if (m_MixedRequestsPendingBlits.Count > 0)
            {
                using (var builder = renderGraph.AddRenderPass <BlitCachedShadowPassData>(passName, out var passData, ProfilingSampler.Get(profileID)))
                {
                    passData.requestsWaitingBlits  = m_MixedRequestsPendingBlits;
                    passData.blitMaterial          = blitMaterial;
                    passData.cachedShadowAtlasSize = new Vector2Int(cachedAtlas.width, cachedAtlas.height);
                    passData.sourceCachedAtlas     = builder.ReadTexture(cachedAtlas.GetOutputTexture(renderGraph));
                    passData.atlasTexture          = builder.WriteTexture(GetOutputTexture(renderGraph));

                    builder.SetRenderFunc(
                        (BlitCachedShadowPassData data, RenderGraphContext ctx) =>
                    {
                        foreach (var request in data.requestsWaitingBlits)
                        {
                            var mpb = ctx.renderGraphPool.GetTempMaterialPropertyBlock();
                            ctx.cmd.SetRenderTarget(data.atlasTexture);
                            ctx.cmd.SetViewport(request.dynamicAtlasViewport);

                            Vector4 sourceScaleBias = new Vector4(request.cachedAtlasViewport.width / data.cachedShadowAtlasSize.x,
                                                                  request.cachedAtlasViewport.height / data.cachedShadowAtlasSize.y,
                                                                  request.cachedAtlasViewport.x / data.cachedShadowAtlasSize.x,
                                                                  request.cachedAtlasViewport.y / data.cachedShadowAtlasSize.y);

                            mpb.SetTexture(HDShaderIDs._CachedShadowmapAtlas, data.sourceCachedAtlas);
                            mpb.SetVector(HDShaderIDs._BlitScaleBias, sourceScaleBias);
                            CoreUtils.DrawFullScreen(ctx.cmd, data.blitMaterial, mpb, 0);
                        }

                        data.requestsWaitingBlits.Clear();
                    });
                }
            }
        }