xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/CLDeviceImpl.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2021 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker // CLDeviceImpl.h: Defines the abstract rx::CLDeviceImpl class.
7*8975f5c5SAndroid Build Coastguard Worker 
8*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_RENDERER_CLDEVICEIMPL_H_
9*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_RENDERER_CLDEVICEIMPL_H_
10*8975f5c5SAndroid Build Coastguard Worker 
11*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/CLExtensions.h"
12*8975f5c5SAndroid Build Coastguard Worker 
13*8975f5c5SAndroid Build Coastguard Worker namespace rx
14*8975f5c5SAndroid Build Coastguard Worker {
15*8975f5c5SAndroid Build Coastguard Worker 
16*8975f5c5SAndroid Build Coastguard Worker class CLDeviceImpl : angle::NonCopyable
17*8975f5c5SAndroid Build Coastguard Worker {
18*8975f5c5SAndroid Build Coastguard Worker   public:
19*8975f5c5SAndroid Build Coastguard Worker     using Ptr         = std::unique_ptr<CLDeviceImpl>;
20*8975f5c5SAndroid Build Coastguard Worker     using CreateFunc  = std::function<Ptr(const cl::Device &)>;
21*8975f5c5SAndroid Build Coastguard Worker     using CreateFuncs = std::list<CreateFunc>;
22*8975f5c5SAndroid Build Coastguard Worker     using CreateData  = std::pair<cl::DeviceType, CreateFunc>;
23*8975f5c5SAndroid Build Coastguard Worker     using CreateDatas = std::list<CreateData>;
24*8975f5c5SAndroid Build Coastguard Worker 
25*8975f5c5SAndroid Build Coastguard Worker     struct Info : public CLExtensions
26*8975f5c5SAndroid Build Coastguard Worker     {
27*8975f5c5SAndroid Build Coastguard Worker         Info();
28*8975f5c5SAndroid Build Coastguard Worker         explicit Info(cl::DeviceType deviceType);
29*8975f5c5SAndroid Build Coastguard Worker         ~Info();
30*8975f5c5SAndroid Build Coastguard Worker 
31*8975f5c5SAndroid Build Coastguard Worker         Info(const Info &)            = delete;
32*8975f5c5SAndroid Build Coastguard Worker         Info &operator=(const Info &) = delete;
33*8975f5c5SAndroid Build Coastguard Worker 
34*8975f5c5SAndroid Build Coastguard Worker         Info(Info &&);
35*8975f5c5SAndroid Build Coastguard Worker         Info &operator=(Info &&);
36*8975f5c5SAndroid Build Coastguard Worker 
isValidInfo37*8975f5c5SAndroid Build Coastguard Worker         bool isValid() const { return version != 0u; }
38*8975f5c5SAndroid Build Coastguard Worker 
39*8975f5c5SAndroid Build Coastguard Worker         // In the order as they appear in the OpenCL specification V3.0.7, table 5
40*8975f5c5SAndroid Build Coastguard Worker         cl::DeviceType type;
41*8975f5c5SAndroid Build Coastguard Worker         std::vector<size_t> maxWorkItemSizes;
42*8975f5c5SAndroid Build Coastguard Worker         cl_ulong maxMemAllocSize = 0u;
43*8975f5c5SAndroid Build Coastguard Worker         cl_bool imageSupport     = CL_FALSE;
44*8975f5c5SAndroid Build Coastguard Worker         std::string IL_Version;
45*8975f5c5SAndroid Build Coastguard Worker         NameVersionVector ILsWithVersion;
46*8975f5c5SAndroid Build Coastguard Worker         size_t image2D_MaxWidth           = 0u;
47*8975f5c5SAndroid Build Coastguard Worker         size_t image2D_MaxHeight          = 0u;
48*8975f5c5SAndroid Build Coastguard Worker         size_t image3D_MaxWidth           = 0u;
49*8975f5c5SAndroid Build Coastguard Worker         size_t image3D_MaxHeight          = 0u;
50*8975f5c5SAndroid Build Coastguard Worker         size_t image3D_MaxDepth           = 0u;
51*8975f5c5SAndroid Build Coastguard Worker         size_t imageMaxBufferSize         = 0u;
52*8975f5c5SAndroid Build Coastguard Worker         size_t imageMaxArraySize          = 0u;
53*8975f5c5SAndroid Build Coastguard Worker         cl_uint imagePitchAlignment       = 0u;
54*8975f5c5SAndroid Build Coastguard Worker         cl_uint imageBaseAddressAlignment = 0u;
55*8975f5c5SAndroid Build Coastguard Worker         cl_uint memBaseAddrAlign          = 0u;
56*8975f5c5SAndroid Build Coastguard Worker         cl::DeviceExecCapabilities execCapabilities;
57*8975f5c5SAndroid Build Coastguard Worker         cl_uint queueOnDeviceMaxSize = 0u;
58*8975f5c5SAndroid Build Coastguard Worker         std::string builtInKernels;
59*8975f5c5SAndroid Build Coastguard Worker         NameVersionVector builtInKernelsWithVersion;
60*8975f5c5SAndroid Build Coastguard Worker         NameVersionVector OpenCL_C_AllVersions;
61*8975f5c5SAndroid Build Coastguard Worker         NameVersionVector OpenCL_C_Features;
62*8975f5c5SAndroid Build Coastguard Worker         std::vector<cl_device_partition_property> partitionProperties;
63*8975f5c5SAndroid Build Coastguard Worker         std::vector<cl_device_partition_property> partitionType;
64*8975f5c5SAndroid Build Coastguard Worker     };
65*8975f5c5SAndroid Build Coastguard Worker 
66*8975f5c5SAndroid Build Coastguard Worker     CLDeviceImpl(const cl::Device &device);
67*8975f5c5SAndroid Build Coastguard Worker     virtual ~CLDeviceImpl();
68*8975f5c5SAndroid Build Coastguard Worker 
69*8975f5c5SAndroid Build Coastguard Worker     virtual Info createInfo(cl::DeviceType type) const = 0;
70*8975f5c5SAndroid Build Coastguard Worker 
71*8975f5c5SAndroid Build Coastguard Worker     virtual angle::Result getInfoUInt(cl::DeviceInfo name, cl_uint *value) const             = 0;
72*8975f5c5SAndroid Build Coastguard Worker     virtual angle::Result getInfoULong(cl::DeviceInfo name, cl_ulong *value) const           = 0;
73*8975f5c5SAndroid Build Coastguard Worker     virtual angle::Result getInfoSizeT(cl::DeviceInfo name, size_t *value) const             = 0;
74*8975f5c5SAndroid Build Coastguard Worker     virtual angle::Result getInfoStringLength(cl::DeviceInfo name, size_t *value) const      = 0;
75*8975f5c5SAndroid Build Coastguard Worker     virtual angle::Result getInfoString(cl::DeviceInfo name, size_t size, char *value) const = 0;
76*8975f5c5SAndroid Build Coastguard Worker 
77*8975f5c5SAndroid Build Coastguard Worker     virtual angle::Result createSubDevices(const cl_device_partition_property *properties,
78*8975f5c5SAndroid Build Coastguard Worker                                            cl_uint numDevices,
79*8975f5c5SAndroid Build Coastguard Worker                                            CreateFuncs &createFuncs,
80*8975f5c5SAndroid Build Coastguard Worker                                            cl_uint *numDevicesRet) = 0;
81*8975f5c5SAndroid Build Coastguard Worker 
82*8975f5c5SAndroid Build Coastguard Worker   protected:
83*8975f5c5SAndroid Build Coastguard Worker     const cl::Device &mDevice;
84*8975f5c5SAndroid Build Coastguard Worker };
85*8975f5c5SAndroid Build Coastguard Worker 
86*8975f5c5SAndroid Build Coastguard Worker }  // namespace rx
87*8975f5c5SAndroid Build Coastguard Worker 
88*8975f5c5SAndroid Build Coastguard Worker #endif  // LIBANGLE_RENDERER_CLDEVICEIMPL_H_
89