From: Francisco Jerez Date: Mon, 16 Sep 2013 06:04:28 +0000 (-0700) Subject: clover: Simplify command_queue::flush(). X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6db102597a0978f53e19c59244cf6ef10babae26;p=mesa.git clover: Simplify command_queue::flush(). Tested-by: Tom Stellard --- 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; }; }