xref: /aosp_15_r20/external/OpenCL-CTS/test_common/gles/helpers.h (revision 6467f958c7de8070b317fc65bcb0f6472e388d82)
1*6467f958SSadaf Ebrahimi //
2*6467f958SSadaf Ebrahimi // Copyright (c) 2017 The Khronos Group Inc.
3*6467f958SSadaf Ebrahimi //
4*6467f958SSadaf Ebrahimi // Licensed under the Apache License, Version 2.0 (the "License");
5*6467f958SSadaf Ebrahimi // you may not use this file except in compliance with the License.
6*6467f958SSadaf Ebrahimi // You may obtain a copy of the License at
7*6467f958SSadaf Ebrahimi //
8*6467f958SSadaf Ebrahimi //    http://www.apache.org/licenses/LICENSE-2.0
9*6467f958SSadaf Ebrahimi //
10*6467f958SSadaf Ebrahimi // Unless required by applicable law or agreed to in writing, software
11*6467f958SSadaf Ebrahimi // distributed under the License is distributed on an "AS IS" BASIS,
12*6467f958SSadaf Ebrahimi // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*6467f958SSadaf Ebrahimi // See the License for the specific language governing permissions and
14*6467f958SSadaf Ebrahimi // limitations under the License.
15*6467f958SSadaf Ebrahimi //
16*6467f958SSadaf Ebrahimi #ifndef _helpers_h
17*6467f958SSadaf Ebrahimi #define _helpers_h
18*6467f958SSadaf Ebrahimi 
19*6467f958SSadaf Ebrahimi #include <stdio.h>
20*6467f958SSadaf Ebrahimi #include <stdlib.h>
21*6467f958SSadaf Ebrahimi #include <math.h>
22*6467f958SSadaf Ebrahimi #include <string.h>
23*6467f958SSadaf Ebrahimi 
24*6467f958SSadaf Ebrahimi #if !defined(_WIN32)
25*6467f958SSadaf Ebrahimi #include <stdbool.h>
26*6467f958SSadaf Ebrahimi #endif
27*6467f958SSadaf Ebrahimi 
28*6467f958SSadaf Ebrahimi #include <sys/types.h>
29*6467f958SSadaf Ebrahimi #include <sys/stat.h>
30*6467f958SSadaf Ebrahimi 
31*6467f958SSadaf Ebrahimi #if !defined (__APPLE__)
32*6467f958SSadaf Ebrahimi #include <CL/cl.h>
33*6467f958SSadaf Ebrahimi #include <CL/cl_gl.h>
34*6467f958SSadaf Ebrahimi #include <CL/cl_half.h>
35*6467f958SSadaf Ebrahimi #endif
36*6467f958SSadaf Ebrahimi #include "gl_headers.h"
37*6467f958SSadaf Ebrahimi 
38*6467f958SSadaf Ebrahimi #include "harness/errorHelpers.h"
39*6467f958SSadaf Ebrahimi #include "harness/kernelHelpers.h"
40*6467f958SSadaf Ebrahimi #include "harness/typeWrappers.h"
41*6467f958SSadaf Ebrahimi #include "harness/conversions.h"
42*6467f958SSadaf Ebrahimi #include "harness/mt19937.h"
43*6467f958SSadaf Ebrahimi 
44*6467f958SSadaf Ebrahimi typedef cl_mem
45*6467f958SSadaf Ebrahimi (CL_API_CALL *clCreateFromGLBuffer_fn)(cl_context     context,
46*6467f958SSadaf Ebrahimi                           cl_mem_flags   flags,
47*6467f958SSadaf Ebrahimi                           GLuint         bufobj,
48*6467f958SSadaf Ebrahimi                           int *          errcode_ret);
49*6467f958SSadaf Ebrahimi 
50*6467f958SSadaf Ebrahimi typedef cl_mem
51*6467f958SSadaf Ebrahimi (CL_API_CALL *clCreateFromGLTexture_fn)(cl_context       context ,
52*6467f958SSadaf Ebrahimi                         cl_mem_flags     flags ,
53*6467f958SSadaf Ebrahimi                         GLenum           target ,
54*6467f958SSadaf Ebrahimi                         GLint            miplevel ,
55*6467f958SSadaf Ebrahimi                         GLuint           texture ,
56*6467f958SSadaf Ebrahimi                         cl_int *         errcode_ret) ;
57*6467f958SSadaf Ebrahimi 
58*6467f958SSadaf Ebrahimi typedef cl_mem
59*6467f958SSadaf Ebrahimi (CL_API_CALL *clCreateFromGLRenderbuffer_fn)(cl_context    context ,
60*6467f958SSadaf Ebrahimi                            cl_mem_flags  flags ,
61*6467f958SSadaf Ebrahimi                            GLuint        renderbuffer ,
62*6467f958SSadaf Ebrahimi                            cl_int *      errcode_ret) ;
63*6467f958SSadaf Ebrahimi 
64*6467f958SSadaf Ebrahimi typedef cl_int
65*6467f958SSadaf Ebrahimi (CL_API_CALL *clGetGLObjectInfo_fn)(cl_mem                 memobj ,
66*6467f958SSadaf Ebrahimi                   cl_gl_object_type *    gl_object_type ,
67*6467f958SSadaf Ebrahimi                   GLuint *               gl_object_name) ;
68*6467f958SSadaf Ebrahimi 
69*6467f958SSadaf Ebrahimi typedef cl_int
70*6467f958SSadaf Ebrahimi (CL_API_CALL *clGetGLTextureInfo_fn)(cl_mem                memobj ,
71*6467f958SSadaf Ebrahimi                    cl_gl_texture_info    param_name ,
72*6467f958SSadaf Ebrahimi                    size_t                param_value_size ,
73*6467f958SSadaf Ebrahimi                    void *                param_value ,
74*6467f958SSadaf Ebrahimi                    size_t *              param_value_size_ret) ;
75*6467f958SSadaf Ebrahimi 
76*6467f958SSadaf Ebrahimi typedef cl_int
77*6467f958SSadaf Ebrahimi (CL_API_CALL *clEnqueueAcquireGLObjects_fn)(cl_command_queue       command_queue ,
78*6467f958SSadaf Ebrahimi                           cl_uint                num_objects ,
79*6467f958SSadaf Ebrahimi                           const cl_mem *         mem_objects ,
80*6467f958SSadaf Ebrahimi                           cl_uint                num_events_in_wait_list ,
81*6467f958SSadaf Ebrahimi                           const cl_event *       event_wait_list ,
82*6467f958SSadaf Ebrahimi                                 cl_event *             event) ;
83*6467f958SSadaf Ebrahimi 
84*6467f958SSadaf Ebrahimi typedef cl_int
85*6467f958SSadaf Ebrahimi (CL_API_CALL *clEnqueueReleaseGLObjects_fn)(cl_command_queue       command_queue ,
86*6467f958SSadaf Ebrahimi                           cl_uint                num_objects ,
87*6467f958SSadaf Ebrahimi                           const cl_mem *         mem_objects ,
88*6467f958SSadaf Ebrahimi                           cl_uint                num_events_in_wait_list ,
89*6467f958SSadaf Ebrahimi                           const cl_event *       event_wait_list ,
90*6467f958SSadaf Ebrahimi                                 cl_event *             event) ;
91*6467f958SSadaf Ebrahimi 
92*6467f958SSadaf Ebrahimi 
93*6467f958SSadaf Ebrahimi extern clCreateFromGLBuffer_fn clCreateFromGLBuffer_ptr;
94*6467f958SSadaf Ebrahimi extern clCreateFromGLTexture_fn clCreateFromGLTexture_ptr;
95*6467f958SSadaf Ebrahimi extern clCreateFromGLRenderbuffer_fn clCreateFromGLRenderbuffer_ptr;
96*6467f958SSadaf Ebrahimi extern clGetGLObjectInfo_fn clGetGLObjectInfo_ptr;
97*6467f958SSadaf Ebrahimi extern clGetGLTextureInfo_fn clGetGLTextureInfo_ptr;
98*6467f958SSadaf Ebrahimi extern clEnqueueAcquireGLObjects_fn clEnqueueAcquireGLObjects_ptr;
99*6467f958SSadaf Ebrahimi extern clEnqueueReleaseGLObjects_fn clEnqueueReleaseGLObjects_ptr;
100*6467f958SSadaf Ebrahimi 
101*6467f958SSadaf Ebrahimi 
102*6467f958SSadaf Ebrahimi class glBufferWrapper
103*6467f958SSadaf Ebrahimi {
104*6467f958SSadaf Ebrahimi     public:
glBufferWrapper()105*6467f958SSadaf Ebrahimi         glBufferWrapper() { mBuffer = 0; }
glBufferWrapper(GLuint b)106*6467f958SSadaf Ebrahimi         glBufferWrapper( GLuint b ) { mBuffer = b; }
~glBufferWrapper()107*6467f958SSadaf Ebrahimi         ~glBufferWrapper() { if( mBuffer != 0 ) glDeleteBuffers( 1, &mBuffer ); }
108*6467f958SSadaf Ebrahimi 
109*6467f958SSadaf Ebrahimi         glBufferWrapper & operator=( const GLuint &rhs ) { mBuffer = rhs; return *this; }
GLuint()110*6467f958SSadaf Ebrahimi         operator GLuint() { return mBuffer; }
111*6467f958SSadaf Ebrahimi         operator GLuint *() { return &mBuffer; }
112*6467f958SSadaf Ebrahimi 
113*6467f958SSadaf Ebrahimi         GLuint * operator&() { return &mBuffer; }
114*6467f958SSadaf Ebrahimi 
115*6467f958SSadaf Ebrahimi         bool operator==( GLuint rhs ) { return mBuffer == rhs; }
116*6467f958SSadaf Ebrahimi 
117*6467f958SSadaf Ebrahimi     protected:
118*6467f958SSadaf Ebrahimi 
119*6467f958SSadaf Ebrahimi         GLuint mBuffer;
120*6467f958SSadaf Ebrahimi };
121*6467f958SSadaf Ebrahimi 
122*6467f958SSadaf Ebrahimi class glTextureWrapper
123*6467f958SSadaf Ebrahimi {
124*6467f958SSadaf Ebrahimi     public:
glTextureWrapper()125*6467f958SSadaf Ebrahimi         glTextureWrapper() { mBuffer = 0; }
glTextureWrapper(GLuint b)126*6467f958SSadaf Ebrahimi         glTextureWrapper( GLuint b ) { mBuffer = b; }
~glTextureWrapper()127*6467f958SSadaf Ebrahimi         ~glTextureWrapper() { if( mBuffer != 0 ) glDeleteTextures( 1, &mBuffer ); }
128*6467f958SSadaf Ebrahimi 
129*6467f958SSadaf Ebrahimi         glTextureWrapper & operator=( const GLuint &rhs ) { mBuffer = rhs; return *this; }
GLuint()130*6467f958SSadaf Ebrahimi         operator GLuint() { return mBuffer; }
131*6467f958SSadaf Ebrahimi         operator GLuint *() { return &mBuffer; }
132*6467f958SSadaf Ebrahimi 
133*6467f958SSadaf Ebrahimi         GLuint * operator&() { return &mBuffer; }
134*6467f958SSadaf Ebrahimi 
135*6467f958SSadaf Ebrahimi         bool operator==( GLuint rhs ) { return mBuffer == rhs; }
136*6467f958SSadaf Ebrahimi 
137*6467f958SSadaf Ebrahimi     protected:
138*6467f958SSadaf Ebrahimi 
139*6467f958SSadaf Ebrahimi         GLuint mBuffer;
140*6467f958SSadaf Ebrahimi };
141*6467f958SSadaf Ebrahimi 
142*6467f958SSadaf Ebrahimi class glRenderbufferWrapper
143*6467f958SSadaf Ebrahimi {
144*6467f958SSadaf Ebrahimi     public:
glRenderbufferWrapper()145*6467f958SSadaf Ebrahimi         glRenderbufferWrapper() { mBuffer = 0; }
glRenderbufferWrapper(GLuint b)146*6467f958SSadaf Ebrahimi         glRenderbufferWrapper( GLuint b ) { mBuffer = b; }
~glRenderbufferWrapper()147*6467f958SSadaf Ebrahimi         ~glRenderbufferWrapper() { if( mBuffer != 0 ) glDeleteRenderbuffersEXT( 1, &mBuffer ); }
148*6467f958SSadaf Ebrahimi 
149*6467f958SSadaf Ebrahimi         glRenderbufferWrapper & operator=( const GLuint &rhs ) { mBuffer = rhs; return *this; }
GLuint()150*6467f958SSadaf Ebrahimi         operator GLuint() { return mBuffer; }
151*6467f958SSadaf Ebrahimi         operator GLuint *() { return &mBuffer; }
152*6467f958SSadaf Ebrahimi 
153*6467f958SSadaf Ebrahimi         GLuint * operator&() { return &mBuffer; }
154*6467f958SSadaf Ebrahimi 
155*6467f958SSadaf Ebrahimi         bool operator==( GLuint rhs ) { return mBuffer == rhs; }
156*6467f958SSadaf Ebrahimi 
157*6467f958SSadaf Ebrahimi     protected:
158*6467f958SSadaf Ebrahimi 
159*6467f958SSadaf Ebrahimi         GLuint mBuffer;
160*6467f958SSadaf Ebrahimi };
161*6467f958SSadaf Ebrahimi 
162*6467f958SSadaf Ebrahimi class glFramebufferWrapper
163*6467f958SSadaf Ebrahimi {
164*6467f958SSadaf Ebrahimi     public:
glFramebufferWrapper()165*6467f958SSadaf Ebrahimi         glFramebufferWrapper() { mBuffer = 0; }
glFramebufferWrapper(GLuint b)166*6467f958SSadaf Ebrahimi         glFramebufferWrapper( GLuint b ) { mBuffer = b; }
~glFramebufferWrapper()167*6467f958SSadaf Ebrahimi         ~glFramebufferWrapper() { if( mBuffer != 0 ) glDeleteFramebuffersEXT( 1, &mBuffer ); }
168*6467f958SSadaf Ebrahimi 
169*6467f958SSadaf Ebrahimi         glFramebufferWrapper & operator=( const GLuint &rhs ) { mBuffer = rhs; return *this; }
GLuint()170*6467f958SSadaf Ebrahimi         operator GLuint() { return mBuffer; }
171*6467f958SSadaf Ebrahimi         operator GLuint *() { return &mBuffer; }
172*6467f958SSadaf Ebrahimi 
173*6467f958SSadaf Ebrahimi         GLuint * operator&() { return &mBuffer; }
174*6467f958SSadaf Ebrahimi 
175*6467f958SSadaf Ebrahimi         bool operator==( GLuint rhs ) { return mBuffer == rhs; }
176*6467f958SSadaf Ebrahimi 
177*6467f958SSadaf Ebrahimi     protected:
178*6467f958SSadaf Ebrahimi 
179*6467f958SSadaf Ebrahimi         GLuint mBuffer;
180*6467f958SSadaf Ebrahimi };
181*6467f958SSadaf Ebrahimi 
182*6467f958SSadaf Ebrahimi 
183*6467f958SSadaf Ebrahimi // Helper functions (defined in helpers.cpp)
184*6467f958SSadaf Ebrahimi extern void * CreateGLTexture2D( size_t width, size_t height,
185*6467f958SSadaf Ebrahimi                                GLenum target, GLenum glFormat,
186*6467f958SSadaf Ebrahimi                                GLenum internalFormat, GLenum glType,
187*6467f958SSadaf Ebrahimi                                ExplicitType type, GLuint *outTextureID,
188*6467f958SSadaf Ebrahimi                                int *outError, bool allocateMem, MTdata d );
189*6467f958SSadaf Ebrahimi 
190*6467f958SSadaf Ebrahimi 
191*6467f958SSadaf Ebrahimi extern void * CreateGLTexture3D( size_t width, size_t height, size_t depth,
192*6467f958SSadaf Ebrahimi                                  GLenum target, GLenum glFormat,
193*6467f958SSadaf Ebrahimi                                  GLenum internalFormat, GLenum glType,
194*6467f958SSadaf Ebrahimi                                  ExplicitType type, GLuint *outTextureID,
195*6467f958SSadaf Ebrahimi                                  int *outError, MTdata d, bool allocateMem = true );
196*6467f958SSadaf Ebrahimi 
197*6467f958SSadaf Ebrahimi extern void * ReadGLTexture( GLenum glTarget, GLuint glTexture,
198*6467f958SSadaf Ebrahimi                              GLenum glFormat, GLenum glInternalFormat,
199*6467f958SSadaf Ebrahimi                              GLenum glType, ExplicitType typeToReadAs,
200*6467f958SSadaf Ebrahimi                              size_t outWidth, size_t outHeight );
201*6467f958SSadaf Ebrahimi 
202*6467f958SSadaf Ebrahimi void * CreateGLRenderbuffer( GLsizei width, GLsizei height,
203*6467f958SSadaf Ebrahimi                              GLenum attachment,
204*6467f958SSadaf Ebrahimi                              GLenum rbFormat, GLenum rbType,
205*6467f958SSadaf Ebrahimi                              GLenum texFormat, GLenum texType,
206*6467f958SSadaf Ebrahimi                              ExplicitType type,
207*6467f958SSadaf Ebrahimi                              GLuint *outFramebuffer,
208*6467f958SSadaf Ebrahimi                              GLuint *outRenderbuffer,
209*6467f958SSadaf Ebrahimi                              int *outError, MTdata d, bool allocateMem );
210*6467f958SSadaf Ebrahimi 
211*6467f958SSadaf Ebrahimi int CreateGLRenderbufferRaw( GLsizei width, GLsizei height,
212*6467f958SSadaf Ebrahimi                             GLenum attachment,
213*6467f958SSadaf Ebrahimi                             GLenum rbFormat, GLenum rbType,
214*6467f958SSadaf Ebrahimi                             GLuint *outFramebuffer,
215*6467f958SSadaf Ebrahimi                             GLuint *outRenderbuffer );
216*6467f958SSadaf Ebrahimi 
217*6467f958SSadaf Ebrahimi void * ReadGLRenderbuffer( GLuint glFramebuffer, GLuint glRenderbuffer,
218*6467f958SSadaf Ebrahimi                            GLenum attachment,
219*6467f958SSadaf Ebrahimi                            GLenum rbFormat, GLenum rbType,
220*6467f958SSadaf Ebrahimi                            GLenum texFormat, GLenum texType,
221*6467f958SSadaf Ebrahimi                            ExplicitType typeToReadAs,
222*6467f958SSadaf Ebrahimi                            size_t outWidth, size_t outHeight );
223*6467f958SSadaf Ebrahimi 
224*6467f958SSadaf Ebrahimi extern void DumpGLBuffer(GLenum type, size_t width, size_t height, void* buffer);
225*6467f958SSadaf Ebrahimi extern const char *GetGLTypeName( GLenum type );
226*6467f958SSadaf Ebrahimi extern const char *GetGLAttachmentName( GLenum att );
227*6467f958SSadaf Ebrahimi extern const char *GetGLTargetName( GLenum tgt );
228*6467f958SSadaf Ebrahimi extern const char *GetGLBaseFormatName( GLenum baseformat );
229*6467f958SSadaf Ebrahimi extern const char *GetGLFormatName( GLenum format );
230*6467f958SSadaf Ebrahimi 
231*6467f958SSadaf Ebrahimi extern void* CreateRandomData( ExplicitType type, size_t count, MTdata d );
232*6467f958SSadaf Ebrahimi 
233*6467f958SSadaf Ebrahimi extern GLenum GetGLFormat(GLenum internalFormat);
234*6467f958SSadaf Ebrahimi extern GLenum GetGLTypeForExplicitType(ExplicitType type);
235*6467f958SSadaf Ebrahimi extern size_t GetGLTypeSize(GLenum type);
236*6467f958SSadaf Ebrahimi extern ExplicitType GetExplicitTypeForGLType(GLenum type);
237*6467f958SSadaf Ebrahimi 
238*6467f958SSadaf Ebrahimi extern GLenum get_base_gl_target( GLenum target );
239*6467f958SSadaf Ebrahimi 
240*6467f958SSadaf Ebrahimi extern int init_clgl_ext( cl_platform_id platform_id );
241*6467f958SSadaf Ebrahimi 
242*6467f958SSadaf Ebrahimi #endif // _helpers_h
243*6467f958SSadaf Ebrahimi 
244*6467f958SSadaf Ebrahimi 
245*6467f958SSadaf Ebrahimi 
246