xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/vulkan/CLDeviceVk.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1 //
2 // Copyright 2021 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 // CLDeviceVk.h: Defines the class interface for CLDeviceVk, implementing CLDeviceImpl.
7 
8 #ifndef LIBANGLE_RENDERER_VULKAN_CLDEVICEVK_H_
9 #define LIBANGLE_RENDERER_VULKAN_CLDEVICEVK_H_
10 
11 #include "libANGLE/renderer/vulkan/DisplayVk.h"
12 #include "libANGLE/renderer/vulkan/cl_types.h"
13 #include "libANGLE/renderer/vulkan/vk_renderer.h"
14 
15 #include "libANGLE/renderer/CLDeviceImpl.h"
16 
17 #include "libANGLE/Display.h"
18 
19 namespace rx
20 {
21 
22 class CLDeviceVk : public CLDeviceImpl
23 {
24   public:
25     explicit CLDeviceVk(const cl::Device &device, vk::Renderer *renderer);
26     ~CLDeviceVk() override;
27 
28     Info createInfo(cl::DeviceType type) const override;
29 
getRenderer()30     const vk::Renderer *getRenderer() const { return mRenderer; }
31     angle::Result getInfoUInt(cl::DeviceInfo name, cl_uint *value) const override;
32     angle::Result getInfoULong(cl::DeviceInfo name, cl_ulong *value) const override;
33     angle::Result getInfoSizeT(cl::DeviceInfo name, size_t *value) const override;
34     angle::Result getInfoStringLength(cl::DeviceInfo name, size_t *value) const override;
35     angle::Result getInfoString(cl::DeviceInfo name, size_t size, char *value) const override;
36 
37     angle::Result createSubDevices(const cl_device_partition_property *properties,
38                                    cl_uint numDevices,
39                                    CreateFuncs &subDevices,
40                                    cl_uint *numDevicesRet) override;
41 
42     // Returns runtime-selected LWS value
43     cl::WorkgroupSize selectWorkGroupSize(const cl::NDRange &ndrange) const;
44 
45   private:
46     vk::Renderer *mRenderer;
47     angle::HashMap<cl::DeviceInfo, cl_uint> mInfoUInt;
48     angle::HashMap<cl::DeviceInfo, cl_ulong> mInfoULong;
49     angle::HashMap<cl::DeviceInfo, size_t> mInfoSizeT;
50     angle::HashMap<cl::DeviceInfo, std::string> mInfoString;
51 };
52 
53 }  // namespace rx
54 
55 #endif  // LIBANGLE_RENDERER_VULKAN_CLDEVICEVK_H_
56