|
|
@@ -31,24 +31,22 @@ static void RunThread(VideoCore::RendererBase& renderer, Tegra::DmaPusher& dma_p
|
|
|
|
|
|
CommandDataContainer next;
|
|
|
while (state.is_running) {
|
|
|
- while (!state.queue.Empty()) {
|
|
|
- state.queue.Pop(next);
|
|
|
- if (const auto submit_list = std::get_if<SubmitListCommand>(&next.data)) {
|
|
|
- dma_pusher.Push(std::move(submit_list->entries));
|
|
|
- dma_pusher.DispatchCalls();
|
|
|
- } else if (const auto data = std::get_if<SwapBuffersCommand>(&next.data)) {
|
|
|
- renderer.SwapBuffers(data->framebuffer ? &*data->framebuffer : nullptr);
|
|
|
- } else if (const auto data = std::get_if<FlushRegionCommand>(&next.data)) {
|
|
|
- renderer.Rasterizer().FlushRegion(data->addr, data->size);
|
|
|
- } else if (const auto data = std::get_if<InvalidateRegionCommand>(&next.data)) {
|
|
|
- renderer.Rasterizer().InvalidateRegion(data->addr, data->size);
|
|
|
- } else if (std::holds_alternative<EndProcessingCommand>(next.data)) {
|
|
|
- return;
|
|
|
- } else {
|
|
|
- UNREACHABLE();
|
|
|
- }
|
|
|
- state.signaled_fence.store(next.fence);
|
|
|
+ next = state.queue.PopWait();
|
|
|
+ if (const auto submit_list = std::get_if<SubmitListCommand>(&next.data)) {
|
|
|
+ dma_pusher.Push(std::move(submit_list->entries));
|
|
|
+ dma_pusher.DispatchCalls();
|
|
|
+ } else if (const auto data = std::get_if<SwapBuffersCommand>(&next.data)) {
|
|
|
+ renderer.SwapBuffers(data->framebuffer ? &*data->framebuffer : nullptr);
|
|
|
+ } else if (const auto data = std::get_if<FlushRegionCommand>(&next.data)) {
|
|
|
+ renderer.Rasterizer().FlushRegion(data->addr, data->size);
|
|
|
+ } else if (const auto data = std::get_if<InvalidateRegionCommand>(&next.data)) {
|
|
|
+ renderer.Rasterizer().InvalidateRegion(data->addr, data->size);
|
|
|
+ } else if (std::holds_alternative<EndProcessingCommand>(next.data)) {
|
|
|
+ return;
|
|
|
+ } else {
|
|
|
+ UNREACHABLE();
|
|
|
}
|
|
|
+ state.signaled_fence.store(next.fence);
|
|
|
}
|
|
|
}
|
|
|
|