From 15c19a4078b29a3c7a4d39a8f3f65b9864d79a6e Mon Sep 17 00:00:00 2001 From: Oleksii Date: Tue, 19 May 2020 16:49:37 +0300 Subject: [PATCH 1/7] Fix client crash while reading depth texture More about it in this post https://forums.awsgametech.com/t/ly-1-23-crash-fixed-when-pdepthtex-released-while-used-by-sun-shadow-cascade/8646 --- dev/Code/CryEngine/RenderDll/Common/Shadow_Renderer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/Code/CryEngine/RenderDll/Common/Shadow_Renderer.h b/dev/Code/CryEngine/RenderDll/Common/Shadow_Renderer.h index d742c79dba..abe244c906 100644 --- a/dev/Code/CryEngine/RenderDll/Common/Shadow_Renderer.h +++ b/dev/Code/CryEngine/RenderDll/Common/Shadow_Renderer.h @@ -78,7 +78,7 @@ struct ShadowMapFrustum bool bUseShadowsPool; struct ShadowMapFrustum* pPrevFrustum = nullptr; struct ShadowMapFrustum* pFrustumOwner = nullptr; - class CTexture* pDepthTex; + _smart_ptr pDepthTex; //3d engine parameters float fFOV; From bf8546ed96061ed694585a8afe628f67f2091f1f Mon Sep 17 00:00:00 2001 From: Oleksii Date: Tue, 19 May 2020 17:09:17 +0300 Subject: [PATCH 2/7] Update D3D_SVO.cpp --- dev/Code/CryEngine/RenderDll/XRenderD3D9/D3D_SVO.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3D_SVO.cpp b/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3D_SVO.cpp index e4ee59e31e..ecc76f95e4 100644 --- a/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3D_SVO.cpp +++ b/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3D_SVO.cpp @@ -1550,7 +1550,7 @@ void CSvoRenderer::SetupRsmSun(const EHWShaderClass eShClass) } else { - firstFrustum.pDepthTex->Apply(12, m_nTexStatePoint, EFTT_UNKNOWN, -1, -1, eShClass); + static_cast(firstFrustum.pDepthTex.get())->Apply(12, m_nTexStatePoint, EFTT_UNKNOWN, -1, -1, eShClass); GetRsmColorMap(firstFrustum)->Apply(13, m_nTexStatePoint, EFTT_UNKNOWN, -1, -1, eShClass); GetRsmNormlMap(firstFrustum)->Apply(9, m_nTexStatePoint, EFTT_UNKNOWN, -1, -1, eShClass); } From 49533b38266ff5708c620ba5ae5c4423ab0b2ef8 Mon Sep 17 00:00:00 2001 From: Oleksii Date: Tue, 19 May 2020 17:12:07 +0300 Subject: [PATCH 3/7] Update D3DDeferredRender.cpp --- dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DDeferredRender.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DDeferredRender.cpp b/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DDeferredRender.cpp index 78f242647b..90813003d7 100644 --- a/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DDeferredRender.cpp +++ b/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DDeferredRender.cpp @@ -1387,7 +1387,7 @@ void CD3D9Renderer::FX_DeferredShadowMaskGen(const TArray& shadowPoolLig TS.m_bSRGBLookup = false; TS.SetComparisonFilter(true); - CTexture* pShadowMap = firstFrustum.bUseShadowsPool ? CTexture::s_ptexRT_ShadowPool : firstFrustum.pDepthTex; + CTexture* pShadowMap = firstFrustum.bUseShadowsPool ? CTexture::s_ptexRT_ShadowPool : static_cast(firstFrustum.pDepthTex.get()); pShadowMap->Apply(1, CTexture::GetTexState(TS), EFTT_UNKNOWN, 6); SD3DPostEffectsUtils::SetTexture(CTextureManager::Instance()->GetDefaultTexture("ShadowJitterMap"), 7, FILTER_POINT, 0); From 2ea82526029849011f5acfbe6f6906ff6f37dad7 Mon Sep 17 00:00:00 2001 From: Oleksii Date: Tue, 19 May 2020 17:13:53 +0300 Subject: [PATCH 4/7] Update D3DDeferredShading.cpp --- dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DDeferredShading.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DDeferredShading.cpp b/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DDeferredShading.cpp index a7ea4e24c9..7770009e23 100644 --- a/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DDeferredShading.cpp +++ b/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DDeferredShading.cpp @@ -4577,7 +4577,7 @@ bool CDeferredShading::ShadowLightPasses(const SRenderLight& light) } else { - SD3DPostEffectsUtils::SetTexture(firstFrustum.pDepthTex, 3, FILTER_POINT, 0); + SD3DPostEffectsUtils::SetTexture(static_cast(firstFrustum.pDepthTex.get()), 3, FILTER_POINT, 0); } SD3DPostEffectsUtils::SetTexture(CTextureManager::Instance()->GetDefaultTexture("ShadowJitterMap"), 7, FILTER_POINT, 0); From 1897bb6ca7c8301e1d4a4cb5621bc384d6c274bf Mon Sep 17 00:00:00 2001 From: Oleksii Date: Tue, 19 May 2020 17:15:09 +0300 Subject: [PATCH 5/7] Update D3DShadows.cpp --- dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DShadows.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DShadows.cpp b/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DShadows.cpp index 35eb14f974..665b1694ff 100644 --- a/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DShadows.cpp +++ b/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DShadows.cpp @@ -989,11 +989,11 @@ bool CD3D9Renderer::PrepareDepthMap(ShadowMapFrustum* lof, int nLightFrustumID, depthTarget.nHeight = lof->nTextureHeight; depthTarget.nFrameAccess = -1; depthTarget.bBusy = false; - depthTarget.pTex = lof->pDepthTex; - depthTarget.pTarget = lof->pDepthTex->GetDevTexture()->Get2DTexture(); + depthTarget.pTex = static_cast(lof->pDepthTex.get()); + depthTarget.pTarget = depthTarget.pTex->GetDevTexture()->Get2DTexture(); depthTarget.pSurf = lof->bOmniDirectionalShadow && !(lof->bUnwrapedOmniDirectional) - ? static_cast(lof->pDepthTex->GetDeviceDepthStencilSurf(sideIndex, 1)) - : static_cast(lof->pDepthTex->GetDeviceDepthStencilSurf()); + ? static_cast(depthTarget.pTex->GetDeviceDepthStencilSurf(sideIndex, 1)) + : static_cast(depthTarget.pTex->GetDeviceDepthStencilSurf()); CCamera tmpCamera; if (!lof->bOmniDirectionalShadow) From a54be72eb9ae92797802ec5f9baede8407ae1495 Mon Sep 17 00:00:00 2001 From: Oleksii Date: Tue, 19 May 2020 17:15:46 +0300 Subject: [PATCH 6/7] Update D3DShadows.cpp --- dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DShadows.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DShadows.cpp b/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DShadows.cpp index 665b1694ff..61ec35ba65 100644 --- a/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DShadows.cpp +++ b/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DShadows.cpp @@ -1421,7 +1421,7 @@ void CD3D9Renderer::ConfigShadowTexgen(int Num, ShadowMapFrustum* pFr, int nFrus else if (pFr->pDepthTex != NULL) { - nID = pFr->pDepthTex->GetID(); + nID = static_cast(pFr->pDepthTex.get())->GetID(); } m_RP.m_ShadowCustomTexBind[Num * 2 + 0] = nID; From f8ef8898729ffca06605cbbf4ef303711e412069 Mon Sep 17 00:00:00 2001 From: Oleksii Date: Tue, 19 May 2020 17:17:00 +0300 Subject: [PATCH 7/7] Update D3DShadows.cpp --- dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DShadows.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DShadows.cpp b/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DShadows.cpp index 61ec35ba65..409a1190ee 100644 --- a/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DShadows.cpp +++ b/dev/Code/CryEngine/RenderDll/XRenderD3D9/D3DShadows.cpp @@ -1920,9 +1920,9 @@ void CD3D9Renderer::FX_MergeShadowMaps(ShadowMapFrustum* pDst, const ShadowMapFr depthSurface.nHeight = pDst->nTextureHeight; depthSurface.nFrameAccess = -1; depthSurface.bBusy = false; - depthSurface.pTex = pDst->pDepthTex; - depthSurface.pSurf = pDst->pDepthTex->GetDeviceDepthStencilSurf(); - depthSurface.pTarget = pDst->pDepthTex->GetDevTexture()->Get2DTexture(); + depthSurface.pTex = static_cast(pDst->pDepthTex.get()); + depthSurface.pSurf = depthSurface.pTex->GetDeviceDepthStencilSurf(); + depthSurface.pTarget = depthSurface.pTex->GetDevTexture()->Get2DTexture(); if (bEmptyCachedFrustum) { @@ -1955,7 +1955,7 @@ void CD3D9Renderer::FX_MergeShadowMaps(ShadowMapFrustum* pDst, const ShadowMapFr static CCryNameR paramReprojMatSrcToDst("g_mReprojSrcToDst"); CShaderMan::s_ShaderShadowMaskGen->FXSetPSFloat(paramReprojMatSrcToDst, (Vec4*) mReprojSrcToDst.GetData(), 4); - pSrc->pDepthTex->Apply(0, CTexture::GetTexState(STexState(FILTER_POINT, true))); + pSrc->pDepthTex->ApplyTexture(0, CTexture::GetTexState(STexState(FILTER_POINT, true))); SPostEffectsUtils::DrawFullScreenTri(depthSurface.nWidth, depthSurface.nHeight); SPostEffectsUtils::ShEndPass();