Implement Counter Queue and Partial Host Conditional Rendering (#1167)

* Implementation of query queue and host conditional rendering

* Resolve some comments.

* Use overloads instead of passing object.

* Wake the consumer threads when incrementing syncpoints.

Also, do a busy loop when awaiting the counter for a blocking flush, rather than potentially sleeping the thread.

* Ensure there's a command between begin and end query.
This commit is contained in:
riperiperi 2020-05-04 03:24:59 +01:00 committed by GitHub
parent 651a07c6c2
commit cd48576f58
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 724 additions and 136 deletions

View file

@ -35,17 +35,22 @@ namespace Ryujinx.Graphics.Gpu.Engine
/// <param name="argument">Method call argument</param>
private void DrawEnd(GpuState state, int argument)
{
bool renderEnable = GetRenderEnable(state);
ConditionalRenderEnabled renderEnable = GetRenderEnable(state);
if (!renderEnable || _instancedDrawPending)
if (renderEnable == ConditionalRenderEnabled.False || _instancedDrawPending)
{
if (!renderEnable)
if (renderEnable == ConditionalRenderEnabled.False)
{
PerformDeferredDraws();
}
_drawIndexed = false;
if (renderEnable == ConditionalRenderEnabled.Host)
{
_context.Renderer.Pipeline.EndHostConditionalRendering();
}
return;
}
@ -72,6 +77,11 @@ namespace Ryujinx.Graphics.Gpu.Engine
_drawIndexed = false;
if (renderEnable == ConditionalRenderEnabled.Host)
{
_context.Renderer.Pipeline.EndHostConditionalRendering();
}
return;
}
@ -100,6 +110,11 @@ namespace Ryujinx.Graphics.Gpu.Engine
drawState.First,
firstInstance);
}
if (renderEnable == ConditionalRenderEnabled.Host)
{
_context.Renderer.Pipeline.EndHostConditionalRendering();
}
}
/// <summary>