xref: /aosp_15_r20/external/OpenCL-CTS/test_common/gl/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 "../harness/compat.h"
20*6467f958SSadaf Ebrahimi #include <stdio.h>
21*6467f958SSadaf Ebrahimi #include <stdlib.h>
22*6467f958SSadaf Ebrahimi #include <string.h>
23*6467f958SSadaf Ebrahimi 
24*6467f958SSadaf Ebrahimi #include <sys/types.h>
25*6467f958SSadaf Ebrahimi #include <sys/stat.h>
26*6467f958SSadaf Ebrahimi 
27*6467f958SSadaf Ebrahimi #if !defined (__APPLE__)
28*6467f958SSadaf Ebrahimi #include <CL/cl.h>
29*6467f958SSadaf Ebrahimi #include "gl_headers.h"
30*6467f958SSadaf Ebrahimi #include <CL/cl_gl.h>
31*6467f958SSadaf Ebrahimi #else
32*6467f958SSadaf Ebrahimi #include "gl_headers.h"
33*6467f958SSadaf Ebrahimi #endif
34*6467f958SSadaf Ebrahimi 
35*6467f958SSadaf Ebrahimi #include "harness/errorHelpers.h"
36*6467f958SSadaf Ebrahimi #include "harness/kernelHelpers.h"
37*6467f958SSadaf Ebrahimi #include "harness/typeWrappers.h"
38*6467f958SSadaf Ebrahimi #include "harness/conversions.h"
39*6467f958SSadaf Ebrahimi #include "harness/mt19937.h"
40*6467f958SSadaf Ebrahimi 
41*6467f958SSadaf Ebrahimi typedef cl_mem
42*6467f958SSadaf Ebrahimi (CL_API_CALL *clCreateFromGLBuffer_fn)(cl_context     context,
43*6467f958SSadaf Ebrahimi                           cl_mem_flags   flags,
44*6467f958SSadaf Ebrahimi                           GLuint         bufobj,
45*6467f958SSadaf Ebrahimi                           int *          errcode_ret);
46*6467f958SSadaf Ebrahimi 
47*6467f958SSadaf Ebrahimi typedef cl_mem
48*6467f958SSadaf Ebrahimi (CL_API_CALL *clCreateFromGLTexture_fn)(cl_context       context ,
49*6467f958SSadaf Ebrahimi                         cl_mem_flags     flags ,
50*6467f958SSadaf Ebrahimi                         GLenum           target ,
51*6467f958SSadaf Ebrahimi                         GLint            miplevel ,
52*6467f958SSadaf Ebrahimi                         GLuint           texture ,
53*6467f958SSadaf Ebrahimi                         cl_int *         errcode_ret) ;
54*6467f958SSadaf Ebrahimi 
55*6467f958SSadaf Ebrahimi typedef cl_mem
56*6467f958SSadaf Ebrahimi (CL_API_CALL *clCreateFromGLTexture2D_fn)(cl_context       context ,
57*6467f958SSadaf Ebrahimi                         cl_mem_flags     flags ,
58*6467f958SSadaf Ebrahimi                         GLenum           target ,
59*6467f958SSadaf Ebrahimi                         GLint            miplevel ,
60*6467f958SSadaf Ebrahimi                         GLuint           texture ,
61*6467f958SSadaf Ebrahimi                         cl_int *         errcode_ret) ;
62*6467f958SSadaf Ebrahimi 
63*6467f958SSadaf Ebrahimi typedef cl_mem
64*6467f958SSadaf Ebrahimi (CL_API_CALL *clCreateFromGLTexture3D_fn)(cl_context       context ,
65*6467f958SSadaf Ebrahimi                         cl_mem_flags     flags ,
66*6467f958SSadaf Ebrahimi                         GLenum           target ,
67*6467f958SSadaf Ebrahimi                         GLint            miplevel ,
68*6467f958SSadaf Ebrahimi                         GLuint           texture ,
69*6467f958SSadaf Ebrahimi                         cl_int *         errcode_ret) ;
70*6467f958SSadaf Ebrahimi 
71*6467f958SSadaf Ebrahimi typedef cl_mem
72*6467f958SSadaf Ebrahimi (CL_API_CALL *clCreateFromGLRenderbuffer_fn)(cl_context    context ,
73*6467f958SSadaf Ebrahimi                            cl_mem_flags  flags ,
74*6467f958SSadaf Ebrahimi                            GLuint        renderbuffer ,
75*6467f958SSadaf Ebrahimi                            cl_int *      errcode_ret) ;
76*6467f958SSadaf Ebrahimi 
77*6467f958SSadaf Ebrahimi typedef cl_int
78*6467f958SSadaf Ebrahimi (CL_API_CALL *clGetGLObjectInfo_fn)(cl_mem                 memobj ,
79*6467f958SSadaf Ebrahimi                   cl_gl_object_type *    gl_object_type ,
80*6467f958SSadaf Ebrahimi                   GLuint *               gl_object_name) ;
81*6467f958SSadaf Ebrahimi 
82*6467f958SSadaf Ebrahimi typedef cl_int
83*6467f958SSadaf Ebrahimi (CL_API_CALL *clGetGLTextureInfo_fn)(cl_mem                memobj ,
84*6467f958SSadaf Ebrahimi                    cl_gl_texture_info    param_name ,
85*6467f958SSadaf Ebrahimi                    size_t                param_value_size ,
86*6467f958SSadaf Ebrahimi                    void *                param_value ,
87*6467f958SSadaf Ebrahimi                    size_t *              param_value_size_ret) ;
88*6467f958SSadaf Ebrahimi 
89*6467f958SSadaf Ebrahimi typedef cl_int
90*6467f958SSadaf Ebrahimi (CL_API_CALL *clEnqueueAcquireGLObjects_fn)(cl_command_queue       command_queue ,
91*6467f958SSadaf Ebrahimi                           cl_uint                num_objects ,
92*6467f958SSadaf Ebrahimi                           const cl_mem *         mem_objects ,
93*6467f958SSadaf Ebrahimi                           cl_uint                num_events_in_wait_list ,
94*6467f958SSadaf Ebrahimi                           const cl_event *       event_wait_list ,
95*6467f958SSadaf Ebrahimi                                 cl_event *             event) ;
96*6467f958SSadaf Ebrahimi 
97*6467f958SSadaf Ebrahimi typedef cl_int
98*6467f958SSadaf Ebrahimi (CL_API_CALL *clEnqueueReleaseGLObjects_fn)(cl_command_queue       command_queue ,
99*6467f958SSadaf Ebrahimi                           cl_uint                num_objects ,
100*6467f958SSadaf Ebrahimi                           const cl_mem *         mem_objects ,
101*6467f958SSadaf Ebrahimi                           cl_uint                num_events_in_wait_list ,
102*6467f958SSadaf Ebrahimi                           const cl_event *       event_wait_list ,
103*6467f958SSadaf Ebrahimi                                 cl_event *             event) ;
104*6467f958SSadaf Ebrahimi 
105*6467f958SSadaf Ebrahimi 
106*6467f958SSadaf Ebrahimi extern clCreateFromGLBuffer_fn clCreateFromGLBuffer_ptr;
107*6467f958SSadaf Ebrahimi extern clCreateFromGLTexture_fn clCreateFromGLTexture_ptr;
108*6467f958SSadaf Ebrahimi extern clCreateFromGLTexture2D_fn clCreateFromGLTexture2D_ptr;
109*6467f958SSadaf Ebrahimi extern clCreateFromGLTexture3D_fn clCreateFromGLTexture3D_ptr;
110*6467f958SSadaf Ebrahimi extern clCreateFromGLRenderbuffer_fn clCreateFromGLRenderbuffer_ptr;
111*6467f958SSadaf Ebrahimi extern clGetGLObjectInfo_fn clGetGLObjectInfo_ptr;
112*6467f958SSadaf Ebrahimi extern clGetGLTextureInfo_fn clGetGLTextureInfo_ptr;
113*6467f958SSadaf Ebrahimi extern clEnqueueAcquireGLObjects_fn clEnqueueAcquireGLObjects_ptr;
114*6467f958SSadaf Ebrahimi extern clEnqueueReleaseGLObjects_fn clEnqueueReleaseGLObjects_ptr;
115*6467f958SSadaf Ebrahimi 
116*6467f958SSadaf Ebrahimi 
117*6467f958SSadaf Ebrahimi class glBufferWrapper
118*6467f958SSadaf Ebrahimi {
119*6467f958SSadaf Ebrahimi     public:
glBufferWrapper()120*6467f958SSadaf Ebrahimi         glBufferWrapper() { mBuffer = 0; }
glBufferWrapper(GLuint b)121*6467f958SSadaf Ebrahimi         glBufferWrapper( GLuint b ) { mBuffer = b; }
~glBufferWrapper()122*6467f958SSadaf Ebrahimi         ~glBufferWrapper() { if( mBuffer != 0 ) glDeleteBuffers( 1, &mBuffer ); }
123*6467f958SSadaf Ebrahimi 
124*6467f958SSadaf Ebrahimi         glBufferWrapper & operator=( const GLuint &rhs ) { mBuffer = rhs; return *this; }
GLuint()125*6467f958SSadaf Ebrahimi         operator GLuint() { return mBuffer; }
126*6467f958SSadaf Ebrahimi         operator GLuint *() { return &mBuffer; }
127*6467f958SSadaf Ebrahimi 
128*6467f958SSadaf Ebrahimi         GLuint * operator&() { return &mBuffer; }
129*6467f958SSadaf Ebrahimi 
130*6467f958SSadaf Ebrahimi         bool operator==( GLuint rhs ) { return mBuffer == rhs; }
131*6467f958SSadaf Ebrahimi 
132*6467f958SSadaf Ebrahimi     protected:
133*6467f958SSadaf Ebrahimi 
134*6467f958SSadaf Ebrahimi         GLuint mBuffer;
135*6467f958SSadaf Ebrahimi };
136*6467f958SSadaf Ebrahimi 
137*6467f958SSadaf Ebrahimi class glTextureWrapper
138*6467f958SSadaf Ebrahimi {
139*6467f958SSadaf Ebrahimi     public:
glTextureWrapper()140*6467f958SSadaf Ebrahimi         glTextureWrapper() { mHandle = 0; }
glTextureWrapper(GLuint b)141*6467f958SSadaf Ebrahimi         glTextureWrapper( GLuint b ) { mHandle = b; }
~glTextureWrapper()142*6467f958SSadaf Ebrahimi         ~glTextureWrapper() {
143*6467f958SSadaf Ebrahimi          if( mHandle != 0 ) glDeleteTextures( 1, &mHandle );
144*6467f958SSadaf Ebrahimi         }
145*6467f958SSadaf Ebrahimi 
146*6467f958SSadaf Ebrahimi         glTextureWrapper & operator=( const GLuint &rhs ) { mHandle = rhs; return *this; }
GLuint()147*6467f958SSadaf Ebrahimi         operator GLuint() { return mHandle; }
148*6467f958SSadaf Ebrahimi         operator GLuint *() { return &mHandle; }
149*6467f958SSadaf Ebrahimi 
150*6467f958SSadaf Ebrahimi         GLuint * operator&() { return &mHandle; }
151*6467f958SSadaf Ebrahimi 
152*6467f958SSadaf Ebrahimi         bool operator==( GLuint rhs ) { return mHandle == rhs; }
153*6467f958SSadaf Ebrahimi 
154*6467f958SSadaf Ebrahimi     protected:
155*6467f958SSadaf Ebrahimi 
156*6467f958SSadaf Ebrahimi     // The texture handle.
157*6467f958SSadaf Ebrahimi         GLuint mHandle;
158*6467f958SSadaf Ebrahimi };
159*6467f958SSadaf Ebrahimi 
160*6467f958SSadaf Ebrahimi class glRenderbufferWrapper
161*6467f958SSadaf Ebrahimi {
162*6467f958SSadaf Ebrahimi     public:
glRenderbufferWrapper()163*6467f958SSadaf Ebrahimi         glRenderbufferWrapper() { mBuffer = 0; }
glRenderbufferWrapper(GLuint b)164*6467f958SSadaf Ebrahimi         glRenderbufferWrapper( GLuint b ) { mBuffer = b; }
~glRenderbufferWrapper()165*6467f958SSadaf Ebrahimi         ~glRenderbufferWrapper() { if( mBuffer != 0 ) glDeleteRenderbuffersEXT( 1, &mBuffer ); }
166*6467f958SSadaf Ebrahimi 
167*6467f958SSadaf Ebrahimi         glRenderbufferWrapper & operator=( const GLuint &rhs ) { mBuffer = rhs; return *this; }
GLuint()168*6467f958SSadaf Ebrahimi         operator GLuint() { return mBuffer; }
169*6467f958SSadaf Ebrahimi         operator GLuint *() { return &mBuffer; }
170*6467f958SSadaf Ebrahimi 
171*6467f958SSadaf Ebrahimi         GLuint * operator&() { return &mBuffer; }
172*6467f958SSadaf Ebrahimi 
173*6467f958SSadaf Ebrahimi         bool operator==( GLuint rhs ) { return mBuffer == rhs; }
174*6467f958SSadaf Ebrahimi 
175*6467f958SSadaf Ebrahimi     protected:
176*6467f958SSadaf Ebrahimi 
177*6467f958SSadaf Ebrahimi         GLuint mBuffer;
178*6467f958SSadaf Ebrahimi };
179*6467f958SSadaf Ebrahimi 
180*6467f958SSadaf Ebrahimi class glFramebufferWrapper
181*6467f958SSadaf Ebrahimi {
182*6467f958SSadaf Ebrahimi     public:
glFramebufferWrapper()183*6467f958SSadaf Ebrahimi         glFramebufferWrapper() { mBuffer = 0; }
glFramebufferWrapper(GLuint b)184*6467f958SSadaf Ebrahimi         glFramebufferWrapper( GLuint b ) { mBuffer = b; }
~glFramebufferWrapper()185*6467f958SSadaf Ebrahimi         ~glFramebufferWrapper() { if( mBuffer != 0 ) glDeleteFramebuffersEXT( 1, &mBuffer ); }
186*6467f958SSadaf Ebrahimi 
187*6467f958SSadaf Ebrahimi         glFramebufferWrapper & operator=( const GLuint &rhs ) { mBuffer = rhs; return *this; }
GLuint()188*6467f958SSadaf Ebrahimi         operator GLuint() { return mBuffer; }
189*6467f958SSadaf Ebrahimi         operator GLuint *() { return &mBuffer; }
190*6467f958SSadaf Ebrahimi 
191*6467f958SSadaf Ebrahimi         GLuint * operator&() { return &mBuffer; }
192*6467f958SSadaf Ebrahimi 
193*6467f958SSadaf Ebrahimi         bool operator==( GLuint rhs ) { return mBuffer == rhs; }
194*6467f958SSadaf Ebrahimi 
195*6467f958SSadaf Ebrahimi     protected:
196*6467f958SSadaf Ebrahimi 
197*6467f958SSadaf Ebrahimi         GLuint mBuffer;
198*6467f958SSadaf Ebrahimi };
199*6467f958SSadaf Ebrahimi 
200*6467f958SSadaf Ebrahimi class glVertexArraysWrapper
201*6467f958SSadaf Ebrahimi {
202*6467f958SSadaf Ebrahimi public:
glVertexArraysWrapper()203*6467f958SSadaf Ebrahimi   glVertexArraysWrapper() { mBuffer = 0; }
glVertexArraysWrapper(GLuint b)204*6467f958SSadaf Ebrahimi   glVertexArraysWrapper( GLuint b ) { mBuffer = b; }
~glVertexArraysWrapper()205*6467f958SSadaf Ebrahimi   ~glVertexArraysWrapper() { if( mBuffer != 0 ) glDeleteVertexArrays( 1, &mBuffer ); }
206*6467f958SSadaf Ebrahimi 
207*6467f958SSadaf Ebrahimi   glVertexArraysWrapper & operator=( const GLuint &rhs ) { mBuffer = rhs; return *this; }
GLuint()208*6467f958SSadaf Ebrahimi   operator GLuint() { return mBuffer; }
209*6467f958SSadaf Ebrahimi   operator GLuint *() { return &mBuffer; }
210*6467f958SSadaf Ebrahimi 
211*6467f958SSadaf Ebrahimi   GLuint * operator&() { return &mBuffer; }
212*6467f958SSadaf Ebrahimi 
213*6467f958SSadaf Ebrahimi   bool operator==( GLuint rhs ) { return mBuffer == rhs; }
214*6467f958SSadaf Ebrahimi 
215*6467f958SSadaf Ebrahimi protected:
216*6467f958SSadaf Ebrahimi 
217*6467f958SSadaf Ebrahimi   GLuint mBuffer;
218*6467f958SSadaf Ebrahimi };
219*6467f958SSadaf Ebrahimi 
220*6467f958SSadaf Ebrahimi class glProgramWrapper
221*6467f958SSadaf Ebrahimi {
222*6467f958SSadaf Ebrahimi public:
glProgramWrapper()223*6467f958SSadaf Ebrahimi   glProgramWrapper() { mProgram = 0; }
glProgramWrapper(GLuint b)224*6467f958SSadaf Ebrahimi   glProgramWrapper( GLuint b ) { mProgram = b; }
~glProgramWrapper()225*6467f958SSadaf Ebrahimi   ~glProgramWrapper() { if( mProgram != 0 ) glDeleteProgram( mProgram ); }
226*6467f958SSadaf Ebrahimi 
227*6467f958SSadaf Ebrahimi   glProgramWrapper & operator=( const GLuint &rhs ) { mProgram = rhs; return *this; }
GLuint()228*6467f958SSadaf Ebrahimi   operator GLuint() { return mProgram; }
229*6467f958SSadaf Ebrahimi   operator GLuint *() { return &mProgram; }
230*6467f958SSadaf Ebrahimi 
231*6467f958SSadaf Ebrahimi   GLuint * operator&() { return &mProgram; }
232*6467f958SSadaf Ebrahimi 
233*6467f958SSadaf Ebrahimi   bool operator==( GLuint rhs ) { return mProgram == rhs; }
234*6467f958SSadaf Ebrahimi 
235*6467f958SSadaf Ebrahimi protected:
236*6467f958SSadaf Ebrahimi 
237*6467f958SSadaf Ebrahimi   GLuint mProgram;
238*6467f958SSadaf Ebrahimi };
239*6467f958SSadaf Ebrahimi 
240*6467f958SSadaf Ebrahimi class glShaderWrapper
241*6467f958SSadaf Ebrahimi {
242*6467f958SSadaf Ebrahimi public:
glShaderWrapper()243*6467f958SSadaf Ebrahimi   glShaderWrapper() { mShader = 0; }
glShaderWrapper(GLuint b)244*6467f958SSadaf Ebrahimi   glShaderWrapper( GLuint b ) { mShader = b; }
~glShaderWrapper()245*6467f958SSadaf Ebrahimi   ~glShaderWrapper() { if( mShader != 0 ) glDeleteShader( mShader ); }
246*6467f958SSadaf Ebrahimi 
247*6467f958SSadaf Ebrahimi   glShaderWrapper & operator=( const GLuint &rhs ) { mShader = rhs; return *this; }
GLuint()248*6467f958SSadaf Ebrahimi   operator GLuint() { return mShader; }
249*6467f958SSadaf Ebrahimi   operator GLuint *() { return &mShader; }
250*6467f958SSadaf Ebrahimi 
251*6467f958SSadaf Ebrahimi   GLuint * operator&() { return &mShader; }
252*6467f958SSadaf Ebrahimi 
253*6467f958SSadaf Ebrahimi   bool operator==( GLuint rhs ) { return mShader == rhs; }
254*6467f958SSadaf Ebrahimi 
255*6467f958SSadaf Ebrahimi protected:
256*6467f958SSadaf Ebrahimi 
257*6467f958SSadaf Ebrahimi   GLuint mShader;
258*6467f958SSadaf Ebrahimi };
259*6467f958SSadaf Ebrahimi 
260*6467f958SSadaf Ebrahimi // Helper functions (defined in helpers.cpp)
261*6467f958SSadaf Ebrahimi 
262*6467f958SSadaf Ebrahimi extern void * CreateGLTexture1DArray( size_t width, size_t length,
263*6467f958SSadaf Ebrahimi   GLenum target, GLenum glFormat, GLenum internalFormat, GLenum glType,
264*6467f958SSadaf Ebrahimi   ExplicitType type, GLuint *outTextureID, int *outError,
265*6467f958SSadaf Ebrahimi   bool allocateMem, MTdata d);
266*6467f958SSadaf Ebrahimi 
267*6467f958SSadaf Ebrahimi extern void * CreateGLTexture2DArray( size_t width, size_t height, size_t length,
268*6467f958SSadaf Ebrahimi   GLenum target, GLenum glFormat, GLenum internalFormat, GLenum glType,
269*6467f958SSadaf Ebrahimi   ExplicitType type, GLuint *outTextureID, int *outError,
270*6467f958SSadaf Ebrahimi   bool allocateMem, MTdata d);
271*6467f958SSadaf Ebrahimi 
272*6467f958SSadaf Ebrahimi extern void * CreateGLTextureBuffer( size_t width,
273*6467f958SSadaf Ebrahimi   GLenum target, GLenum glFormat, GLenum internalFormat, GLenum glType,
274*6467f958SSadaf Ebrahimi   ExplicitType type, GLuint *outTex, GLuint *outBuf, int *outError,
275*6467f958SSadaf Ebrahimi   bool allocateMem, MTdata d);
276*6467f958SSadaf Ebrahimi 
277*6467f958SSadaf Ebrahimi extern void * CreateGLTexture1D(size_t width,
278*6467f958SSadaf Ebrahimi                                 GLenum target, GLenum glFormat,
279*6467f958SSadaf Ebrahimi                                 GLenum internalFormat, GLenum glType,
280*6467f958SSadaf Ebrahimi                                 ExplicitType type, GLuint *outTextureID,
281*6467f958SSadaf Ebrahimi                                 int *outError, bool allocateMem, MTdata d );
282*6467f958SSadaf Ebrahimi 
283*6467f958SSadaf Ebrahimi extern void * CreateGLTexture2D( size_t width, size_t height,
284*6467f958SSadaf Ebrahimi                                GLenum target, GLenum glFormat,
285*6467f958SSadaf Ebrahimi                                GLenum internalFormat, GLenum glType,
286*6467f958SSadaf Ebrahimi                                ExplicitType type, GLuint *outTextureID,
287*6467f958SSadaf Ebrahimi                                int *outError, bool allocateMem, MTdata d );
288*6467f958SSadaf Ebrahimi 
289*6467f958SSadaf Ebrahimi 
290*6467f958SSadaf Ebrahimi extern void * CreateGLTexture3D( size_t width, size_t height, size_t depth,
291*6467f958SSadaf Ebrahimi                                  GLenum target, GLenum glFormat,
292*6467f958SSadaf Ebrahimi                                  GLenum internalFormat, GLenum glType,
293*6467f958SSadaf Ebrahimi                                  ExplicitType type, GLuint *outTextureID,
294*6467f958SSadaf Ebrahimi                                  int *outError, MTdata d, bool allocateMem = true );
295*6467f958SSadaf Ebrahimi 
296*6467f958SSadaf Ebrahimi #ifdef GL_VERSION_3_2
297*6467f958SSadaf Ebrahimi extern void * CreateGLTexture2DMultisample( size_t width, size_t height, size_t samples,
298*6467f958SSadaf Ebrahimi                                            GLenum target, GLenum glFormat,
299*6467f958SSadaf Ebrahimi                                            GLenum internalFormat, GLenum glType,
300*6467f958SSadaf Ebrahimi                                            ExplicitType type, GLuint *outTextureID,
301*6467f958SSadaf Ebrahimi                                            int *outError, bool allocateMem, MTdata d,
302*6467f958SSadaf Ebrahimi                                            bool fixedSampleLocations );
303*6467f958SSadaf Ebrahimi 
304*6467f958SSadaf Ebrahimi extern void * CreateGLTexture2DArrayMultisample( size_t width, size_t height,
305*6467f958SSadaf Ebrahimi                                                 size_t length, size_t samples,
306*6467f958SSadaf Ebrahimi                                                 GLenum target, GLenum glFormat,
307*6467f958SSadaf Ebrahimi                                                 GLenum internalFormat, GLenum glType,
308*6467f958SSadaf Ebrahimi                                                 ExplicitType type, GLuint *outTextureID,
309*6467f958SSadaf Ebrahimi                                                 int *outError, bool allocateMem, MTdata d,
310*6467f958SSadaf Ebrahimi                                                 bool fixedSampleLocations );
311*6467f958SSadaf Ebrahimi #endif
312*6467f958SSadaf Ebrahimi 
313*6467f958SSadaf Ebrahimi extern void * ReadGLTexture( GLenum glTarget, GLuint glTexture, GLuint glBuf, GLint width,
314*6467f958SSadaf Ebrahimi                              GLenum glFormat, GLenum glInternalFormat,
315*6467f958SSadaf Ebrahimi                              GLenum glType, ExplicitType typeToReadAs,
316*6467f958SSadaf Ebrahimi                              size_t outWidth, size_t outHeight );
317*6467f958SSadaf Ebrahimi 
318*6467f958SSadaf Ebrahimi extern int CreateGLRenderbufferRaw( GLsizei width, GLsizei height,
319*6467f958SSadaf Ebrahimi                                    GLenum target, GLenum glFormat,
320*6467f958SSadaf Ebrahimi                                    GLenum internalFormat, GLenum glType,
321*6467f958SSadaf Ebrahimi                                    GLuint *outFramebuffer,
322*6467f958SSadaf Ebrahimi                                    GLuint *outRenderbuffer );
323*6467f958SSadaf Ebrahimi 
324*6467f958SSadaf Ebrahimi extern void * CreateGLRenderbuffer( GLsizei width, GLsizei height,
325*6467f958SSadaf Ebrahimi                                     GLenum target, GLenum glFormat,
326*6467f958SSadaf Ebrahimi                                     GLenum internalFormat, GLenum glType,
327*6467f958SSadaf Ebrahimi                                     ExplicitType type,
328*6467f958SSadaf Ebrahimi                                     GLuint *outFramebuffer,
329*6467f958SSadaf Ebrahimi                                     GLuint *outRenderbuffer,
330*6467f958SSadaf Ebrahimi                                     int *outError, MTdata d, bool allocateMem );
331*6467f958SSadaf Ebrahimi 
332*6467f958SSadaf Ebrahimi extern void * ReadGLRenderbuffer( GLuint glFramebuffer, GLuint glRenderbuffer,
333*6467f958SSadaf Ebrahimi                                   GLenum attachment, GLenum glFormat,
334*6467f958SSadaf Ebrahimi                                   GLenum glInternalFormat, GLenum glType,
335*6467f958SSadaf Ebrahimi                                   ExplicitType typeToReadAs,
336*6467f958SSadaf Ebrahimi                                   size_t outWidth, size_t outHeight );
337*6467f958SSadaf Ebrahimi 
338*6467f958SSadaf Ebrahimi extern void DumpGLBuffer(GLenum type, size_t width, size_t height, void* buffer);
339*6467f958SSadaf Ebrahimi extern const char *GetGLTypeName( GLenum type );
340*6467f958SSadaf Ebrahimi extern const char *GetGLAttachmentName( GLenum att );
341*6467f958SSadaf Ebrahimi extern const char *GetGLTargetName( GLenum tgt );
342*6467f958SSadaf Ebrahimi extern const char *GetGLBaseFormatName( GLenum baseformat );
343*6467f958SSadaf Ebrahimi extern const char *GetGLFormatName( GLenum format );
344*6467f958SSadaf Ebrahimi 
345*6467f958SSadaf Ebrahimi extern void* CreateRandomData( ExplicitType type, size_t count, MTdata d );
346*6467f958SSadaf Ebrahimi 
347*6467f958SSadaf Ebrahimi extern GLenum GetGLFormat(GLenum internalFormat);
348*6467f958SSadaf Ebrahimi extern GLenum GetGLTypeForExplicitType(ExplicitType type);
349*6467f958SSadaf Ebrahimi extern size_t GetGLTypeSize(GLenum type);
350*6467f958SSadaf Ebrahimi extern ExplicitType GetExplicitTypeForGLType(GLenum type);
351*6467f958SSadaf Ebrahimi 
352*6467f958SSadaf Ebrahimi extern GLenum get_base_gl_target( GLenum target );
353*6467f958SSadaf Ebrahimi 
354*6467f958SSadaf Ebrahimi extern int init_clgl_ext( void );
355*6467f958SSadaf Ebrahimi 
356*6467f958SSadaf Ebrahimi extern GLint get_gl_max_samples( GLenum target, GLenum internalformat );
357*6467f958SSadaf Ebrahimi 
358*6467f958SSadaf Ebrahimi #endif // _helpers_h
359*6467f958SSadaf Ebrahimi 
360*6467f958SSadaf Ebrahimi 
361*6467f958SSadaf Ebrahimi 
362