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 30 angle::Result getInfoUInt(cl::DeviceInfo name, cl_uint *value) const override; 31 angle::Result getInfoULong(cl::DeviceInfo name, cl_ulong *value) const override; 32 angle::Result getInfoSizeT(cl::DeviceInfo name, size_t *value) const override; 33 angle::Result getInfoStringLength(cl::DeviceInfo name, size_t *value) const override; 34 angle::Result getInfoString(cl::DeviceInfo name, size_t size, char *value) const override; 35 36 angle::Result createSubDevices(const cl_device_partition_property *properties, 37 cl_uint numDevices, 38 CreateFuncs &subDevices, 39 cl_uint *numDevicesRet) override; 40 41 // Returns runtime-selected LWS value 42 cl::WorkgroupSize selectWorkGroupSize(const cl::NDRange &ndrange) const; 43 44 private: 45 vk::Renderer *mRenderer; 46 angle::HashMap<cl::DeviceInfo, cl_uint> mInfoUInt; 47 angle::HashMap<cl::DeviceInfo, cl_ulong> mInfoULong; 48 angle::HashMap<cl::DeviceInfo, size_t> mInfoSizeT; 49 angle::HashMap<cl::DeviceInfo, std::string> mInfoString; 50 }; 51 52 } // namespace rx 53 54 #endif // LIBANGLE_RENDERER_VULKAN_CLDEVICEVK_H_ 55