11/*
2- * Copyright 2019-2024 Diligent Graphics LLC
2+ * Copyright 2019-2025 Diligent Graphics LLC
33 * Copyright 2015-2019 Egor Yusov
44 *
55 * Licensed under the Apache License, Version 2.0 (the "License");
@@ -139,9 +139,9 @@ void ShadowMapManager::DistributeCascades(const DistributeCascadeInfo& Info,
139139 VERIFY (Info.pLightDir , " Light direction must not be null" );
140140 VERIFY (m_pDevice, " Shadow map manager is not initialized" );
141141
142- const auto & DevInfo = m_pDevice->GetDeviceInfo ();
143- const auto IsGL = DevInfo.IsGLDevice ();
144- const auto & SMDesc = m_pShadowMapSRV->GetTexture ()->GetDesc ();
142+ const RenderDeviceInfo & DevInfo = m_pDevice->GetDeviceInfo ();
143+ const bool IsGL = DevInfo.IsGLDevice ();
144+ const TextureDesc& SMDesc = m_pShadowMapSRV->GetTexture ()->GetDesc ();
145145
146146 float2 f2ShadowMapSize = float2 (static_cast <float >(SMDesc.Width ), static_cast <float >(SMDesc.Height ));
147147
@@ -153,8 +153,8 @@ void ShadowMapManager::DistributeCascades(const DistributeCascadeInfo& Info,
153153 if (m_ShadowMode == SHADOW_MODE_VSM || m_ShadowMode == SHADOW_MODE_EVSM2 || m_ShadowMode == SHADOW_MODE_EVSM4)
154154 {
155155 VERIFY_EXPR (m_pFilterableShadowMapSRV);
156- const auto & FilterableSMDesc = m_pFilterableShadowMapSRV->GetTexture ()->GetDesc ();
157- ShadowAttribs.bIs32BitEVSM = FilterableSMDesc.Format == TEX_FORMAT_RGBA32_FLOAT || FilterableSMDesc.Format == TEX_FORMAT_RG32_FLOAT;
156+ const TextureDesc & FilterableSMDesc = m_pFilterableShadowMapSRV->GetTexture ()->GetDesc ();
157+ ShadowAttribs.bIs32BitEVSM = FilterableSMDesc.Format == TEX_FORMAT_RGBA32_FLOAT || FilterableSMDesc.Format == TEX_FORMAT_RG32_FLOAT;
158158 }
159159
160160 float3 LightSpaceX, LightSpaceY, LightSpaceZ;
@@ -165,7 +165,7 @@ void ShadowMapManager::DistributeCascades(const DistributeCascadeInfo& Info,
165165
166166 WriteShaderMatrix (&ShadowAttribs.mWorldToLightView , WorldToLightViewSpaceMatr, !Info.PackMatrixRowMajor );
167167
168- const auto & CameraWorld = Info.pCameraWorld != nullptr ? *Info.pCameraWorld : Info.pCameraView ->Inverse ();
168+ const float4x4 & CameraWorld = Info.pCameraWorld != nullptr ? *Info.pCameraWorld : Info.pCameraView ->Inverse ();
169169 // const float3 f3CameraPos = {CameraWorld._41, CameraWorld._42, CameraWorld._43};
170170 // const float3 f3CameraPosInLightSpace = f3CameraPos * WorldToLightViewSpaceMatr;
171171
@@ -186,7 +186,8 @@ void ShadowMapManager::DistributeCascades(const DistributeCascadeInfo& Info,
186186 m_CascadeTransforms.resize (iNumCascades);
187187 for (int iCascade = 0 ; iCascade < iNumCascades; ++iCascade)
188188 {
189- auto & CurrCascade = ShadowAttribs.Cascades [iCascade];
189+ CascadeAttribs& CurrCascade = ShadowAttribs.Cascades [iCascade];
190+
190191 float fCascadeNearZ = (iCascade == 0 ) ? fMainCamNearPlane : ShadowAttribs.fCascadeCamSpaceZEnd [iCascade - 1 ];
191192 float & fCascadeFarZ = ShadowAttribs.fCascadeCamSpaceZEnd [iCascade];
192193 if (iCascade < iNumCascades - 1 )
@@ -224,9 +225,10 @@ void ShadowMapManager::DistributeCascades(const DistributeCascadeInfo& Info,
224225 float3 f3MinimalSphereCenter;
225226 float fMinimalSphereRadius ;
226227 GetFrustumMinimumBoundingSphere (Info.pCameraProj ->_11 , Info.pCameraProj ->_22 , fCascadeNearZ , fCascadeFarZ , f3MinimalSphereCenter, fMinimalSphereRadius );
227- auto f3CenterLightSpace = f3MinimalSphereCenter * CameraWorld * WorldToLightViewSpaceMatr;
228- f3MinXYZ = f3CenterLightSpace - float3 (fMinimalSphereRadius , fMinimalSphereRadius , fMinimalSphereRadius );
229- f3MaxXYZ = f3CenterLightSpace + float3 (fMinimalSphereRadius , fMinimalSphereRadius , fMinimalSphereRadius );
228+ float3 f3CenterLightSpace = f3MinimalSphereCenter * CameraWorld * WorldToLightViewSpaceMatr;
229+
230+ f3MinXYZ = f3CenterLightSpace - float3 (fMinimalSphereRadius , fMinimalSphereRadius , fMinimalSphereRadius );
231+ f3MaxXYZ = f3CenterLightSpace + float3 (fMinimalSphereRadius , fMinimalSphereRadius , fMinimalSphereRadius );
230232 }
231233 else
232234 {
@@ -383,9 +385,10 @@ void ShadowMapManager::DistributeCascades(const DistributeCascadeInfo& Info,
383385 float4x4& WorldToLightProjSpaceMatr = m_CascadeTransforms[iCascade].WorldToLightProjSpace ;
384386 WorldToLightProjSpaceMatr = WorldToLightViewSpaceMatr * CascadeProjMatr;
385387
386- const auto & NDCAttribs = DevInfo.GetNDCAttribs ();
387- float4x4 ProjToUVScale = float4x4::Scale (0 .5f , NDCAttribs.YtoVScale , NDCAttribs.ZtoDepthScale );
388- float4x4 ProjToUVBias = float4x4::Translation (0 .5f , 0 .5f , NDCAttribs.GetZtoDepthBias ());
388+ const NDCAttribs& NDC = DevInfo.GetNDCAttribs ();
389+
390+ float4x4 ProjToUVScale = float4x4::Scale (0 .5f , NDC.YtoVScale , NDC.ZtoDepthScale );
391+ float4x4 ProjToUVBias = float4x4::Translation (0 .5f , 0 .5f , NDC.GetZtoDepthBias ());
389392
390393 float4x4 WorldToShadowMapUVDepthMatr = WorldToLightProjSpaceMatr * ProjToUVScale * ProjToUVBias;
391394 WriteShaderMatrix (ShadowAttribs.mWorldToShadowMapUVDepth + iCascade, WorldToShadowMapUVDepthMatr, !Info.PackMatrixRowMajor );
@@ -404,7 +407,7 @@ void ShadowMapManager::InitializeConversionTechniques(TEXTURE_FORMAT FilterableS
404407 RefCntAutoPtr<IShader> pScreenSizeTriVS;
405408 for (int mode = SHADOW_MODE_VSM; mode <= SHADOW_MODE_EVSM4; ++mode)
406409 {
407- auto & Tech = m_ConversionTech[mode];
410+ ShadowConversionTechnique & Tech = m_ConversionTech[mode];
408411 if (mode == SHADOW_MODE_EVSM4)
409412 {
410413 Tech = m_ConversionTech[SHADOW_MODE_EVSM2];
@@ -454,7 +457,7 @@ void ShadowMapManager::InitializeConversionTechniques(TEXTURE_FORMAT FilterableS
454457 {
455458 UNEXPECTED (" Unexpected shadow mode" );
456459 }
457- auto pVSMHorzPS = DeviceWithCache.CreateShader (ShaderCI);
460+ RefCntAutoPtr<IShader> pVSMHorzPS = DeviceWithCache.CreateShader (ShaderCI);
458461
459462 ShaderResourceVariableDesc Variables[] =
460463 {
@@ -476,8 +479,7 @@ void ShadowMapManager::InitializeConversionTechniques(TEXTURE_FORMAT FilterableS
476479 PSODesc.ResourceLayout .Variables = Variables;
477480 PSODesc.ResourceLayout .NumVariables = _countof (Variables);
478481
479- auto & GraphicsPipeline = PSOCreateInfo.GraphicsPipeline ;
480-
482+ GraphicsPipelineDesc& GraphicsPipeline{PSOCreateInfo.GraphicsPipeline };
481483 GraphicsPipeline.RasterizerDesc .FillMode = FILL_MODE_SOLID;
482484 GraphicsPipeline.RasterizerDesc .CullMode = CULL_MODE_NONE;
483485 GraphicsPipeline.DepthStencilDesc .DepthEnable = False;
@@ -499,7 +501,8 @@ void ShadowMapManager::InitializeConversionTechniques(TEXTURE_FORMAT FilterableS
499501 ShaderCI.Desc .Name = " Vertical blur pass PS" ;
500502 PSODesc.Name = " Vertical blur pass PSO" ;
501503
502- auto pVertBlurPS = DeviceWithCache.CreateShader (ShaderCI);
504+ RefCntAutoPtr<IShader> pVertBlurPS = DeviceWithCache.CreateShader (ShaderCI);
505+
503506 PSOCreateInfo.pPS = pVertBlurPS;
504507 m_BlurVertTech.PSO = DeviceWithCache.CreateGraphicsPipelineState (PSOCreateInfo);
505508 m_BlurVertTech.PSO ->GetStaticVariableByName (SHADER_TYPE_PIXEL, " cbConversionAttribs" )->Set (m_pConversionAttribsBuffer);
@@ -511,7 +514,7 @@ void ShadowMapManager::InitializeResourceBindings()
511514{
512515 for (int mode = SHADOW_MODE_VSM; mode <= SHADOW_MODE_EVSM4; ++mode)
513516 {
514- auto & Tech = m_ConversionTech[mode];
517+ ShadowConversionTechnique & Tech = m_ConversionTech[mode];
515518 if (mode == SHADOW_MODE_EVSM4)
516519 {
517520 Tech.SRB = m_ConversionTech[SHADOW_MODE_EVSM2].SRB ;
@@ -531,10 +534,10 @@ void ShadowMapManager::ConvertToFilterable(IDeviceContext* pCtx, const ShadowMap
531534{
532535 if (m_ShadowMode == SHADOW_MODE_VSM || m_ShadowMode == SHADOW_MODE_EVSM2 || m_ShadowMode == SHADOW_MODE_EVSM4)
533536 {
534- auto & Tech = m_ConversionTech[m_ShadowMode];
535- const auto & ShadowMapDesc = m_pShadowMapSRV->GetTexture ()->GetDesc ();
537+ ShadowConversionTechnique& Tech = m_ConversionTech[m_ShadowMode];
538+ const TextureDesc& ShadowMapDesc = m_pShadowMapSRV->GetTexture ()->GetDesc ();
536539 VERIFY (static_cast <int >(ShadowMapDesc.ArraySize ) == ShadowAttribs.iNumCascades , " Inconsistent number of cascades" );
537- const auto & FilterableSMDesc = m_pFilterableShadowMapSRV->GetTexture ()->GetDesc ();
540+ const TextureDesc & FilterableSMDesc = m_pFilterableShadowMapSRV->GetTexture ()->GetDesc ();
538541 VERIFY (ShadowAttribs.bIs32BitEVSM == (FilterableSMDesc.Format == TEX_FORMAT_RGBA32_FLOAT || FilterableSMDesc.Format == TEX_FORMAT_RG32_FLOAT),
539542 " Incorrect 32-bit VSM flag" );
540543 (void )FilterableSMDesc;
@@ -566,10 +569,11 @@ void ShadowMapManager::ConvertToFilterable(IDeviceContext* pCtx, const ShadowMap
566569 }
567570 else
568571 {
569- const auto & Cascade = ShadowAttribs.Cascades [i];
570- float fNDCtoUVScale = 0 .5f ;
571- float fFilterWidth = ShadowAttribs.fFilterWorldSize * Cascade.f4LightSpaceScale .x * fNDCtoUVScale ;
572- float fFilterHeight = ShadowAttribs.fFilterWorldSize * Cascade.f4LightSpaceScale .y * fNDCtoUVScale ;
572+ const CascadeAttribs& Cascade = ShadowAttribs.Cascades [i];
573+
574+ float fNDCtoUVScale = 0 .5f ;
575+ float fFilterWidth = ShadowAttribs.fFilterWorldSize * Cascade.f4LightSpaceScale .x * fNDCtoUVScale ;
576+ float fFilterHeight = ShadowAttribs.fFilterWorldSize * Cascade.f4LightSpaceScale .y * fNDCtoUVScale ;
573577 pAttribs->fHorzFilterRadius = fFilterWidth / 2 .f * static_cast <float >(ShadowMapDesc.Width );
574578 pAttribs->fVertFilterRadius = fFilterHeight / 2 .f * static_cast <float >(ShadowMapDesc.Height );
575579 }
0 commit comments