Cleanup.
This commit is contained in:
parent
fa6977f994
commit
25470bb418
116
src/renderer.h
116
src/renderer.h
@ -274,6 +274,122 @@ namespace bgfx
|
||||
uint16_t m_invViewProjCached;
|
||||
};
|
||||
|
||||
template<typename Ty>
|
||||
inline void release(Ty)
|
||||
{
|
||||
}
|
||||
|
||||
template <typename Ty, uint16_t MaxHandleT>
|
||||
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<uint64_t, uint16_t> HashMap;
|
||||
HashMap m_hashMap;
|
||||
bx::HandleAllocLruT<MaxHandleT> 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
|
||||
|
@ -211,128 +211,12 @@ namespace bgfx
|
||||
HashMap m_hashMap;
|
||||
};
|
||||
|
||||
template<typename Ty>
|
||||
inline void release(Ty)
|
||||
{
|
||||
}
|
||||
|
||||
template<>
|
||||
inline void release<IUnknown*>(IUnknown* _ptr)
|
||||
{
|
||||
DX_RELEASE(_ptr, 0);
|
||||
}
|
||||
|
||||
template <typename Ty, uint16_t MaxHandleT>
|
||||
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<uint64_t, uint16_t> HashMap;
|
||||
HashMap m_hashMap;
|
||||
bx::HandleAllocLruT<MaxHandleT> 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
|
||||
|
Loading…
x
Reference in New Issue
Block a user