// // Copyright 2021 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // CLProgramImpl.h: Defines the abstract rx::CLProgramImpl class. #ifndef LIBANGLE_RENDERER_CLPROGRAMIMPL_H_ #define LIBANGLE_RENDERER_CLPROGRAMIMPL_H_ #include "libANGLE/renderer/CLKernelImpl.h" namespace rx { class CLProgramImpl : angle::NonCopyable { public: using Ptr = std::unique_ptr; CLProgramImpl(const cl::Program &program); virtual ~CLProgramImpl(); virtual std::string getSource(cl_int &errorCode) const = 0; virtual cl_int build(const cl::DevicePtrs &devices, const char *options, cl::Program *notify) = 0; virtual cl_int compile(const cl::DevicePtrs &devices, const char *options, const cl::ProgramPtrs &inputHeaders, const char **headerIncludeNames, cl::Program *notify) = 0; virtual cl_int getInfo(cl::ProgramInfo name, size_t valueSize, void *value, size_t *valueSizeRet) const = 0; virtual cl_int getBuildInfo(const cl::Device &device, cl::ProgramBuildInfo name, size_t valueSize, void *value, size_t *valueSizeRet) const = 0; virtual CLKernelImpl::Ptr createKernel(const cl::Kernel &kernel, const char *name, cl_int &errorCode) = 0; virtual cl_int createKernels(cl_uint numKernels, CLKernelImpl::CreateFuncs &createFuncs, cl_uint *numKernelsRet) = 0; protected: const cl::Program &mProgram; }; } // namespace rx #endif // LIBANGLE_RENDERER_CLPROGRAMIMPL_H_