Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/angle
Path: blob/main_old/src/libANGLE/CLMemory.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
// CLMemory.h: Defines the abstract cl::Memory class, which is a memory object
7
// and the base class for OpenCL objects such as Buffer, Image and Pipe.
8
9
#ifndef LIBANGLE_CLMEMORY_H_
10
#define LIBANGLE_CLMEMORY_H_
11
12
#include "libANGLE/CLObject.h"
13
#include "libANGLE/renderer/CLMemoryImpl.h"
14
15
#include "common/Spinlock.h"
16
#include "common/SynchronizedValue.h"
17
18
#include <atomic>
19
#include <stack>
20
21
namespace cl
22
{
23
24
class Memory : public _cl_mem, public Object
25
{
26
public:
27
// Front end entry functions, only called from OpenCL entry points
28
29
cl_int setDestructorCallback(MemoryCB pfnNotify, void *userData);
30
31
cl_int getInfo(MemInfo name, size_t valueSize, void *value, size_t *valueSizeRet) const;
32
33
public:
34
using PropArray = std::vector<cl_mem_properties>;
35
36
~Memory() override;
37
38
virtual MemObjectType getType() const = 0;
39
40
const Context &getContext() const;
41
const PropArray &getProperties() const;
42
MemFlags getFlags() const;
43
void *getHostPtr() const;
44
const MemoryPtr &getParent() const;
45
size_t getOffset() const;
46
size_t getSize() const;
47
48
template <typename T = rx::CLMemoryImpl>
49
T &getImpl() const;
50
51
static Memory *Cast(cl_mem memobj);
52
53
protected:
54
using CallbackData = std::pair<MemoryCB, void *>;
55
56
Memory(const Buffer &buffer,
57
Context &context,
58
PropArray &&properties,
59
MemFlags flags,
60
size_t size,
61
void *hostPtr,
62
cl_int &errorCode);
63
64
Memory(const Buffer &buffer,
65
Buffer &parent,
66
MemFlags flags,
67
size_t offset,
68
size_t size,
69
cl_int &errorCode);
70
71
Memory(const Image &image,
72
Context &context,
73
PropArray &&properties,
74
MemFlags flags,
75
const cl_image_format &format,
76
const ImageDescriptor &desc,
77
Memory *parent,
78
void *hostPtr,
79
cl_int &errorCode);
80
81
const ContextPtr mContext;
82
const PropArray mProperties;
83
const MemFlags mFlags;
84
void *const mHostPtr = nullptr;
85
const MemoryPtr mParent;
86
const size_t mOffset = 0u;
87
const rx::CLMemoryImpl::Ptr mImpl;
88
const size_t mSize;
89
90
angle::SynchronizedValue<std::stack<CallbackData>, angle::Spinlock> mDestructorCallbacks;
91
std::atomic<cl_uint> mMapCount;
92
93
friend class Buffer;
94
friend class Context;
95
};
96
97
inline const Context &Memory::getContext() const
98
{
99
return *mContext;
100
}
101
102
inline const Memory::PropArray &Memory::getProperties() const
103
{
104
return mProperties;
105
}
106
107
inline MemFlags Memory::getFlags() const
108
{
109
return mFlags;
110
}
111
112
inline void *Memory::getHostPtr() const
113
{
114
return mHostPtr;
115
}
116
117
inline const MemoryPtr &Memory::getParent() const
118
{
119
return mParent;
120
}
121
122
inline size_t Memory::getOffset() const
123
{
124
return mOffset;
125
}
126
127
inline size_t Memory::getSize() const
128
{
129
return mSize;
130
}
131
132
template <typename T>
133
inline T &Memory::getImpl() const
134
{
135
return static_cast<T &>(*mImpl);
136
}
137
138
inline Memory *Memory::Cast(cl_mem memobj)
139
{
140
return static_cast<Memory *>(memobj);
141
}
142
143
} // namespace cl
144
145
#endif // LIBANGLE_CLMEMORY_H_
146
147