Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Mesa 3-D graphics library
  3.  *
  4.  * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
  5.  *
  6.  * Permission is hereby granted, free of charge, to any person obtaining a
  7.  * copy of this software and associated documentation files (the "Software"),
  8.  * to deal in the Software without restriction, including without limitation
  9.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  10.  * and/or sell copies of the Software, and to permit persons to whom the
  11.  * Software is furnished to do so, subject to the following conditions:
  12.  *
  13.  * The above copyright notice and this permission notice shall be included
  14.  * in all copies or substantial portions of the Software.
  15.  *
  16.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  17.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  19.  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  20.  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  21.  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  22.  * OTHER DEALINGS IN THE SOFTWARE.
  23.  */
  24.  
  25.  
  26. /**
  27.  * \file glapi_dispatch.c
  28.  *
  29.  * This file generates all the gl* function entrypoints.  This code is not
  30.  * used if optimized assembly stubs are available (e.g., using
  31.  * glapi/glapi_x86.S on IA32 or glapi/glapi_sparc.S on SPARC).
  32.  *
  33.  * \note
  34.  * This file is also used to build the client-side libGL that loads DRI-based
  35.  * device drivers.  At build-time it is symlinked to src/glx.
  36.  *
  37.  * \author Brian Paul <brian@precisioninsight.com>
  38.  */
  39.  
  40. #include "glapi/glapi_priv.h"
  41. #include "glapi/glapitable.h"
  42.  
  43.  
  44. #if !(defined(USE_X86_ASM) || defined(USE_X86_64_ASM) || defined(USE_SPARC_ASM))
  45.  
  46. #if defined(_WIN32)
  47. #define KEYWORD1 GLAPI
  48. #else
  49. #define KEYWORD1 PUBLIC
  50. #endif
  51.  
  52. #define KEYWORD2 GLAPIENTRY
  53.  
  54. #if defined(USE_MGL_NAMESPACE)
  55. #define NAME(func)  mgl##func
  56. #else
  57. #define NAME(func)  gl##func
  58. #endif
  59.  
  60. #if 0  /* Use this to log GL calls to stdout (for DEBUG only!) */
  61.  
  62. #define F stdout
  63. #define DISPATCH(FUNC, ARGS, MESSAGE)           \
  64.    fprintf MESSAGE;                             \
  65.    GET_DISPATCH()->FUNC ARGS
  66.  
  67. #define RETURN_DISPATCH(FUNC, ARGS, MESSAGE)    \
  68.    fprintf MESSAGE;                             \
  69.    return GET_DISPATCH()->FUNC ARGS
  70.  
  71. #else
  72.  
  73. #define DISPATCH(FUNC, ARGS, MESSAGE)           \
  74.    GET_DISPATCH()->FUNC ARGS
  75.  
  76. #define RETURN_DISPATCH(FUNC, ARGS, MESSAGE)    \
  77.    return GET_DISPATCH()->FUNC ARGS
  78.  
  79. #endif /* logging */
  80.  
  81.  
  82. #ifndef GLAPIENTRY
  83. #define GLAPIENTRY
  84. #endif
  85.  
  86. #ifdef GLX_INDIRECT_RENDERING
  87. /* those link to libglapi.a should provide the entry points */
  88. #define _GLAPI_SKIP_PROTO_ENTRY_POINTS
  89. #endif
  90.  
  91. /* These prototypes are necessary because GLES1 library builds will create
  92.  * dispatch functions for them.  We can't directly include GLES/gl.h because
  93.  * it would conflict the previously-included GL/gl.h.  Since GLES1 ABI is not
  94.  * expected to every add more functions, the path of least resistance is to
  95.  * just duplicate the prototypes for the functions that aren't already in
  96.  * desktop OpenGL.
  97.  */
  98. #include <GLES/glplatform.h>
  99.  
  100. GL_API void GL_APIENTRY glClearDepthf (GLclampf depth);
  101. GL_API void GL_APIENTRY glClipPlanef (GLenum plane, const GLfloat *equation);
  102. GL_API void GL_APIENTRY glFrustumf (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
  103. GL_API void GL_APIENTRY glGetClipPlanef (GLenum pname, GLfloat eqn[4]);
  104. GL_API void GL_APIENTRY glOrthof (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
  105.  
  106. GL_API void GL_APIENTRY glAlphaFuncx (GLenum func, GLclampx ref);
  107. GL_API void GL_APIENTRY glClearColorx (GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha);
  108. GL_API void GL_APIENTRY glClearDepthx (GLclampx depth);
  109. GL_API void GL_APIENTRY glClipPlanex (GLenum plane, const GLfixed *equation);
  110. GL_API void GL_APIENTRY glColor4x (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
  111. GL_API void GL_APIENTRY glDepthRangex (GLclampx zNear, GLclampx zFar);
  112. GL_API void GL_APIENTRY glFogx (GLenum pname, GLfixed param);
  113. GL_API void GL_APIENTRY glFogxv (GLenum pname, const GLfixed *params);
  114. GL_API void GL_APIENTRY glFrustumx (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
  115. GL_API void GL_APIENTRY glGetClipPlanex (GLenum pname, GLfixed eqn[4]);
  116. GL_API void GL_APIENTRY glGetFixedv (GLenum pname, GLfixed *params);
  117. GL_API void GL_APIENTRY glGetLightxv (GLenum light, GLenum pname, GLfixed *params);
  118. GL_API void GL_APIENTRY glGetMaterialxv (GLenum face, GLenum pname, GLfixed *params);
  119. GL_API void GL_APIENTRY glGetTexEnvxv (GLenum env, GLenum pname, GLfixed *params);
  120. GL_API void GL_APIENTRY glGetTexParameterxv (GLenum target, GLenum pname, GLfixed *params);
  121. GL_API void GL_APIENTRY glLightModelx (GLenum pname, GLfixed param);
  122. GL_API void GL_APIENTRY glLightModelxv (GLenum pname, const GLfixed *params);
  123. GL_API void GL_APIENTRY glLightx (GLenum light, GLenum pname, GLfixed param);
  124. GL_API void GL_APIENTRY glLightxv (GLenum light, GLenum pname, const GLfixed *params);
  125. GL_API void GL_APIENTRY glLineWidthx (GLfixed width);
  126. GL_API void GL_APIENTRY glLoadMatrixx (const GLfixed *m);
  127. GL_API void GL_APIENTRY glMaterialx (GLenum face, GLenum pname, GLfixed param);
  128. GL_API void GL_APIENTRY glMaterialxv (GLenum face, GLenum pname, const GLfixed *params);
  129. GL_API void GL_APIENTRY glMultMatrixx (const GLfixed *m);
  130. GL_API void GL_APIENTRY glMultiTexCoord4x (GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
  131. GL_API void GL_APIENTRY glNormal3x (GLfixed nx, GLfixed ny, GLfixed nz);
  132. GL_API void GL_APIENTRY glOrthox (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
  133. GL_API void GL_APIENTRY glPointParameterx (GLenum pname, GLfixed param);
  134. GL_API void GL_APIENTRY glPointParameterxv (GLenum pname, const GLfixed *params);
  135. GL_API void GL_APIENTRY glPointSizex (GLfixed size);
  136. GL_API void GL_APIENTRY glPolygonOffsetx (GLfixed factor, GLfixed units);
  137. GL_API void GL_APIENTRY glRotatex (GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
  138. GL_API void GL_APIENTRY glSampleCoveragex (GLclampx value, GLboolean invert);
  139. GL_API void GL_APIENTRY glScalex (GLfixed x, GLfixed y, GLfixed z);
  140. GL_API void GL_APIENTRY glTexEnvx (GLenum target, GLenum pname, GLfixed param);
  141. GL_API void GL_APIENTRY glTexEnvxv (GLenum target, GLenum pname, const GLfixed *params);
  142. GL_API void GL_APIENTRY glTexParameterx (GLenum target, GLenum pname, GLfixed param);
  143. GL_API void GL_APIENTRY glTexParameterxv (GLenum target, GLenum pname, const GLfixed *params);
  144. GL_API void GL_APIENTRY glTranslatex (GLfixed x, GLfixed y, GLfixed z);
  145. GL_API void GL_APIENTRY glPointSizePointerOES (GLenum type, GLsizei stride, const GLvoid *pointer);
  146.  
  147. /* Enable frame pointer elimination on Windows, otherwise forgetting to add
  148.  * APIENTRY to _mesa_* entrypoints will not cause crashes on debug builds, as
  149.  * the initial ESP value is saved in the EBP in the function prologue, then
  150.  * restored on the epilogue, clobbering any corruption in the ESP pointer due
  151.  * to mismatch in the callee calling convention.
  152.  *
  153.  * On MSVC it's not sufficient to enable /Oy -- other optimizations must be
  154.  * enabled or frame pointer will be used regardless.
  155.  *
  156.  * We don't do this when NDEBUG is defined since, frame pointer omission
  157.  * optimization compiler flag are already specified on release builds, and
  158.  * because on profile builds we must have frame pointers or certain profilers
  159.  * might fail to unwind the stack.
  160.  */
  161. #if defined(_WIN32) && !defined(NDEBUG)
  162. #  if defined(_MSC_VER)
  163. #    pragma optimize( "gty", on )
  164. #  elif defined(__GNUC__)
  165. #    pragma GCC optimize ("omit-frame-pointer")
  166. #  endif
  167. #endif
  168.  
  169. #include "glapi/glapitemp.h"
  170.  
  171. #endif /* USE_X86_ASM */
  172.