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