From 425868f391e6130342ac74a7ee2f9cb54fb60bfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Thu, 8 Sep 2016 17:00:16 -0700 Subject: [PATCH] Cleanup. --- src/bgfx_p.h | 24 +++++++++++++++++++----- src/renderer_d3d11.cpp | 9 ++------- src/renderer_d3d12.cpp | 9 ++------- src/renderer_d3d9.cpp | 3 ++- src/renderer_gl.cpp | 1 + src/renderer_mtl.mm | 3 +++ 6 files changed, 29 insertions(+), 20 deletions(-) diff --git a/src/bgfx_p.h b/src/bgfx_p.h index 2d7d7abed..a15d8d382 100644 --- a/src/bgfx_p.h +++ b/src/bgfx_p.h @@ -1161,7 +1161,10 @@ namespace bgfx const UniformInfo& add(UniformHandle _handle, const char* _name, const void* _data) { - m_uniforms.insert(bx::hashMurmur2A(_name), _handle.idx); + BX_CHECK(isValid(_handle), "Uniform handle is invalid (name: %s)!", _name); + const uint32_t key = bx::hashMurmur2A(_name); + m_uniforms.removeByKey(key); + m_uniforms.insert(key, _handle.idx); UniformInfo& info = m_info[_handle.idx]; info.m_data = _data; @@ -1170,6 +1173,11 @@ namespace bgfx return info; } + void remove(UniformHandle _handle) + { + m_uniforms.removeByHandle(_handle.idx); + } + private: typedef bx::HandleHashMapT UniformHashMap; UniformHashMap m_uniforms; @@ -2981,7 +2989,9 @@ namespace bgfx pr.m_fsh = _fsh; pr.m_refCount = 1; - m_programHashMap.insert(uint32_t(_fsh.idx<<16)|_vsh.idx, handle.idx); + const uint32_t key = uint32_t(_fsh.idx<<16)|_vsh.idx; + bool ok = m_programHashMap.insert(key, handle.idx); + BX_CHECK(ok, "Program already exists (key: %x, handle: %3d)!", key, handle.idx); BX_UNUSED(ok); CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateProgram); cmdbuf.write(handle); @@ -3029,7 +3039,9 @@ namespace bgfx pr.m_fsh = fsh; pr.m_refCount = 1; - m_programHashMap.insert(uint32_t(_vsh.idx), handle.idx); + const uint32_t key = uint32_t(_vsh.idx); + bool ok = m_programHashMap.insert(key, handle.idx); + BX_CHECK(ok, "Program already exists (key: %x, handle: %3d)!", key, handle.idx); BX_UNUSED(ok); CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateProgram); cmdbuf.write(handle); @@ -3066,7 +3078,7 @@ namespace bgfx hash |= pr.m_fsh.idx << 16; } - m_programHashMap.removeByKey(hash); + m_programHashMap.removeByHandle(_handle.idx); } } @@ -3399,7 +3411,8 @@ namespace bgfx uniform.m_type = _type; uniform.m_num = _num; - m_uniformHashMap.insert(bx::hashMurmur2A(_name), handle.idx); + bool ok = m_uniformHashMap.insert(bx::hashMurmur2A(_name), handle.idx); + BX_CHECK(ok, "Uniform already exists (name: %s)!", _name); BX_UNUSED(ok); CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateUniform); cmdbuf.write(handle); @@ -3657,6 +3670,7 @@ namespace bgfx { BGFX_CHECK_HANDLE("setUniform", m_uniformHandle, _handle); UniformRef& uniform = m_uniformRef[_handle.idx]; + BX_CHECK(isValid(_handle) && 0 < uniform.m_refCount, "Setting invalid uniform (handle %3d)!", _handle.idx); BX_CHECK(_num == UINT16_MAX || uniform.m_num >= _num, "Truncated uniform update. %d (max: %d)", _num, uniform.m_num); if (BX_ENABLED(BGFX_CONFIG_DEBUG_UNIFORM) ) { diff --git a/src/renderer_d3d11.cpp b/src/renderer_d3d11.cpp index 6bab23dd0..605fc83ed 100644 --- a/src/renderer_d3d11.cpp +++ b/src/renderer_d3d11.cpp @@ -1231,12 +1231,6 @@ BX_PRAGMA_DIAGNOSTIC_POP(); } { - UniformHandle handle = BGFX_INVALID_HANDLE; - for (uint32_t ii = 0; ii < PredefinedUniform::Count; ++ii) - { - m_uniformReg.add(handle, getPredefinedUniformName(PredefinedUniform::Enum(ii) ), &m_predefinedUniforms[ii]); - } - g_caps.supported |= (0 | BGFX_CAPS_TEXTURE_3D | BGFX_CAPS_VERTEX_ATTRIB_HALF @@ -1934,6 +1928,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); { BX_FREE(g_allocator, m_uniforms[_handle.idx]); m_uniforms[_handle.idx] = NULL; + m_uniformReg.remove(_handle); } void saveScreenShot(const char* _filePath) BX_OVERRIDE @@ -4152,7 +4147,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); else if (0 == (BGFX_UNIFORM_SAMPLERBIT & type) ) { const UniformInfo* info = s_renderD3D11->m_uniformReg.find(name); - BX_CHECK(NULL != info, "User defined uniform '%s' is not found, it won't be set.", name); + BX_WARN(NULL != info, "User defined uniform '%s' is not found, it won't be set.", name); if (NULL != info) { diff --git a/src/renderer_d3d12.cpp b/src/renderer_d3d12.cpp index f66e735e3..d60a5039d 100644 --- a/src/renderer_d3d12.cpp +++ b/src/renderer_d3d12.cpp @@ -987,12 +987,6 @@ namespace bgfx { namespace d3d12 , (void**)&m_rootSignature ) ); - UniformHandle handle = BGFX_INVALID_HANDLE; - for (uint32_t ii = 0; ii < PredefinedUniform::Count; ++ii) - { - m_uniformReg.add(handle, getPredefinedUniformName(PredefinedUniform::Enum(ii) ), &m_predefinedUniforms[ii]); - } - g_caps.supported |= ( 0 | BGFX_CAPS_TEXTURE_3D | BGFX_CAPS_TEXTURE_COMPARE_ALL @@ -1555,6 +1549,7 @@ namespace bgfx { namespace d3d12 { BX_FREE(g_allocator, m_uniforms[_handle.idx]); m_uniforms[_handle.idx] = NULL; + m_uniformReg.remove(_handle); } void saveScreenShot(const char* _filePath) BX_OVERRIDE @@ -3879,7 +3874,7 @@ data.NumQualityLevels = 0; else if (0 == (BGFX_UNIFORM_SAMPLERBIT & type) ) { const UniformInfo* info = s_renderD3D12->m_uniformReg.find(name); - BX_CHECK(NULL != info, "User defined uniform '%s' is not found, it won't be set.", name); + BX_WARN(NULL != info, "User defined uniform '%s' is not found, it won't be set.", name); if (NULL != info) { diff --git a/src/renderer_d3d9.cpp b/src/renderer_d3d9.cpp index be388785a..cc3555c4b 100644 --- a/src/renderer_d3d9.cpp +++ b/src/renderer_d3d9.cpp @@ -1113,6 +1113,7 @@ namespace bgfx { namespace d3d9 { BX_FREE(g_allocator, m_uniforms[_handle.idx]); m_uniforms[_handle.idx] = NULL; + m_uniformReg.remove(_handle); } void saveScreenShot(const char* _filePath) BX_OVERRIDE @@ -2426,7 +2427,7 @@ namespace bgfx { namespace d3d9 else if (0 == (BGFX_UNIFORM_SAMPLERBIT & type) ) { const UniformInfo* info = s_renderD3D9->m_uniformReg.find(name); - BX_CHECK(NULL != info, "User defined uniform '%s' is not found, it won't be set.", name); + BX_WARN(NULL != info, "User defined uniform '%s' is not found, it won't be set.", name); if (NULL != info) { diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index 75e3a4ef3..b97ee35c9 100644 --- a/src/renderer_gl.cpp +++ b/src/renderer_gl.cpp @@ -2439,6 +2439,7 @@ namespace bgfx { namespace gl { BX_FREE(g_allocator, m_uniforms[_handle.idx]); m_uniforms[_handle.idx] = NULL; + m_uniformReg.remove(_handle); } void saveScreenShot(const char* _filePath) BX_OVERRIDE diff --git a/src/renderer_mtl.mm b/src/renderer_mtl.mm index d3721c906..d04ff0b0f 100644 --- a/src/renderer_mtl.mm +++ b/src/renderer_mtl.mm @@ -897,6 +897,7 @@ namespace bgfx { namespace mtl { BX_FREE(g_allocator, m_uniforms[_handle.idx]); m_uniforms[_handle.idx] = NULL; + m_uniformReg.remove(_handle); } //cmdPre @@ -2278,6 +2279,8 @@ namespace bgfx { namespace mtl else { const UniformInfo* info = s_renderMtl->m_uniformReg.find(name); + BX_WARN(NULL != info, "User defined uniform '%s' is not found, it won't be set.", name); + if (NULL != info) { if (NULL == constantBuffer)