From cb534cdfa20788acb7158dca7e397e625f201805 Mon Sep 17 00:00:00 2001 From: Jakub Szuppe Date: Sun, 4 Jun 2017 13:52:25 +0200 Subject: [PATCH] Add clSetDefaultDeviceCommandQueue wrapper --- include/boost/compute/command_queue.hpp | 35 +++++++++++++++++++++++++ test/test_command_queue.cpp | 35 +++++++++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/include/boost/compute/command_queue.hpp b/include/boost/compute/command_queue.hpp index d9e81e0b..481fa1d8 100644 --- a/include/boost/compute/command_queue.hpp +++ b/include/boost/compute/command_queue.hpp @@ -253,6 +253,35 @@ public: return get_info(CL_QUEUE_PROPERTIES); } + #if defined(BOOST_COMPUTE_CL_VERSION_2_1) || defined(BOOST_COMPUTE_DOXYGEN_INVOKED) + /// Returns the current default device command queue for the underlying device. + /// + /// \opencl_version_warning{2,1} + command_queue get_default_device_queue() const + { + return command_queue(get_info(CL_QUEUE_DEVICE_DEFAULT)); + } + + /// Replaces the default device command queue for the underlying device + /// with this command queue. Command queue must have been created + /// with CL_QUEUE_ON_DEVICE flag. + /// + /// \see_opencl21_ref{clSetDefaultDeviceCommandQueue} + /// + /// \opencl_version_warning{2,1} + void set_as_default_device_queue() const + { + cl_int ret = clSetDefaultDeviceCommandQueue( + this->get_context().get(), + this->get_device().get(), + m_queue + ); + if(ret != CL_SUCCESS){ + BOOST_THROW_EXCEPTION(opencl_error(ret)); + } + } + #endif // BOOST_COMPUTE_CL_VERSION_2_1 + /// Enqueues a command to read data from \p buffer to host memory. /// /// \see_opencl_ref{clEnqueueReadBuffer} @@ -1886,6 +1915,12 @@ BOOST_COMPUTE_DETAIL_DEFINE_GET_INFO_SPECIALIZATIONS(command_queue, ((cl_command_queue_properties, CL_QUEUE_PROPERTIES)) ) +#ifdef BOOST_COMPUTE_CL_VERSION_2_1 +BOOST_COMPUTE_DETAIL_DEFINE_GET_INFO_SPECIALIZATIONS(command_queue, + ((cl_command_queue, CL_QUEUE_DEVICE_DEFAULT)) +) +#endif // BOOST_COMPUTE_CL_VERSION_2_1 + } // end compute namespace } // end boost namespace diff --git a/test/test_command_queue.cpp b/test/test_command_queue.cpp index 71d68c27..dc409795 100644 --- a/test/test_command_queue.cpp +++ b/test/test_command_queue.cpp @@ -314,4 +314,39 @@ BOOST_AUTO_TEST_CASE(enqueue_kernel_with_extents) } #endif // BOOST_COMPUTE_NO_HDR_INITIALIZER_LIST +#ifdef BOOST_COMPUTE_CL_VERSION_2_1 +BOOST_AUTO_TEST_CASE(get_default_device_queue) +{ + REQUIRES_OPENCL_VERSION(2, 1); + + boost::compute::command_queue default_device_queue( + context, device, + boost::compute::command_queue::on_device | + boost::compute::command_queue::on_device_default | + boost::compute::command_queue::enable_out_of_order_execution + ); + BOOST_CHECK_NO_THROW(queue.get_info()); + BOOST_CHECK_EQUAL( + queue.get_default_device_queue(), + default_device_queue + ); +} + +BOOST_AUTO_TEST_CASE(set_as_default_device_queue) +{ + REQUIRES_OPENCL_VERSION(2, 1); + + boost::compute::command_queue new_default_device_queue( + context, device, + boost::compute::command_queue::on_device | + boost::compute::command_queue::enable_out_of_order_execution + ); + new_default_device_queue.set_as_default_device_queue(); + BOOST_CHECK_EQUAL( + queue.get_default_device_queue(), + new_default_device_queue + ); +} +#endif + BOOST_AUTO_TEST_SUITE_END()