From 5a8e5b1a8f05c8b97b4f266ff5bf4338435c0b20 Mon Sep 17 00:00:00 2001 From: nelson-zhang Date: Wed, 9 Aug 2023 16:34:24 +0800 Subject: [PATCH] Fix d3d11 miss srv or uav for same resource. --- source/platforms/sl.chi/d3d11.cpp | 4 ++-- source/platforms/sl.chi/d3d11.h | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/source/platforms/sl.chi/d3d11.cpp b/source/platforms/sl.chi/d3d11.cpp index ce9d901..1739c13 100644 --- a/source/platforms/sl.chi/d3d11.cpp +++ b/source/platforms/sl.chi/d3d11.cpp @@ -931,7 +931,7 @@ ComputeStatus D3D11::getTextureDriverData(Resource res, ResourceDriverDataD3D11& ID3D11Resource* resource = (ID3D11Resource*)(res->native); - uint32_t hash = (mipOffset << 16) | mipLevels; + uint64_t hash = (((mipOffset << 16) | mipLevels) << 32 | kResourceHashTypeSrv); auto it = m_resourceData.find(resource); if (it == m_resourceData.end() || (*it).second.find(hash) == (*it).second.end()) @@ -974,7 +974,7 @@ ComputeStatus D3D11::getSurfaceDriverData(Resource res, ResourceDriverDataD3D11& ID3D11Resource* resource = (ID3D11Resource*)(res->native); - uint32_t hash = mipOffset << 16; + uint32_t hash = ((mipOffset << 48) | kResourceHashTypeUav); auto it = m_resourceData.find(resource); if (it == m_resourceData.end() || (*it).second.find(hash) == (*it).second.end()) diff --git a/source/platforms/sl.chi/d3d11.h b/source/platforms/sl.chi/d3d11.h index b1ea312..9b14de8 100644 --- a/source/platforms/sl.chi/d3d11.h +++ b/source/platforms/sl.chi/d3d11.h @@ -71,6 +71,9 @@ struct DispatchDataD3D11 class D3D11 : public Generic { + static constexpr uint32_t kResourceHashTypeSrv = 0; + static constexpr uint32_t kResourceHashTypeUav = 1; + struct PerfData { ID3D11Query *queryBegin{}; @@ -92,7 +95,7 @@ class D3D11 : public Generic ID3D11DeviceContext* m_immediateContext{}; UINT m_visibleNodeMask = 0; - std::map> m_resourceData; + std::map> m_resourceData; ID3D11SamplerState* m_samplers[eSamplerCount]; thread::ThreadContext m_dispatchContext;