From 6db102597a0978f53e19c59244cf6ef10babae26 Mon Sep 17 00:00:00 2001 From: Francisco Jerez Date: Sun, 15 Sep 2013 23:04:28 -0700 Subject: [PATCH] clover: Simplify command_queue::flush(). Tested-by: Tom Stellard --- .../state_trackers/clover/core/queue.cpp | 17 +++++++---------- .../state_trackers/clover/core/queue.hpp | 4 +++- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/gallium/state_trackers/clover/core/queue.cpp b/src/gallium/state_trackers/clover/core/queue.cpp index 084e3c3f734..3a8ccabb269 100644 --- a/src/gallium/state_trackers/clover/core/queue.cpp +++ b/src/gallium/state_trackers/clover/core/queue.cpp @@ -20,8 +20,6 @@ // OTHER DEALINGS IN THE SOFTWARE. // -#include - #include "core/queue.hpp" #include "core/event.hpp" #include "pipe/p_screen.h" @@ -47,16 +45,15 @@ command_queue::flush() { pipe_fence_handle *fence = NULL; if (!queued_events.empty()) { - // Find out which events have already been signalled. - auto first = queued_events.begin(); - auto last = std::find_if(queued_events.begin(), queued_events.end(), - [](event_ptr &ev) { return !ev->signalled(); }); - - // Flush and fence them. pipe->flush(pipe, &fence, 0); - std::for_each(first, last, [&](event_ptr &ev) { ev->fence(fence); }); + + while (!queued_events.empty() && + queued_events.front()->signalled()) { + queued_events.front()->fence(fence); + queued_events.pop_front(); + } + screen->fence_reference(screen, &fence, NULL); - queued_events.erase(first, last); } } diff --git a/src/gallium/state_trackers/clover/core/queue.hpp b/src/gallium/state_trackers/clover/core/queue.hpp index 671eaf7bddf..e3c4ceb7744 100644 --- a/src/gallium/state_trackers/clover/core/queue.hpp +++ b/src/gallium/state_trackers/clover/core/queue.hpp @@ -23,6 +23,8 @@ #ifndef CLOVER_CORE_QUEUE_HPP #define CLOVER_CORE_QUEUE_HPP +#include + #include "core/object.hpp" #include "core/context.hpp" #include "core/timestamp.hpp" @@ -69,7 +71,7 @@ namespace clover { pipe_context *pipe; typedef ref_ptr event_ptr; - std::vector queued_events; + std::deque queued_events; }; } -- 2.30.2