This commit is contained in:
Branimir Karadžić 2016-09-08 17:00:16 -07:00
parent 813d145ac9
commit 425868f391
6 changed files with 29 additions and 20 deletions

View File

@ -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<BGFX_CONFIG_MAX_UNIFORMS*2> 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) )
{

View File

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

View File

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

View File

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

View File

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

View File

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