Branimir Karadžić il y a 8 ans
Parent
commit
a680845a98
2 fichiers modifiés avec 22 ajouts et 22 suppressions
  1. 4 6
      src/bgfx.cpp
  2. 18 16
      src/bgfx_p.h

+ 4 - 6
src/bgfx.cpp

@@ -901,7 +901,8 @@ namespace bgfx
 
 		++m_numSubmitted;
 
-		m_uniformEnd = m_uniformBuffer->getPos();
+		UniformBuffer* uniformBuffer = m_frame->m_uniformBuffer[m_uniformIdx];
+		m_uniformEnd = uniformBuffer->getPos();
 
 		m_key.m_program = kInvalidHandle == _program.idx
 			? 0
@@ -927,7 +928,6 @@ namespace bgfx
 		m_draw.m_uniformIdx   = m_uniformIdx;
 		m_draw.m_uniformBegin = m_uniformBegin;
 		m_draw.m_uniformEnd   = m_uniformEnd;
-		m_draw.m_stateFlags  |= m_stateFlags;
 
 		uint32_t numVertices = UINT32_MAX;
 		for (uint32_t idx = 0, streamMask = m_draw.m_streamMask, ntz = bx::uint32_cnttz(streamMask)
@@ -943,8 +943,6 @@ namespace bgfx
 
 		if (isValid(_occlusionQuery) )
 		{
-			BX_CHECK(!isValid(m_draw.m_occlusionQuery), "");
-
 			m_draw.m_stateFlags |= BGFX_STATE_INTERNAL_OCCLUSION_QUERY;
 			m_draw.m_occlusionQuery = _occlusionQuery;
 		}
@@ -957,7 +955,6 @@ namespace bgfx
 			m_draw.clear();
 			m_bind.clear();
 			m_uniformBegin = m_uniformEnd;
-			m_stateFlags = BGFX_STATE_NONE;
 		}
 	}
 
@@ -984,7 +981,8 @@ namespace bgfx
 
 		++m_numSubmitted;
 
-		m_uniformEnd = m_uniformBuffer->getPos();
+		UniformBuffer* uniformBuffer = m_frame->m_uniformBuffer[m_uniformIdx];
+		m_uniformEnd = uniformBuffer->getPos();
 
 		m_compute.m_startMatrix = m_draw.m_startMatrix;
 		m_compute.m_numMatrices = m_draw.m_numMatrices;

+ 18 - 16
src/bgfx_p.h

@@ -1207,14 +1207,17 @@ namespace bgfx
 			BX_FREE(g_allocator, _uniformBuffer);
 		}
 
-		static void update(UniformBuffer*& _uniformBuffer, uint32_t _treshold = 64<<10, uint32_t _grow = 1<<20)
+		static void update(UniformBuffer** _uniformBuffer, uint32_t _treshold = 64<<10, uint32_t _grow = 1<<20)
 		{
-			if (_treshold >= _uniformBuffer->m_size - _uniformBuffer->m_pos)
+			UniformBuffer* uniformBuffer = *_uniformBuffer;
+			if (_treshold >= uniformBuffer->m_size - uniformBuffer->m_pos)
 			{
-				uint32_t size = BX_ALIGN_16(bx::uint32_max(_uniformBuffer->m_size + _grow, sizeof(UniformBuffer) ) );
-				void*    data = BX_REALLOC(g_allocator, _uniformBuffer, size);
-				_uniformBuffer = reinterpret_cast<UniformBuffer*>(data);
-				_uniformBuffer->m_size = size;
+				uint32_t size = BX_ALIGN_16(bx::uint32_max(uniformBuffer->m_size + _grow, sizeof(UniformBuffer) ) );
+				void*    data = BX_REALLOC(g_allocator, uniformBuffer, size);
+				uniformBuffer = reinterpret_cast<UniformBuffer*>(data);
+				uniformBuffer->m_size = size;
+
+				*_uniformBuffer = uniformBuffer;
 			}
 		}
 
@@ -1989,8 +1992,8 @@ namespace bgfx
 			m_uniformBegin = 0;
 			m_uniformEnd   = 0;
 
-			m_uniformBuffer = m_frame->m_uniformBuffer[m_uniformIdx];
-			m_uniformBuffer->reset();
+			UniformBuffer* uniformBuffer = m_frame->m_uniformBuffer[m_uniformIdx];
+			uniformBuffer->reset();
 
 			m_numSubmitted = 0;
 			m_numDropped   = 0;
@@ -1998,7 +2001,8 @@ namespace bgfx
 
 		void end()
 		{
-			m_uniformBuffer->finish();
+			UniformBuffer* uniformBuffer = m_frame->m_uniformBuffer[m_uniformIdx];
+			uniformBuffer->finish();
 
 			m_cpuTimeEnd = bx::getHPCounter();
 
@@ -2015,7 +2019,8 @@ namespace bgfx
 
 		void setMarker(const char* _name)
 		{
-			m_uniformBuffer->writeMarker(_name);
+			UniformBuffer* uniformBuffer = m_frame->m_uniformBuffer[m_uniformIdx];
+			uniformBuffer->writeMarker(_name);
 		}
 
 		void setUniform(UniformType::Enum _type, UniformHandle _handle, const void* _value, uint16_t _num)
@@ -2030,8 +2035,9 @@ namespace bgfx
 				m_uniformSet.insert(_handle.idx);
 			}
 
-			UniformBuffer::update(m_uniformBuffer);
-			m_uniformBuffer->writeUniform(_type, _handle.idx, _value, _num);
+			UniformBuffer::update(&m_frame->m_uniformBuffer[m_uniformIdx]);
+			UniformBuffer* uniformBuffer = m_frame->m_uniformBuffer[m_uniformIdx];
+			uniformBuffer->writeUniform(_type, _handle.idx, _value, _num);
 		}
 
 		void setState(uint64_t _state, uint32_t _rgba)
@@ -2241,7 +2247,6 @@ namespace bgfx
 			m_draw.clear();
 			m_compute.clear();
 			m_bind.clear();
-			m_stateFlags = BGFX_STATE_NONE;
 		}
 
 		void submit(uint8_t _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, int32_t _depth, bool _preserveState);
@@ -2280,7 +2285,6 @@ namespace bgfx
 
 		uint32_t m_uniformBegin;
 		uint32_t m_uniformEnd;
-		uint64_t m_stateFlags;
 		uint32_t m_numVertices[BGFX_CONFIG_MAX_VERTEX_STREAMS];
 		uint8_t  m_uniformIdx;
 		bool     m_discard;
@@ -2289,8 +2293,6 @@ namespace bgfx
 		HandleSet m_uniformSet;
 		HandleSet m_occlusionQuerySet;
 
-		UniformBuffer* m_uniformBuffer;
-
 		int64_t m_cpuTimeBegin;
 		int64_t m_cpuTimeEnd;
 	};