tu: Implement fallback linear staging blit for CopyImage
[mesa.git] / src / gallium / state_trackers / clover / core / queue.hpp
index 4a2d02251b1425e8612316c1396d3d65600fc449..bddb86c0e4c9c3acab1e2de94b3a5ccd5fbb89c0 100644 (file)
@@ -23,6 +23,9 @@
 #ifndef CLOVER_CORE_QUEUE_HPP
 #define CLOVER_CORE_QUEUE_HPP
 
+#include <deque>
+#include <mutex>
+
 #include "core/object.hpp"
 #include "core/context.hpp"
 #include "core/timestamp.hpp"
@@ -35,38 +38,40 @@ namespace clover {
 
    class command_queue : public ref_counter, public _cl_command_queue {
    public:
-      command_queue(context &ctx, device &dev,
+      command_queue(clover::context &ctx, clover::device &dev,
                     cl_command_queue_properties props);
-      command_queue(const command_queue &q) = delete;
       ~command_queue();
 
+      command_queue(const command_queue &q) = delete;
+      command_queue &
+      operator=(const command_queue &q) = delete;
+
       void flush();
 
-      cl_command_queue_properties props() const;
+      cl_command_queue_properties properties() const;
       bool profiling_enabled() const;
 
-      context &ctx;
-      device &dev;
+      const intrusive_ref<clover::context> context;
+      const intrusive_ref<clover::device> device;
 
       friend class resource;
       friend class root_resource;
       friend class mapping;
       friend class hard_event;
-      friend struct ::_cl_sampler;
-      friend struct ::_cl_kernel;
+      friend class sampler;
+      friend class kernel;
       friend class clover::timestamp::query;
       friend class clover::timestamp::current;
 
    private:
       /// Serialize a hardware event with respect to the previous ones,
       /// and push it to the pending list.
-      void sequence(hard_event *ev);
+      void sequence(hard_event &ev);
 
-      cl_command_queue_properties _props;
+      cl_command_queue_properties props;
       pipe_context *pipe;
-
-      typedef ref_ptr<hard_event> event_ptr;
-      std::vector<event_ptr> queued_events;
+      std::mutex queued_events_mutex;
+      std::deque<intrusive_ref<hard_event>> queued_events;
    };
 }