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