1c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 2c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// Copyright 2012 Francisco Jerez 3c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 4c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// Permission is hereby granted, free of charge, to any person obtaining a 5c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// copy of this software and associated documentation files (the "Software"), 6c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// to deal in the Software without restriction, including without limitation 7c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// the rights to use, copy, modify, merge, publish, distribute, sublicense, 8c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// and/or sell copies of the Software, and to permit persons to whom the 9c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// Software is furnished to do so, subject to the following conditions: 10c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 11c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// The above copyright notice and this permission notice shall be included in 12c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// all copies or substantial portions of the Software. 13c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 14c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 18c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 19c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// SOFTWARE. 21c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 22c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 23c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#ifndef __CORE_QUEUE_HPP__ 24c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#define __CORE_QUEUE_HPP__ 25c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 26c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#include "core/base.hpp" 27c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#include "core/context.hpp" 28c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#include "pipe/p_context.h" 29c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 30c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jereznamespace clover { 31c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez typedef struct _cl_command_queue command_queue; 32c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez class resource; 33c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez class mapping; 34c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez class hard_event; 35c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} 36c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 37c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerezstruct _cl_command_queue : public clover::ref_counter { 38c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerezpublic: 39c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez _cl_command_queue(clover::context &ctx, clover::device &dev, 40c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez cl_command_queue_properties props); 41c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez _cl_command_queue(const _cl_command_queue &q) = delete; 42c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez ~_cl_command_queue(); 43c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 44c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez void flush(); 45c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 46c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez cl_command_queue_properties props() const { 47c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return __props; 48c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez } 49c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 50c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez clover::context &ctx; 51c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez clover::device &dev; 52c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 53c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez friend class clover::resource; 5460e7b08101295099618a3c1f879440b257265253Francisco Jerez friend class clover::root_resource; 55c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez friend class clover::mapping; 56c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez friend class clover::hard_event; 57c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez friend struct _cl_sampler; 58c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez friend struct _cl_kernel; 59c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 60c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerezprivate: 61c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez /// Serialize a hardware event with respect to the previous ones, 62c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez /// and push it to the pending list. 63c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez void sequence(clover::hard_event *ev); 64c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 65c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez cl_command_queue_properties __props; 66c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez pipe_context *pipe; 67c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 68c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez typedef clover::ref_ptr<clover::hard_event> event_ptr; 69c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez std::vector<event_ptr> queued_events; 70c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez}; 71c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 72c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#endif 73