Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/angle
Path: blob/main_old/src/libANGLE/CLDevice.h
1693 views
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
// CLDevice.h: Defines the cl::Device class, which provides information about OpenCL device
7
// configurations.
8
9
#ifndef LIBANGLE_CLDEVICE_H_
10
#define LIBANGLE_CLDEVICE_H_
11
12
#include "libANGLE/CLObject.h"
13
#include "libANGLE/renderer/CLDeviceImpl.h"
14
15
#include "common/Spinlock.h"
16
#include "common/SynchronizedValue.h"
17
18
#include <functional>
19
20
namespace cl
21
{
22
23
class Device final : public _cl_device_id, public Object
24
{
25
public:
26
// Front end entry functions, only called from OpenCL entry points
27
28
cl_int getInfo(DeviceInfo name, size_t valueSize, void *value, size_t *valueSizeRet) const;
29
30
cl_int createSubDevices(const cl_device_partition_property *properties,
31
cl_uint numDevices,
32
cl_device_id *subDevices,
33
cl_uint *numDevicesRet);
34
35
public:
36
~Device() override;
37
38
Platform &getPlatform() noexcept;
39
const Platform &getPlatform() const noexcept;
40
bool isRoot() const noexcept;
41
const rx::CLDeviceImpl::Info &getInfo() const;
42
cl_version getVersion() const;
43
bool isVersionOrNewer(cl_uint major, cl_uint minor) const;
44
45
template <typename T = rx::CLDeviceImpl>
46
T &getImpl() const;
47
48
bool supportsBuiltInKernel(const std::string &name) const;
49
bool supportsNativeImageDimensions(const cl_image_desc &desc) const;
50
bool supportsImageDimensions(const ImageDescriptor &desc) const;
51
52
static bool IsValidType(DeviceType type);
53
54
private:
55
Device(Platform &platform,
56
Device *parent,
57
DeviceType type,
58
const rx::CLDeviceImpl::CreateFunc &createFunc);
59
60
Platform &mPlatform;
61
const DevicePtr mParent;
62
const rx::CLDeviceImpl::Ptr mImpl;
63
const rx::CLDeviceImpl::Info mInfo;
64
65
angle::SynchronizedValue<CommandQueue *, angle::Spinlock> mDefaultCommandQueue = nullptr;
66
67
friend class CommandQueue;
68
friend class Platform;
69
};
70
71
inline Platform &Device::getPlatform() noexcept
72
{
73
return mPlatform;
74
}
75
76
inline const Platform &Device::getPlatform() const noexcept
77
{
78
return mPlatform;
79
}
80
81
inline bool Device::isRoot() const noexcept
82
{
83
return mParent == nullptr;
84
}
85
86
inline const rx::CLDeviceImpl::Info &Device::getInfo() const
87
{
88
return mInfo;
89
}
90
91
inline cl_version Device::getVersion() const
92
{
93
return mInfo.version;
94
}
95
96
inline bool Device::isVersionOrNewer(cl_uint major, cl_uint minor) const
97
{
98
return mInfo.version >= CL_MAKE_VERSION(major, minor, 0u);
99
}
100
101
template <typename T>
102
inline T &Device::getImpl() const
103
{
104
return static_cast<T &>(*mImpl);
105
}
106
107
inline bool Device::IsValidType(DeviceType type)
108
{
109
return type.get() <= CL_DEVICE_TYPE_CUSTOM || type == CL_DEVICE_TYPE_ALL;
110
}
111
112
} // namespace cl
113
114
#endif // LIBANGLE_CLDEVICE_H_
115
116