xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/cl/CLProgramCL.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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 // CLProgramCL.h: Defines the class interface for CLProgramCL, implementing CLProgramImpl.
7 
8 #ifndef LIBANGLE_RENDERER_CL_CLPROGRAMCL_H_
9 #define LIBANGLE_RENDERER_CL_CLPROGRAMCL_H_
10 
11 #include "libANGLE/renderer/cl/cl_types.h"
12 
13 #include "libANGLE/renderer/CLProgramImpl.h"
14 
15 namespace rx
16 {
17 
18 class CLProgramCL : public CLProgramImpl
19 {
20   public:
21     CLProgramCL(const cl::Program &program, cl_program native);
22     ~CLProgramCL() override;
23 
24     cl_program getNative() const;
25 
26     angle::Result build(const cl::DevicePtrs &devices,
27                         const char *options,
28                         cl::Program *notify) override;
29 
30     angle::Result compile(const cl::DevicePtrs &devices,
31                           const char *options,
32                           const cl::ProgramPtrs &inputHeaders,
33                           const char **headerIncludeNames,
34                           cl::Program *notify) override;
35 
36     angle::Result getInfo(cl::ProgramInfo name,
37                           size_t valueSize,
38                           void *value,
39                           size_t *valueSizeRet) const override;
40 
41     angle::Result getBuildInfo(const cl::Device &device,
42                                cl::ProgramBuildInfo name,
43                                size_t valueSize,
44                                void *value,
45                                size_t *valueSizeRet) const override;
46 
47     angle::Result createKernel(const cl::Kernel &kernel,
48                                const char *name,
49                                CLKernelImpl::Ptr *kernelOut) override;
50 
51     angle::Result createKernels(cl_uint numKernels,
52                                 CLKernelImpl::CreateFuncs &createFuncs,
53                                 cl_uint *numKernelsRet) override;
54 
55   private:
56     static void CL_CALLBACK Callback(cl_program program, void *userData);
57 
58     const cl_program mNative;
59 
60     friend class CLContextCL;
61 };
62 
getNative()63 inline cl_program CLProgramCL::getNative() const
64 {
65     return mNative;
66 }
67 
68 }  // namespace rx
69 
70 #endif  // LIBANGLE_RENDERER_CL_CLPROGRAMCL_H_
71