1*8975f5c5SAndroid Build Coastguard Worker // 2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2021 The ANGLE Project Authors. All rights reserved. 3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file. 5*8975f5c5SAndroid Build Coastguard Worker // 6*8975f5c5SAndroid Build Coastguard Worker // CLPlatformImpl.h: Defines the abstract rx::CLPlatformImpl class. 7*8975f5c5SAndroid Build Coastguard Worker 8*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_RENDERER_CLPLATFORMIMPL_H_ 9*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_RENDERER_CLPLATFORMIMPL_H_ 10*8975f5c5SAndroid Build Coastguard Worker 11*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/CLContextImpl.h" 12*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/CLDeviceImpl.h" 13*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/CLExtensions.h" 14*8975f5c5SAndroid Build Coastguard Worker 15*8975f5c5SAndroid Build Coastguard Worker namespace rx 16*8975f5c5SAndroid Build Coastguard Worker { 17*8975f5c5SAndroid Build Coastguard Worker 18*8975f5c5SAndroid Build Coastguard Worker class CLPlatformImpl : angle::NonCopyable 19*8975f5c5SAndroid Build Coastguard Worker { 20*8975f5c5SAndroid Build Coastguard Worker public: 21*8975f5c5SAndroid Build Coastguard Worker using Ptr = std::unique_ptr<CLPlatformImpl>; 22*8975f5c5SAndroid Build Coastguard Worker using CreateFunc = std::function<Ptr(const cl::Platform &)>; 23*8975f5c5SAndroid Build Coastguard Worker using CreateFuncs = std::list<CreateFunc>; 24*8975f5c5SAndroid Build Coastguard Worker 25*8975f5c5SAndroid Build Coastguard Worker struct Info : public CLExtensions 26*8975f5c5SAndroid Build Coastguard Worker { 27*8975f5c5SAndroid Build Coastguard Worker Info(); 28*8975f5c5SAndroid Build Coastguard Worker ~Info(); 29*8975f5c5SAndroid Build Coastguard Worker 30*8975f5c5SAndroid Build Coastguard Worker Info(const Info &) = delete; 31*8975f5c5SAndroid Build Coastguard Worker Info &operator=(const Info &) = delete; 32*8975f5c5SAndroid Build Coastguard Worker 33*8975f5c5SAndroid Build Coastguard Worker Info(Info &&); 34*8975f5c5SAndroid Build Coastguard Worker Info &operator=(Info &&); 35*8975f5c5SAndroid Build Coastguard Worker isValidInfo36*8975f5c5SAndroid Build Coastguard Worker bool isValid() const { return version != 0u; } 37*8975f5c5SAndroid Build Coastguard Worker 38*8975f5c5SAndroid Build Coastguard Worker std::string profile; 39*8975f5c5SAndroid Build Coastguard Worker std::string name; 40*8975f5c5SAndroid Build Coastguard Worker cl_ulong hostTimerRes = 0u; 41*8975f5c5SAndroid Build Coastguard Worker }; 42*8975f5c5SAndroid Build Coastguard Worker 43*8975f5c5SAndroid Build Coastguard Worker explicit CLPlatformImpl(const cl::Platform &platform); 44*8975f5c5SAndroid Build Coastguard Worker virtual ~CLPlatformImpl(); 45*8975f5c5SAndroid Build Coastguard Worker 46*8975f5c5SAndroid Build Coastguard Worker // For initialization only 47*8975f5c5SAndroid Build Coastguard Worker virtual Info createInfo() const = 0; 48*8975f5c5SAndroid Build Coastguard Worker virtual CLDeviceImpl::CreateDatas createDevices() const = 0; 49*8975f5c5SAndroid Build Coastguard Worker 50*8975f5c5SAndroid Build Coastguard Worker virtual angle::Result createContext(cl::Context &context, 51*8975f5c5SAndroid Build Coastguard Worker const cl::DevicePtrs &devices, 52*8975f5c5SAndroid Build Coastguard Worker bool userSync, 53*8975f5c5SAndroid Build Coastguard Worker CLContextImpl::Ptr *contextOut) = 0; 54*8975f5c5SAndroid Build Coastguard Worker 55*8975f5c5SAndroid Build Coastguard Worker virtual angle::Result createContextFromType(cl::Context &context, 56*8975f5c5SAndroid Build Coastguard Worker cl::DeviceType deviceType, 57*8975f5c5SAndroid Build Coastguard Worker bool userSync, 58*8975f5c5SAndroid Build Coastguard Worker CLContextImpl::Ptr *contextOut) = 0; 59*8975f5c5SAndroid Build Coastguard Worker 60*8975f5c5SAndroid Build Coastguard Worker virtual angle::Result unloadCompiler() = 0; 61*8975f5c5SAndroid Build Coastguard Worker 62*8975f5c5SAndroid Build Coastguard Worker protected: 63*8975f5c5SAndroid Build Coastguard Worker const cl::Platform &mPlatform; 64*8975f5c5SAndroid Build Coastguard Worker }; 65*8975f5c5SAndroid Build Coastguard Worker 66*8975f5c5SAndroid Build Coastguard Worker } // namespace rx 67*8975f5c5SAndroid Build Coastguard Worker 68*8975f5c5SAndroid Build Coastguard Worker #endif // LIBANGLE_RENDERER_CLPLATFORMIMPL_H_ 69