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