Francisco Jerez | c6db1b3 | 2012-04-20 16:56:19 +0200 | [diff] [blame] | 1 | // |
| 2 | // Copyright 2012 Francisco Jerez |
| 3 | // |
| 4 | // Permission is hereby granted, free of charge, to any person obtaining a |
| 5 | // copy of this software and associated documentation files (the "Software"), |
| 6 | // to deal in the Software without restriction, including without limitation |
| 7 | // the rights to use, copy, modify, merge, publish, distribute, sublicense, |
| 8 | // and/or sell copies of the Software, and to permit persons to whom the |
| 9 | // Software is furnished to do so, subject to the following conditions: |
| 10 | // |
| 11 | // The above copyright notice and this permission notice shall be included in |
| 12 | // all copies or substantial portions of the Software. |
| 13 | // |
| 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
Kenneth Graunke | f0cb66b | 2013-04-21 13:52:08 -0700 | [diff] [blame] | 17 | // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR |
| 18 | // OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |
| 19 | // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
| 20 | // OTHER DEALINGS IN THE SOFTWARE. |
Francisco Jerez | c6db1b3 | 2012-04-20 16:56:19 +0200 | [diff] [blame] | 21 | // |
| 22 | |
Francisco Jerez | 099d281 | 2013-09-15 15:29:34 -0700 | [diff] [blame] | 23 | #ifndef CLOVER_CORE_DEVICE_HPP |
| 24 | #define CLOVER_CORE_DEVICE_HPP |
Francisco Jerez | c6db1b3 | 2012-04-20 16:56:19 +0200 | [diff] [blame] | 25 | |
| 26 | #include <set> |
| 27 | #include <vector> |
| 28 | |
Francisco Jerez | bff60c8 | 2013-10-06 13:51:01 -0700 | [diff] [blame] | 29 | #include "core/object.hpp" |
Francisco Jerez | c6db1b3 | 2012-04-20 16:56:19 +0200 | [diff] [blame] | 30 | #include "core/format.hpp" |
Dave Airlie | f33b417 | 2019-04-10 10:24:46 +1000 | [diff] [blame] | 31 | #include "core/module.hpp" |
| 32 | #include "util/lazy.hpp" |
Francisco Jerez | c6db1b3 | 2012-04-20 16:56:19 +0200 | [diff] [blame] | 33 | #include "pipe-loader/pipe_loader.h" |
| 34 | |
Dave Airlie | f33b417 | 2019-04-10 10:24:46 +1000 | [diff] [blame] | 35 | struct nir_shader; |
| 36 | struct disk_cache; |
| 37 | |
Francisco Jerez | c6db1b3 | 2012-04-20 16:56:19 +0200 | [diff] [blame] | 38 | namespace clover { |
Francisco Jerez | c9e009b | 2013-09-15 20:06:57 -0700 | [diff] [blame] | 39 | class platform; |
Francisco Jerez | c6db1b3 | 2012-04-20 16:56:19 +0200 | [diff] [blame] | 40 | class root_resource; |
| 41 | class hard_event; |
Francisco Jerez | c9e009b | 2013-09-15 20:06:57 -0700 | [diff] [blame] | 42 | |
Francisco Jerez | c6e7a0d | 2013-09-16 21:44:19 -0700 | [diff] [blame] | 43 | class device : public ref_counter, public _cl_device_id { |
Francisco Jerez | c9e009b | 2013-09-15 20:06:57 -0700 | [diff] [blame] | 44 | public: |
| 45 | device(clover::platform &platform, pipe_loader_device *ldev); |
Francisco Jerez | c9e009b | 2013-09-15 20:06:57 -0700 | [diff] [blame] | 46 | ~device(); |
| 47 | |
Francisco Jerez | 5226eac | 2013-09-16 21:44:36 -0700 | [diff] [blame] | 48 | device(const device &dev) = delete; |
| 49 | device & |
| 50 | operator=(const device &dev) = delete; |
Francisco Jerez | c9e009b | 2013-09-15 20:06:57 -0700 | [diff] [blame] | 51 | |
Francisco Jerez | 369419f | 2013-09-16 21:11:16 -0700 | [diff] [blame] | 52 | bool |
| 53 | operator==(const device &dev) const; |
| 54 | |
Francisco Jerez | c9e009b | 2013-09-15 20:06:57 -0700 | [diff] [blame] | 55 | cl_device_type type() const; |
| 56 | cl_uint vendor_id() const; |
| 57 | size_t max_images_read() const; |
| 58 | size_t max_images_write() const; |
Serge Martin | 05fcc73 | 2016-10-01 18:51:11 +0200 | [diff] [blame] | 59 | size_t max_image_buffer_size() const; |
Francisco Jerez | c9e009b | 2013-09-15 20:06:57 -0700 | [diff] [blame] | 60 | cl_uint max_image_levels_2d() const; |
| 61 | cl_uint max_image_levels_3d() const; |
Serge Martin | 05fcc73 | 2016-10-01 18:51:11 +0200 | [diff] [blame] | 62 | size_t max_image_array_number() const; |
Francisco Jerez | c9e009b | 2013-09-15 20:06:57 -0700 | [diff] [blame] | 63 | cl_uint max_samplers() const; |
| 64 | cl_ulong max_mem_global() const; |
| 65 | cl_ulong max_mem_local() const; |
| 66 | cl_ulong max_mem_input() const; |
| 67 | cl_ulong max_const_buffer_size() const; |
| 68 | cl_uint max_const_buffers() const; |
| 69 | size_t max_threads_per_block() const; |
| 70 | cl_ulong max_mem_alloc_size() const; |
Tom Stellard | ca848e8 | 2014-04-18 16:28:41 +0200 | [diff] [blame] | 71 | cl_uint max_clock_frequency() const; |
Bruno Jiménez | 2a0dffa | 2014-05-30 17:31:12 +0200 | [diff] [blame] | 72 | cl_uint max_compute_units() const; |
Tom Stellard | 0ec8587 | 2014-07-23 20:37:08 -0400 | [diff] [blame] | 73 | bool image_support() const; |
Tom Stellard | c97e902 | 2014-07-02 15:42:43 -0400 | [diff] [blame] | 74 | bool has_doubles() const; |
Jan Vesely | fdf0f1d | 2017-09-01 17:48:39 -0400 | [diff] [blame] | 75 | bool has_halves() const; |
Jan Vesely | f67ceef | 2017-09-20 16:06:10 -0400 | [diff] [blame] | 76 | bool has_int64_atomics() const; |
Aaron Watry | d364ab4 | 2017-06-02 21:51:43 -0500 | [diff] [blame] | 77 | bool has_unified_memory() const; |
Serge Martin | dad042b | 2020-05-03 13:56:15 +0200 | [diff] [blame] | 78 | size_t mem_base_addr_align() const; |
Karol Herbst | 035e882 | 2018-05-21 12:19:42 +0200 | [diff] [blame] | 79 | cl_device_svm_capabilities svm_support() const; |
Karol Herbst | c0f7f83 | 2020-05-05 15:09:50 +0200 | [diff] [blame] | 80 | bool allows_user_pointers() const; |
Francisco Jerez | c9e009b | 2013-09-15 20:06:57 -0700 | [diff] [blame] | 81 | |
| 82 | std::vector<size_t> max_block_size() const; |
Grigori Goronzy | d15b32e | 2015-05-28 13:01:51 +0200 | [diff] [blame] | 83 | cl_uint subgroup_size() const; |
Jan Vesely | 083746b | 2016-08-28 04:08:15 -0400 | [diff] [blame] | 84 | cl_uint address_bits() const; |
Francisco Jerez | c9e009b | 2013-09-15 20:06:57 -0700 | [diff] [blame] | 85 | std::string device_name() const; |
| 86 | std::string vendor_name() const; |
Aaron Watry | 293b3e0 | 2017-07-21 21:17:50 -0500 | [diff] [blame] | 87 | std::string device_version() const; |
| 88 | std::string device_clc_version() const; |
Francisco Jerez | c9e009b | 2013-09-15 20:06:57 -0700 | [diff] [blame] | 89 | enum pipe_shader_ir ir_format() const; |
| 90 | std::string ir_target() const; |
| 91 | enum pipe_endian endianness() const; |
Pierre Moreau | 505ec3a | 2017-10-03 21:07:45 +0200 | [diff] [blame] | 92 | bool supports_ir(enum pipe_shader_ir ir) const; |
Pierre Moreau | b033620 | 2018-01-21 18:49:00 +0100 | [diff] [blame] | 93 | std::string supported_extensions() const; |
Francisco Jerez | c9e009b | 2013-09-15 20:06:57 -0700 | [diff] [blame] | 94 | |
Francisco Jerez | 9968d9d | 2013-10-01 11:57:32 -0700 | [diff] [blame] | 95 | friend class command_queue; |
Francisco Jerez | c9e009b | 2013-09-15 20:06:57 -0700 | [diff] [blame] | 96 | friend class root_resource; |
| 97 | friend class hard_event; |
| 98 | friend std::set<cl_image_format> |
Francisco Jerez | 9d06fb8 | 2013-09-15 20:50:30 -0700 | [diff] [blame] | 99 | supported_formats(const context &, cl_mem_object_type); |
Karol Herbst | deb04ad | 2019-08-06 20:35:48 +0200 | [diff] [blame] | 100 | const void *get_compiler_options(enum pipe_shader_ir ir) const; |
Francisco Jerez | c9e009b | 2013-09-15 20:06:57 -0700 | [diff] [blame] | 101 | |
| 102 | clover::platform &platform; |
| 103 | |
Karol Herbst | a218658 | 2019-05-22 22:34:09 +0200 | [diff] [blame] | 104 | inline bool |
| 105 | has_system_svm() const { |
| 106 | return svm_support() & CL_DEVICE_SVM_FINE_GRAIN_SYSTEM; |
| 107 | } |
| 108 | |
Dave Airlie | f33b417 | 2019-04-10 10:24:46 +1000 | [diff] [blame] | 109 | lazy<std::shared_ptr<nir_shader>> clc_nir; |
| 110 | disk_cache *clc_cache; |
Francisco Jerez | c9e009b | 2013-09-15 20:06:57 -0700 | [diff] [blame] | 111 | private: |
| 112 | pipe_screen *pipe; |
| 113 | pipe_loader_device *ldev; |
| 114 | }; |
Francisco Jerez | c6db1b3 | 2012-04-20 16:56:19 +0200 | [diff] [blame] | 115 | } |
| 116 | |
Francisco Jerez | c6db1b3 | 2012-04-20 16:56:19 +0200 | [diff] [blame] | 117 | #endif |