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_DEVICE_HPP__ 24c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#define __CORE_DEVICE_HPP__ 25c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 26c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#include <set> 27c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#include <vector> 28c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 29c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#include "core/base.hpp" 30c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#include "core/format.hpp" 31c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#include "pipe-loader/pipe_loader.h" 32c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 33c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jereznamespace clover { 34c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez typedef struct _cl_device_id device; 35c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez class root_resource; 36c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez class hard_event; 37c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} 38c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 39c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerezstruct _cl_device_id { 40c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerezpublic: 41c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez _cl_device_id(pipe_loader_device *ldev); 42c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez _cl_device_id(_cl_device_id &&dev); 43c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez _cl_device_id(const _cl_device_id &dev) = delete; 44c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez ~_cl_device_id(); 45c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 46c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez cl_device_type type() const; 47c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez cl_uint vendor_id() const; 48c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez size_t max_images_read() const; 49c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez size_t max_images_write() const; 50c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez cl_uint max_image_levels_2d() const; 51c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez cl_uint max_image_levels_3d() const; 52c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez cl_uint max_samplers() const; 53c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez cl_ulong max_mem_global() const; 54c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez cl_ulong max_mem_local() const; 55c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez cl_ulong max_mem_input() const; 56c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez cl_ulong max_const_buffer_size() const; 57c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez cl_uint max_const_buffers() const; 585c9bccc97e9fb0776f2ca5bb57e55116a7efb43bChristoph Bumiller size_t max_threads_per_block() const; 59c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 60c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez std::vector<size_t> max_block_size() const; 61c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez std::string device_name() const; 62c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez std::string vendor_name() const; 63613323b2564babc1ecaac25a6cfd786b8c839315Tom Stellard enum pipe_shader_ir ir_format() const; 64c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez std::string ir_target() const; 65c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 66c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez friend struct _cl_command_queue; 67c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez friend class clover::root_resource; 68c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez friend class clover::hard_event; 69c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez friend std::set<cl_image_format> 70c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez clover::supported_formats(cl_context, cl_mem_object_type); 71c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 72c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerezprivate: 73c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez pipe_screen *pipe; 74c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez pipe_loader_device *ldev; 75c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez}; 76c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 77c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jereznamespace clover { 78c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez /// 79c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez /// Container of all the compute devices that are available in the 80c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez /// system. 81c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez /// 82c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez class device_registry { 83c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez public: 84c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez typedef std::vector<device>::iterator iterator; 85c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 86c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez device_registry(); 87c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 88c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez iterator begin() { 89c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return devs.begin(); 90c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez } 91c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 92c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez iterator end() { 93c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return devs.end(); 94c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez } 95c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 96c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez device &front() { 97c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return devs.front(); 98c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez } 99c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 100c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez device &back() { 101c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return devs.back(); 102c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez } 103c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 104c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez protected: 105c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez std::vector<device> devs; 106c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez }; 107c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} 108c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 109c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#endif 110