• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/cl_types.h"
12 #include "libANGLE/renderer/vulkan/vk_renderer.h"
13 
14 #include "libANGLE/renderer/CLDeviceImpl.h"
15 
16 #include "spirv-tools/libspirv.h"
17 
18 namespace rx
19 {
20 
21 class CLDeviceVk : public CLDeviceImpl
22 {
23   public:
24     explicit CLDeviceVk(const cl::Device &device, vk::Renderer *renderer);
25     ~CLDeviceVk() override;
26 
27     Info createInfo(cl::DeviceType type) const override;
28 
getRenderer()29     const vk::Renderer *getRenderer() const { return mRenderer; }
getFrontendObject()30     const cl::Device &getFrontendObject() const { return const_cast<cl::Device &>(mDevice); }
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 
getSpirvVersion()45     spv_target_env getSpirvVersion() const { return mSpirvVersion; }
46 
47   private:
48     vk::Renderer *mRenderer;
49     spv_target_env mSpirvVersion;
50     angle::HashMap<cl::DeviceInfo, cl_uint> mInfoUInt;
51     angle::HashMap<cl::DeviceInfo, cl_ulong> mInfoULong;
52     angle::HashMap<cl::DeviceInfo, size_t> mInfoSizeT;
53     angle::HashMap<cl::DeviceInfo, std::string> mInfoString;
54 };
55 
56 }  // namespace rx
57 
58 #endif  // LIBANGLE_RENDERER_VULKAN_CLDEVICEVK_H_
59