Branimir Karadžić 9 лет назад
Родитель
Сommit
25470bb418
2 измененных файлов с 116 добавлено и 116 удалено
  1. 116 0
      src/renderer.h
  2. 0 116
      src/renderer_d3d.h

+ 116 - 0
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

+ 0 - 116
src/renderer_d3d.h

@@ -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