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