From 3889adf35dc5473112e8bb8042a772d9b0289e0f Mon Sep 17 00:00:00 2001 From: Egor Yusov Date: Wed, 17 Jul 2019 19:53:29 -0700 Subject: Shadows: added VSM mode --- Components/interface/ShadowMapManager.h | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) (limited to 'Components/interface/ShadowMapManager.h') diff --git a/Components/interface/ShadowMapManager.h b/Components/interface/ShadowMapManager.h index 14937bb..4cbe182 100644 --- a/Components/interface/ShadowMapManager.h +++ b/Components/interface/ShadowMapManager.h @@ -23,6 +23,7 @@ #include #include "../../../DiligentCore/Graphics/GraphicsEngine/interface/RenderDevice.h" +#include "../../../DiligentCore/Graphics/GraphicsEngine/interface/DeviceContext.h" #include "../../../DiligentCore/Graphics/GraphicsEngine/interface/Texture.h" #include "../../../DiligentCore/Graphics/GraphicsEngine/interface/TextureView.h" #include "../../../DiligentCore/Common/interface/RefCntAutoPtr.h" @@ -40,15 +41,19 @@ public: struct InitInfo { - TEXTURE_FORMAT Fmt = TEX_FORMAT_UNKNOWN; - Uint32 Resolution = 0; - Uint32 NumCascades = 0; - ISampler* pComparisonSampler = nullptr; + TEXTURE_FORMAT Fmt = TEX_FORMAT_UNKNOWN; + Uint32 Resolution = 0; + Uint32 NumCascades = 0; + ISampler* pComparisonSampler = nullptr; + ISampler* pFilterableShadowMapSampler = nullptr; + int ShadowMode = 0; + bool Is32BitFilterableFmt = false; }; void Initialize(IRenderDevice* pDevice, const InitInfo& initInfo); ITextureView* GetSRV() { return m_pShadowMapSRV; } ITextureView* GetCascadeDSV(Uint32 Cascade){ return m_pShadowMapDSVs[Cascade]; } + ITextureView* GetFilterableSRV() { return m_pFilterableShadowMapSRV; } struct DistributeCascadeInfo { @@ -84,13 +89,29 @@ public: void DistributeCascades(const DistributeCascadeInfo& Info, ShadowMapAttribs& shadowMapAttribs); + void ConvertToFilterable(IDeviceContext* pCtx, const ShadowMapAttribs& ShadowAttribs); + const CascadeTransforms& GetCascadeTranform(Uint32 Cascade) const {return m_CascadeTransforms[Cascade];} private: + void InitializeConversionTechniques(TEXTURE_FORMAT FilterableShadowMapFmt); + void InitializeResourceBindings(); + + int m_ShadowMode = 0; RefCntAutoPtr m_pDevice; RefCntAutoPtr m_pShadowMapSRV; std::vector> m_pShadowMapDSVs; + RefCntAutoPtr m_pFilterableShadowMapSRV; + std::vector> m_pFilterableShadowMapRTVs; + RefCntAutoPtr m_pConversionAttribsBuffer; std::vector m_CascadeTransforms; + struct ShadowConversionTechnique + { + RefCntAutoPtr HorzPassPSO; + RefCntAutoPtr VertPassPSO; + RefCntAutoPtr SRB; + }; + ShadowConversionTechnique m_ConversionTech[SHADOW_MODE_EVSM4]; }; } -- cgit v1.2.3