pipe_context::flush() can return a NULL fence if the queue is already empty, so we should not assume that an event with a NULL fence has the status of CL_QUEUED.
CC: 10.6 <mesa-sta...@lists.freedesktop.org> --- src/gallium/state_trackers/clover/core/event.cpp | 7 ++++--- src/gallium/state_trackers/clover/core/event.hpp | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/gallium/state_trackers/clover/core/event.cpp b/src/gallium/state_trackers/clover/core/event.cpp index d75b839..b973c78 100644 --- a/src/gallium/state_trackers/clover/core/event.cpp +++ b/src/gallium/state_trackers/clover/core/event.cpp @@ -118,7 +118,7 @@ event::wait() const { hard_event::hard_event(command_queue &q, cl_command_type command, const ref_vector<event> &deps, action action) : event(q.context(), deps, profile(q, action), [](event &ev){}), - _queue(q), _command(command), _fence(NULL) { + _queue(q), _command(command), _fence(NULL), _fenced(false) { if (q.profiling_enabled()) _time_queued = timestamp::current(q); @@ -138,7 +138,7 @@ hard_event::status() const { if (event::status() < 0) return event::status(); - else if (!_fence) + else if (!_fenced) return CL_QUEUED; else if (!screen->fence_finish(screen, _fence, 0)) @@ -167,7 +167,7 @@ hard_event::wait() const { if (status() == CL_QUEUED) queue()->flush(); - if (!_fence || + if (!_fenced || !screen->fence_finish(screen, _fence, PIPE_TIMEOUT_INFINITE)) throw error(CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST); } @@ -196,6 +196,7 @@ void hard_event::fence(pipe_fence_handle *fence) { pipe_screen *screen = queue()->device().pipe; screen->fence_reference(screen, &_fence, fence); + _fenced = true; } event::action diff --git a/src/gallium/state_trackers/clover/core/event.hpp b/src/gallium/state_trackers/clover/core/event.hpp index 6469e48..fac62d2 100644 --- a/src/gallium/state_trackers/clover/core/event.hpp +++ b/src/gallium/state_trackers/clover/core/event.hpp @@ -137,6 +137,7 @@ namespace clover { const intrusive_ref<command_queue> _queue; cl_command_type _command; pipe_fence_handle *_fence; + bool _fenced; lazy<cl_ulong> _time_queued, _time_submit, _time_start, _time_end; }; -- 2.0.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev