mirror of
https://github.com/bkaradzic/bgfx.git
synced 2026-02-21 06:13:07 +01:00
Added ability to read occlusion query result on main thread.
This commit is contained in:
@@ -2729,10 +2729,10 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
||||
return sampler;
|
||||
}
|
||||
|
||||
bool isVisible(OcclusionQueryHandle _handle, bool _visible)
|
||||
bool isVisible(Frame* _render, OcclusionQueryHandle _handle, bool _visible)
|
||||
{
|
||||
m_occlusionQuery.resolve();
|
||||
return _visible == m_occlusion[_handle.idx];
|
||||
m_occlusionQuery.resolve(_render);
|
||||
return _visible == 0 != _render->m_occlusion[_handle.idx];
|
||||
}
|
||||
|
||||
DXGI_FORMAT getBufferFormat()
|
||||
@@ -3334,7 +3334,6 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
||||
TextureD3D11 m_textures[BGFX_CONFIG_MAX_TEXTURES];
|
||||
VertexDecl m_vertexDecls[BGFX_CONFIG_MAX_VERTEX_DECLS];
|
||||
FrameBufferD3D11 m_frameBuffers[BGFX_CONFIG_MAX_FRAME_BUFFERS];
|
||||
bool m_occlusion[BGFX_CONFIG_MAX_OCCUSION_QUERIES];
|
||||
void* m_uniforms[BGFX_CONFIG_MAX_UNIFORMS];
|
||||
Matrix4 m_predefinedUniforms[PredefinedUniform::Count];
|
||||
UniformRegistry m_uniformReg;
|
||||
@@ -4577,11 +4576,11 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
||||
}
|
||||
}
|
||||
|
||||
void OcclusionQueryD3D11::begin(OcclusionQueryHandle _handle)
|
||||
void OcclusionQueryD3D11::begin(Frame* _render, OcclusionQueryHandle _handle)
|
||||
{
|
||||
while (0 == m_control.reserve(1) )
|
||||
{
|
||||
resolve(true);
|
||||
resolve(_render, true);
|
||||
}
|
||||
|
||||
ID3D11DeviceContext* deviceCtx = s_renderD3D11->m_deviceCtx;
|
||||
@@ -4598,7 +4597,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
||||
m_control.commit(1);
|
||||
}
|
||||
|
||||
void OcclusionQueryD3D11::resolve(bool _wait)
|
||||
void OcclusionQueryD3D11::resolve(Frame* _render, bool _wait)
|
||||
{
|
||||
ID3D11DeviceContext* deviceCtx = s_renderD3D11->m_deviceCtx;
|
||||
|
||||
@@ -4613,7 +4612,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
||||
break;
|
||||
}
|
||||
|
||||
s_renderD3D11->m_occlusion[query.m_handle.idx] = 0 < result;
|
||||
_render->m_occlusion[query.m_handle.idx] = 0 < result;
|
||||
m_control.consume(1);
|
||||
}
|
||||
}
|
||||
@@ -4687,7 +4686,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
||||
uint32_t statsNumIndices = 0;
|
||||
uint32_t statsKeyType[2] = {};
|
||||
|
||||
m_occlusionQuery.resolve();
|
||||
m_occlusionQuery.resolve(_render);
|
||||
|
||||
if (0 == (_render->m_debug&BGFX_DEBUG_IFH) )
|
||||
{
|
||||
@@ -5053,7 +5052,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
||||
const bool hasOcclusionQuery = 0 != (draw.m_stateFlags & BGFX_STATE_INTERNAL_OCCLUSION_QUERY);
|
||||
if (isValid(draw.m_occlusionQuery)
|
||||
&& !hasOcclusionQuery
|
||||
&& !isVisible(draw.m_occlusionQuery, 0 != (draw.m_submitFlags&BGFX_SUBMIT_INTERNAL_OCCLUSION_VISIBLE) ) )
|
||||
&& !isVisible(_render, draw.m_occlusionQuery, 0 != (draw.m_submitFlags&BGFX_SUBMIT_INTERNAL_OCCLUSION_VISIBLE) ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -5348,7 +5347,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
||||
|
||||
if (hasOcclusionQuery)
|
||||
{
|
||||
m_occlusionQuery.begin(draw.m_occlusionQuery);
|
||||
m_occlusionQuery.begin(_render, draw.m_occlusionQuery);
|
||||
}
|
||||
|
||||
if (isValid(draw.m_indirectBuffer) )
|
||||
|
||||
Reference in New Issue
Block a user