summaryrefslogtreecommitdiffstats
path: root/Components/interface/ShadowMapManager.h
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2019-07-18 02:53:29 +0000
committerEgor Yusov <egor.yusov@gmail.com>2019-07-18 02:53:29 +0000
commit3889adf35dc5473112e8bb8042a772d9b0289e0f (patch)
tree89c52a3180931984251022f1552d52b3a853e4de /Components/interface/ShadowMapManager.h
parentShadows: improved blending between cascades (diff)
downloadDiligentFX-3889adf35dc5473112e8bb8042a772d9b0289e0f.tar.gz
DiligentFX-3889adf35dc5473112e8bb8042a772d9b0289e0f.zip
Shadows: added VSM mode
Diffstat (limited to 'Components/interface/ShadowMapManager.h')
-rw-r--r--Components/interface/ShadowMapManager.h29
1 files changed, 25 insertions, 4 deletions
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 <vector>
#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<IRenderDevice> m_pDevice;
RefCntAutoPtr<ITextureView> m_pShadowMapSRV;
std::vector<RefCntAutoPtr<ITextureView>> m_pShadowMapDSVs;
+ RefCntAutoPtr<ITextureView> m_pFilterableShadowMapSRV;
+ std::vector<RefCntAutoPtr<ITextureView>> m_pFilterableShadowMapRTVs;
+ RefCntAutoPtr<IBuffer> m_pConversionAttribsBuffer;
std::vector<CascadeTransforms> m_CascadeTransforms;
+ struct ShadowConversionTechnique
+ {
+ RefCntAutoPtr<IPipelineState> HorzPassPSO;
+ RefCntAutoPtr<IPipelineState> VertPassPSO;
+ RefCntAutoPtr<IShaderResourceBinding> SRB;
+ };
+ ShadowConversionTechnique m_ConversionTech[SHADOW_MODE_EVSM4];
};
}