• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 // CLPlatformImpl.h: Defines the abstract rx::CLPlatformImpl class.
7 
8 #ifndef LIBANGLE_RENDERER_CLPLATFORMIMPL_H_
9 #define LIBANGLE_RENDERER_CLPLATFORMIMPL_H_
10 
11 #include "libANGLE/renderer/CLContextImpl.h"
12 #include "libANGLE/renderer/CLDeviceImpl.h"
13 #include "libANGLE/renderer/CLExtensions.h"
14 
15 namespace rx
16 {
17 
18 class CLPlatformImpl : angle::NonCopyable
19 {
20   public:
21     using Ptr         = std::unique_ptr<CLPlatformImpl>;
22     using CreateFunc  = std::function<Ptr(const cl::Platform &)>;
23     using CreateFuncs = std::list<CreateFunc>;
24 
25     struct Info : public CLExtensions
26     {
27         Info();
28         ~Info();
29 
30         Info(const Info &) = delete;
31         Info &operator=(const Info &) = delete;
32 
33         Info(Info &&);
34         Info &operator=(Info &&);
35 
isValidInfo36         bool isValid() const { return version != 0u; }
37 
38         std::string profile;
39         std::string name;
40         cl_ulong hostTimerRes = 0u;
41     };
42 
43     explicit CLPlatformImpl(const cl::Platform &platform);
44     virtual ~CLPlatformImpl();
45 
46     // For initialization only
47     virtual Info createInfo() const                         = 0;
48     virtual CLDeviceImpl::CreateDatas createDevices() const = 0;
49 
50     virtual CLContextImpl::Ptr createContext(cl::Context &context,
51                                              const cl::DevicePtrs &devices,
52                                              bool userSync,
53                                              cl_int &errorCode) = 0;
54 
55     virtual CLContextImpl::Ptr createContextFromType(cl::Context &context,
56                                                      cl::DeviceType deviceType,
57                                                      bool userSync,
58                                                      cl_int &errorCode) = 0;
59 
60     virtual cl_int unloadCompiler() = 0;
61 
62   protected:
63     const cl::Platform &mPlatform;
64 };
65 
66 }  // namespace rx
67 
68 #endif  // LIBANGLE_RENDERER_CLPLATFORMIMPL_H_
69