From 25470bb4184d9832c9e269991349933d5400a838 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Mon, 7 Nov 2016 18:09:05 -0800 Subject: [PATCH] Cleanup. --- src/renderer.h | 116 +++++++++++++++++++++++++++++++++++++++++++++ src/renderer_d3d.h | 116 --------------------------------------------- 2 files changed, 116 insertions(+), 116 deletions(-) diff --git a/src/renderer.h b/src/renderer.h index 5f0ff9ea1..77406e92f 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -274,6 +274,122 @@ namespace bgfx uint16_t m_invViewProjCached; }; + template + inline void release(Ty) + { + } + + template + class StateCacheLru + { + public: + void add(uint64_t _key, Ty _value, uint16_t _parent) + { + uint16_t handle = m_alloc.alloc(); + if (UINT16_MAX == handle) + { + uint16_t back = m_alloc.getBack(); + invalidate(back); + handle = m_alloc.alloc(); + } + + BX_CHECK(UINT16_MAX != handle, "Failed to find handle."); + + Data& data = m_data[handle]; + data.m_hash = _key; + data.m_value = _value; + data.m_parent = _parent; + m_hashMap.insert(stl::make_pair(_key, handle) ); + } + + Ty* find(uint64_t _key) + { + HashMap::iterator it = m_hashMap.find(_key); + if (it != m_hashMap.end() ) + { + uint16_t handle = it->second; + m_alloc.touch(handle); + return &m_data[handle].m_value; + } + + return NULL; + } + + void invalidate(uint64_t _key) + { + HashMap::iterator it = m_hashMap.find(_key); + if (it != m_hashMap.end() ) + { + uint16_t handle = it->second; + m_alloc.free(handle); + m_hashMap.erase(it); + release(m_data[handle].m_value); + } + } + + void invalidate(uint16_t _handle) + { + if (m_alloc.isValid(_handle) ) + { + m_alloc.free(_handle); + Data& data = m_data[_handle]; + m_hashMap.erase(m_hashMap.find(data.m_hash) ); + release(data.m_value); + } + } + + void invalidateWithParent(uint16_t _parent) + { + for (uint16_t ii = 0; ii < m_alloc.getNumHandles();) + { + uint16_t handle = m_alloc.getHandleAt(ii); + Data& data = m_data[handle]; + + if (data.m_parent == _parent) + { + m_alloc.free(handle); + m_hashMap.erase(m_hashMap.find(data.m_hash) ); + release(data.m_value); + } + else + { + ++ii; + } + } + } + + void invalidate() + { + for (uint16_t ii = 0, num = m_alloc.getNumHandles(); ii < num; ++ii) + { + uint16_t handle = m_alloc.getHandleAt(ii); + Data& data = m_data[handle]; + release(data.m_value); + } + + m_hashMap.clear(); + m_alloc.reset(); + } + + uint32_t getCount() const + { + return uint32_t(m_hashMap.size() ); + } + + private: + typedef stl::unordered_map HashMap; + HashMap m_hashMap; + bx::HandleAllocLruT m_alloc; + struct Data + { + uint64_t m_hash; + Ty m_value; + uint16_t m_parent; + }; + + Data m_data[MaxHandleT]; + }; + } // namespace bgfx #endif // BGFX_RENDERER_H_HEADER_GUARD diff --git a/src/renderer_d3d.h b/src/renderer_d3d.h index f52fe6a87..1572669b9 100644 --- a/src/renderer_d3d.h +++ b/src/renderer_d3d.h @@ -211,128 +211,12 @@ namespace bgfx HashMap m_hashMap; }; - template - inline void release(Ty) - { - } - template<> inline void release(IUnknown* _ptr) { DX_RELEASE(_ptr, 0); } - template - class StateCacheLru - { - public: - void add(uint64_t _key, Ty _value, uint16_t _parent) - { - uint16_t handle = m_alloc.alloc(); - if (UINT16_MAX == handle) - { - uint16_t back = m_alloc.getBack(); - invalidate(back); - handle = m_alloc.alloc(); - } - - BX_CHECK(UINT16_MAX != handle, "Failed to find handle."); - - Data& data = m_data[handle]; - data.m_hash = _key; - data.m_value = _value; - data.m_parent = _parent; - m_hashMap.insert(stl::make_pair(_key, handle) ); - } - - Ty* find(uint64_t _key) - { - HashMap::iterator it = m_hashMap.find(_key); - if (it != m_hashMap.end() ) - { - uint16_t handle = it->second; - m_alloc.touch(handle); - return &m_data[handle].m_value; - } - - return NULL; - } - - void invalidate(uint64_t _key) - { - HashMap::iterator it = m_hashMap.find(_key); - if (it != m_hashMap.end() ) - { - uint16_t handle = it->second; - m_alloc.free(handle); - m_hashMap.erase(it); - release(m_data[handle].m_value); - } - } - - void invalidate(uint16_t _handle) - { - if (m_alloc.isValid(_handle) ) - { - m_alloc.free(_handle); - Data& data = m_data[_handle]; - m_hashMap.erase(m_hashMap.find(data.m_hash) ); - release(data.m_value); - } - } - - void invalidateWithParent(uint16_t _parent) - { - for (uint16_t ii = 0; ii < m_alloc.getNumHandles();) - { - uint16_t handle = m_alloc.getHandleAt(ii); - Data& data = m_data[handle]; - - if (data.m_parent == _parent) - { - m_alloc.free(handle); - m_hashMap.erase(m_hashMap.find(data.m_hash) ); - release(data.m_value); - } - else - { - ++ii; - } - } - } - - void invalidate() - { - for (uint16_t ii = 0, num = m_alloc.getNumHandles(); ii < num; ++ii) - { - uint16_t handle = m_alloc.getHandleAt(ii); - Data& data = m_data[handle]; - release(data.m_value); - } - - m_hashMap.clear(); - m_alloc.reset(); - } - - uint32_t getCount() const - { - return uint32_t(m_hashMap.size() ); - } - - private: - typedef stl::unordered_map HashMap; - HashMap m_hashMap; - bx::HandleAllocLruT m_alloc; - struct Data - { - uint64_t m_hash; - Ty m_value; - uint16_t m_parent; - }; - - Data m_data[MaxHandleT]; - }; - } // namespace bgfx #endif // BGFX_RENDERER_D3D_H_HEADER_GUARD