diff options
author | Francisco Jerez <[email protected]> | 2013-09-15 23:04:28 -0700 |
---|---|---|
committer | Francisco Jerez <[email protected]> | 2013-10-21 10:47:03 -0700 |
commit | 6db102597a0978f53e19c59244cf6ef10babae26 (patch) | |
tree | ea411a1d1c10c00a63895df1b86e8aef0af8fb83 /src/gallium/state_trackers | |
parent | 7a9bbff7d641b82deae73e043fe1f02b7492993b (diff) |
clover: Simplify command_queue::flush().
Tested-by: Tom Stellard <[email protected]>
Diffstat (limited to 'src/gallium/state_trackers')
-rw-r--r-- | src/gallium/state_trackers/clover/core/queue.cpp | 17 | ||||
-rw-r--r-- | src/gallium/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 <algorithm> - #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 <deque> + #include "core/object.hpp" #include "core/context.hpp" #include "core/timestamp.hpp" @@ -69,7 +71,7 @@ namespace clover { pipe_context *pipe; typedef ref_ptr<hard_event> event_ptr; - std::vector<event_ptr> queued_events; + std::deque<event_ptr> queued_events; }; } |