Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright © 2012 Intel Corporation
  3.  *
  4.  * Permission is hereby granted, free of charge, to any person obtaining a
  5.  * copy of this software and associated documentation files (the "Software"),
  6.  * to deal in the Software without restriction, including without limitation
  7.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  8.  * and/or sell copies of the Software, and to permit persons to whom the
  9.  * Software is furnished to do so, subject to the following conditions:
  10.  *
  11.  * The above copyright notice and this permission notice (including the next
  12.  * paragraph) shall be included in all copies or substantial portions of the
  13.  * Software.
  14.  *
  15.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  18.  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19.  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  20.  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  21.  * DEALINGS IN THE SOFTWARE.
  22.  */
  23.  
  24. #include <gtest/gtest.h>
  25. #include "../../../mesa/main/glheader.h"
  26.  
  27. extern "C" {
  28. #include "glapi/glapi.h"
  29. #include "glapi/glapitable.h"
  30. }
  31.  
  32. struct name_offset {
  33.    const char *name;
  34.    int offset;
  35. };
  36.  
  37. extern const struct name_offset linux_gl_abi[];
  38.  
  39. TEST(GetProcAddress, ABIOffsetByName)
  40. {
  41.    /* 408 functions have had their locations in the dispatch table set since
  42.     * the dawn of time.  Verify that all of these functions are at the correct
  43.     * locations.
  44.     */
  45.    for (unsigned i = 0; linux_gl_abi[i].name != NULL; i++) {
  46.       EXPECT_EQ(linux_gl_abi[i].offset,
  47.                 _glapi_get_proc_offset(linux_gl_abi[i].name))
  48.          << "function name: " << linux_gl_abi[i].name;
  49.    }
  50. }
  51.  
  52. TEST(GetProcAddress, TableBigEnoughForABI)
  53. {
  54.    /* FINISHME: This should check that the dispatch table is large enough to
  55.     * FINISHME: hold all of the unique functions for OpenGL 1.2, OpenGL ES
  56.     * FINISHME: 1.1, and OpenGL ES 2.0.
  57.     */
  58.    EXPECT_LT(408u, _glapi_get_dispatch_table_size());
  59. }
  60.  
  61. const struct name_offset linux_gl_abi[] = {
  62.    { "glNewList", 0 },
  63.    { "glEndList", 1 },
  64.    { "glCallList", 2 },
  65.    { "glCallLists", 3 },
  66.    { "glDeleteLists", 4 },
  67.    { "glGenLists", 5 },
  68.    { "glListBase", 6 },
  69.    { "glBegin", 7 },
  70.    { "glBitmap", 8 },
  71.    { "glColor3b", 9 },
  72.    { "glColor3bv", 10 },
  73.    { "glColor3d", 11 },
  74.    { "glColor3dv", 12 },
  75.    { "glColor3f", 13 },
  76.    { "glColor3fv", 14 },
  77.    { "glColor3i", 15 },
  78.    { "glColor3iv", 16 },
  79.    { "glColor3s", 17 },
  80.    { "glColor3sv", 18 },
  81.    { "glColor3ub", 19 },
  82.    { "glColor3ubv", 20 },
  83.    { "glColor3ui", 21 },
  84.    { "glColor3uiv", 22 },
  85.    { "glColor3us", 23 },
  86.    { "glColor3usv", 24 },
  87.    { "glColor4b", 25 },
  88.    { "glColor4bv", 26 },
  89.    { "glColor4d", 27 },
  90.    { "glColor4dv", 28 },
  91.    { "glColor4f", 29 },
  92.    { "glColor4fv", 30 },
  93.    { "glColor4i", 31 },
  94.    { "glColor4iv", 32 },
  95.    { "glColor4s", 33 },
  96.    { "glColor4sv", 34 },
  97.    { "glColor4ub", 35 },
  98.    { "glColor4ubv", 36 },
  99.    { "glColor4ui", 37 },
  100.    { "glColor4uiv", 38 },
  101.    { "glColor4us", 39 },
  102.    { "glColor4usv", 40 },
  103.    { "glEdgeFlag", 41 },
  104.    { "glEdgeFlagv", 42 },
  105.    { "glEnd", 43 },
  106.    { "glIndexd", 44 },
  107.    { "glIndexdv", 45 },
  108.    { "glIndexf", 46 },
  109.    { "glIndexfv", 47 },
  110.    { "glIndexi", 48 },
  111.    { "glIndexiv", 49 },
  112.    { "glIndexs", 50 },
  113.    { "glIndexsv", 51 },
  114.    { "glNormal3b", 52 },
  115.    { "glNormal3bv", 53 },
  116.    { "glNormal3d", 54 },
  117.    { "glNormal3dv", 55 },
  118.    { "glNormal3f", 56 },
  119.    { "glNormal3fv", 57 },
  120.    { "glNormal3i", 58 },
  121.    { "glNormal3iv", 59 },
  122.    { "glNormal3s", 60 },
  123.    { "glNormal3sv", 61 },
  124.    { "glRasterPos2d", 62 },
  125.    { "glRasterPos2dv", 63 },
  126.    { "glRasterPos2f", 64 },
  127.    { "glRasterPos2fv", 65 },
  128.    { "glRasterPos2i", 66 },
  129.    { "glRasterPos2iv", 67 },
  130.    { "glRasterPos2s", 68 },
  131.    { "glRasterPos2sv", 69 },
  132.    { "glRasterPos3d", 70 },
  133.    { "glRasterPos3dv", 71 },
  134.    { "glRasterPos3f", 72 },
  135.    { "glRasterPos3fv", 73 },
  136.    { "glRasterPos3i", 74 },
  137.    { "glRasterPos3iv", 75 },
  138.    { "glRasterPos3s", 76 },
  139.    { "glRasterPos3sv", 77 },
  140.    { "glRasterPos4d", 78 },
  141.    { "glRasterPos4dv", 79 },
  142.    { "glRasterPos4f", 80 },
  143.    { "glRasterPos4fv", 81 },
  144.    { "glRasterPos4i", 82 },
  145.    { "glRasterPos4iv", 83 },
  146.    { "glRasterPos4s", 84 },
  147.    { "glRasterPos4sv", 85 },
  148.    { "glRectd", 86 },
  149.    { "glRectdv", 87 },
  150.    { "glRectf", 88 },
  151.    { "glRectfv", 89 },
  152.    { "glRecti", 90 },
  153.    { "glRectiv", 91 },
  154.    { "glRects", 92 },
  155.    { "glRectsv", 93 },
  156.    { "glTexCoord1d", 94 },
  157.    { "glTexCoord1dv", 95 },
  158.    { "glTexCoord1f", 96 },
  159.    { "glTexCoord1fv", 97 },
  160.    { "glTexCoord1i", 98 },
  161.    { "glTexCoord1iv", 99 },
  162.    { "glTexCoord1s", 100 },
  163.    { "glTexCoord1sv", 101 },
  164.    { "glTexCoord2d", 102 },
  165.    { "glTexCoord2dv", 103 },
  166.    { "glTexCoord2f", 104 },
  167.    { "glTexCoord2fv", 105 },
  168.    { "glTexCoord2i", 106 },
  169.    { "glTexCoord2iv", 107 },
  170.    { "glTexCoord2s", 108 },
  171.    { "glTexCoord2sv", 109 },
  172.    { "glTexCoord3d", 110 },
  173.    { "glTexCoord3dv", 111 },
  174.    { "glTexCoord3f", 112 },
  175.    { "glTexCoord3fv", 113 },
  176.    { "glTexCoord3i", 114 },
  177.    { "glTexCoord3iv", 115 },
  178.    { "glTexCoord3s", 116 },
  179.    { "glTexCoord3sv", 117 },
  180.    { "glTexCoord4d", 118 },
  181.    { "glTexCoord4dv", 119 },
  182.    { "glTexCoord4f", 120 },
  183.    { "glTexCoord4fv", 121 },
  184.    { "glTexCoord4i", 122 },
  185.    { "glTexCoord4iv", 123 },
  186.    { "glTexCoord4s", 124 },
  187.    { "glTexCoord4sv", 125 },
  188.    { "glVertex2d", 126 },
  189.    { "glVertex2dv", 127 },
  190.    { "glVertex2f", 128 },
  191.    { "glVertex2fv", 129 },
  192.    { "glVertex2i", 130 },
  193.    { "glVertex2iv", 131 },
  194.    { "glVertex2s", 132 },
  195.    { "glVertex2sv", 133 },
  196.    { "glVertex3d", 134 },
  197.    { "glVertex3dv", 135 },
  198.    { "glVertex3f", 136 },
  199.    { "glVertex3fv", 137 },
  200.    { "glVertex3i", 138 },
  201.    { "glVertex3iv", 139 },
  202.    { "glVertex3s", 140 },
  203.    { "glVertex3sv", 141 },
  204.    { "glVertex4d", 142 },
  205.    { "glVertex4dv", 143 },
  206.    { "glVertex4f", 144 },
  207.    { "glVertex4fv", 145 },
  208.    { "glVertex4i", 146 },
  209.    { "glVertex4iv", 147 },
  210.    { "glVertex4s", 148 },
  211.    { "glVertex4sv", 149 },
  212.    { "glClipPlane", 150 },
  213.    { "glColorMaterial", 151 },
  214.    { "glCullFace", 152 },
  215.    { "glFogf", 153 },
  216.    { "glFogfv", 154 },
  217.    { "glFogi", 155 },
  218.    { "glFogiv", 156 },
  219.    { "glFrontFace", 157 },
  220.    { "glHint", 158 },
  221.    { "glLightf", 159 },
  222.    { "glLightfv", 160 },
  223.    { "glLighti", 161 },
  224.    { "glLightiv", 162 },
  225.    { "glLightModelf", 163 },
  226.    { "glLightModelfv", 164 },
  227.    { "glLightModeli", 165 },
  228.    { "glLightModeliv", 166 },
  229.    { "glLineStipple", 167 },
  230.    { "glLineWidth", 168 },
  231.    { "glMaterialf", 169 },
  232.    { "glMaterialfv", 170 },
  233.    { "glMateriali", 171 },
  234.    { "glMaterialiv", 172 },
  235.    { "glPointSize", 173 },
  236.    { "glPolygonMode", 174 },
  237.    { "glPolygonStipple", 175 },
  238.    { "glScissor", 176 },
  239.    { "glShadeModel", 177 },
  240.    { "glTexParameterf", 178 },
  241.    { "glTexParameterfv", 179 },
  242.    { "glTexParameteri", 180 },
  243.    { "glTexParameteriv", 181 },
  244.    { "glTexImage1D", 182 },
  245.    { "glTexImage2D", 183 },
  246.    { "glTexEnvf", 184 },
  247.    { "glTexEnvfv", 185 },
  248.    { "glTexEnvi", 186 },
  249.    { "glTexEnviv", 187 },
  250.    { "glTexGend", 188 },
  251.    { "glTexGendv", 189 },
  252.    { "glTexGenf", 190 },
  253.    { "glTexGenfv", 191 },
  254.    { "glTexGeni", 192 },
  255.    { "glTexGeniv", 193 },
  256.    { "glFeedbackBuffer", 194 },
  257.    { "glSelectBuffer", 195 },
  258.    { "glRenderMode", 196 },
  259.    { "glInitNames", 197 },
  260.    { "glLoadName", 198 },
  261.    { "glPassThrough", 199 },
  262.    { "glPopName", 200 },
  263.    { "glPushName", 201 },
  264.    { "glDrawBuffer", 202 },
  265.    { "glClear", 203 },
  266.    { "glClearAccum", 204 },
  267.    { "glClearIndex", 205 },
  268.    { "glClearColor", 206 },
  269.    { "glClearStencil", 207 },
  270.    { "glClearDepth", 208 },
  271.    { "glStencilMask", 209 },
  272.    { "glColorMask", 210 },
  273.    { "glDepthMask", 211 },
  274.    { "glIndexMask", 212 },
  275.    { "glAccum", 213 },
  276.    { "glDisable", 214 },
  277.    { "glEnable", 215 },
  278.    { "glFinish", 216 },
  279.    { "glFlush", 217 },
  280.    { "glPopAttrib", 218 },
  281.    { "glPushAttrib", 219 },
  282.    { "glMap1d", 220 },
  283.    { "glMap1f", 221 },
  284.    { "glMap2d", 222 },
  285.    { "glMap2f", 223 },
  286.    { "glMapGrid1d", 224 },
  287.    { "glMapGrid1f", 225 },
  288.    { "glMapGrid2d", 226 },
  289.    { "glMapGrid2f", 227 },
  290.    { "glEvalCoord1d", 228 },
  291.    { "glEvalCoord1dv", 229 },
  292.    { "glEvalCoord1f", 230 },
  293.    { "glEvalCoord1fv", 231 },
  294.    { "glEvalCoord2d", 232 },
  295.    { "glEvalCoord2dv", 233 },
  296.    { "glEvalCoord2f", 234 },
  297.    { "glEvalCoord2fv", 235 },
  298.    { "glEvalMesh1", 236 },
  299.    { "glEvalPoint1", 237 },
  300.    { "glEvalMesh2", 238 },
  301.    { "glEvalPoint2", 239 },
  302.    { "glAlphaFunc", 240 },
  303.    { "glBlendFunc", 241 },
  304.    { "glLogicOp", 242 },
  305.    { "glStencilFunc", 243 },
  306.    { "glStencilOp", 244 },
  307.    { "glDepthFunc", 245 },
  308.    { "glPixelZoom", 246 },
  309.    { "glPixelTransferf", 247 },
  310.    { "glPixelTransferi", 248 },
  311.    { "glPixelStoref", 249 },
  312.    { "glPixelStorei", 250 },
  313.    { "glPixelMapfv", 251 },
  314.    { "glPixelMapuiv", 252 },
  315.    { "glPixelMapusv", 253 },
  316.    { "glReadBuffer", 254 },
  317.    { "glCopyPixels", 255 },
  318.    { "glReadPixels", 256 },
  319.    { "glDrawPixels", 257 },
  320.    { "glGetBooleanv", 258 },
  321.    { "glGetClipPlane", 259 },
  322.    { "glGetDoublev", 260 },
  323.    { "glGetError", 261 },
  324.    { "glGetFloatv", 262 },
  325.    { "glGetIntegerv", 263 },
  326.    { "glGetLightfv", 264 },
  327.    { "glGetLightiv", 265 },
  328.    { "glGetMapdv", 266 },
  329.    { "glGetMapfv", 267 },
  330.    { "glGetMapiv", 268 },
  331.    { "glGetMaterialfv", 269 },
  332.    { "glGetMaterialiv", 270 },
  333.    { "glGetPixelMapfv", 271 },
  334.    { "glGetPixelMapuiv", 272 },
  335.    { "glGetPixelMapusv", 273 },
  336.    { "glGetPolygonStipple", 274 },
  337.    { "glGetString", 275 },
  338.    { "glGetTexEnvfv", 276 },
  339.    { "glGetTexEnviv", 277 },
  340.    { "glGetTexGendv", 278 },
  341.    { "glGetTexGenfv", 279 },
  342.    { "glGetTexGeniv", 280 },
  343.    { "glGetTexImage", 281 },
  344.    { "glGetTexParameterfv", 282 },
  345.    { "glGetTexParameteriv", 283 },
  346.    { "glGetTexLevelParameterfv", 284 },
  347.    { "glGetTexLevelParameteriv", 285 },
  348.    { "glIsEnabled", 286 },
  349.    { "glIsList", 287 },
  350.    { "glDepthRange", 288 },
  351.    { "glFrustum", 289 },
  352.    { "glLoadIdentity", 290 },
  353.    { "glLoadMatrixf", 291 },
  354.    { "glLoadMatrixd", 292 },
  355.    { "glMatrixMode", 293 },
  356.    { "glMultMatrixf", 294 },
  357.    { "glMultMatrixd", 295 },
  358.    { "glOrtho", 296 },
  359.    { "glPopMatrix", 297 },
  360.    { "glPushMatrix", 298 },
  361.    { "glRotated", 299 },
  362.    { "glRotatef", 300 },
  363.    { "glScaled", 301 },
  364.    { "glScalef", 302 },
  365.    { "glTranslated", 303 },
  366.    { "glTranslatef", 304 },
  367.    { "glViewport", 305 },
  368.    { "glArrayElement", 306 },
  369.    { "glColorPointer", 308 },
  370.    { "glDisableClientState", 309 },
  371.    { "glDrawArrays", 310 },
  372.    { "glDrawElements", 311 },
  373.    { "glEdgeFlagPointer", 312 },
  374.    { "glEnableClientState", 313 },
  375.    { "glGetPointerv", 329 },
  376.    { "glIndexPointer", 314 },
  377.    { "glInterleavedArrays", 317 },
  378.    { "glNormalPointer", 318 },
  379.    { "glTexCoordPointer", 320 },
  380.    { "glVertexPointer", 321 },
  381.    { "glPolygonOffset", 319 },
  382.    { "glCopyTexImage1D", 323 },
  383.    { "glCopyTexImage2D", 324 },
  384.    { "glCopyTexSubImage1D", 325 },
  385.    { "glCopyTexSubImage2D", 326 },
  386.    { "glTexSubImage1D", 332 },
  387.    { "glTexSubImage2D", 333 },
  388.    { "glAreTexturesResident", 322 },
  389.    { "glBindTexture", 307 },
  390.    { "glDeleteTextures", 327 },
  391.    { "glGenTextures", 328 },
  392.    { "glIsTexture", 330 },
  393.    { "glPrioritizeTextures", 331 },
  394.    { "glIndexub", 315 },
  395.    { "glIndexubv", 316 },
  396.    { "glPopClientAttrib", 334 },
  397.    { "glPushClientAttrib", 335 },
  398.    { "glBlendColor", 336 },
  399.    { "glBlendEquation", 337 },
  400.    { "glDrawRangeElements", 338 },
  401.    { "glColorTable", 339 },
  402.    { "glColorTableParameterfv", 340 },
  403.    { "glColorTableParameteriv", 341 },
  404.    { "glCopyColorTable", 342 },
  405.    { "glGetColorTable", 343 },
  406.    { "glGetColorTableParameterfv", 344 },
  407.    { "glGetColorTableParameteriv", 345 },
  408.    { "glColorSubTable", 346 },
  409.    { "glCopyColorSubTable", 347 },
  410.    { "glConvolutionFilter1D", 348 },
  411.    { "glConvolutionFilter2D", 349 },
  412.    { "glConvolutionParameterf", 350 },
  413.    { "glConvolutionParameterfv", 351 },
  414.    { "glConvolutionParameteri", 352 },
  415.    { "glConvolutionParameteriv", 353 },
  416.    { "glCopyConvolutionFilter1D", 354 },
  417.    { "glCopyConvolutionFilter2D", 355 },
  418.    { "glGetConvolutionFilter", 356 },
  419.    { "glGetConvolutionParameterfv", 357 },
  420.    { "glGetConvolutionParameteriv", 358 },
  421.    { "glGetSeparableFilter", 359 },
  422.    { "glSeparableFilter2D", 360 },
  423.    { "glGetHistogram", 361 },
  424.    { "glGetHistogramParameterfv", 362 },
  425.    { "glGetHistogramParameteriv", 363 },
  426.    { "glGetMinmax", 364 },
  427.    { "glGetMinmaxParameterfv", 365 },
  428.    { "glGetMinmaxParameteriv", 366 },
  429.    { "glHistogram", 367 },
  430.    { "glMinmax", 368 },
  431.    { "glResetHistogram", 369 },
  432.    { "glResetMinmax", 370 },
  433.    { "glTexImage3D", 371 },
  434.    { "glTexSubImage3D", 372 },
  435.    { "glCopyTexSubImage3D", 373 },
  436.    { "glActiveTextureARB", 374 },
  437.    { "glClientActiveTextureARB", 375 },
  438.    { "glMultiTexCoord1dARB", 376 },
  439.    { "glMultiTexCoord1dvARB", 377 },
  440.    { "glMultiTexCoord1fARB", 378 },
  441.    { "glMultiTexCoord1fvARB", 379 },
  442.    { "glMultiTexCoord1iARB", 380 },
  443.    { "glMultiTexCoord1ivARB", 381 },
  444.    { "glMultiTexCoord1sARB", 382 },
  445.    { "glMultiTexCoord1svARB", 383 },
  446.    { "glMultiTexCoord2dARB", 384 },
  447.    { "glMultiTexCoord2dvARB", 385 },
  448.    { "glMultiTexCoord2fARB", 386 },
  449.    { "glMultiTexCoord2fvARB", 387 },
  450.    { "glMultiTexCoord2iARB", 388 },
  451.    { "glMultiTexCoord2ivARB", 389 },
  452.    { "glMultiTexCoord2sARB", 390 },
  453.    { "glMultiTexCoord2svARB", 391 },
  454.    { "glMultiTexCoord3dARB", 392 },
  455.    { "glMultiTexCoord3dvARB", 393 },
  456.    { "glMultiTexCoord3fARB", 394 },
  457.    { "glMultiTexCoord3fvARB", 395 },
  458.    { "glMultiTexCoord3iARB", 396 },
  459.    { "glMultiTexCoord3ivARB", 397 },
  460.    { "glMultiTexCoord3sARB", 398 },
  461.    { "glMultiTexCoord3svARB", 399 },
  462.    { "glMultiTexCoord4dARB", 400 },
  463.    { "glMultiTexCoord4dvARB", 401 },
  464.    { "glMultiTexCoord4fARB", 402 },
  465.    { "glMultiTexCoord4fvARB", 403 },
  466.    { "glMultiTexCoord4iARB", 404 },
  467.    { "glMultiTexCoord4ivARB", 405 },
  468.    { "glMultiTexCoord4sARB", 406 },
  469.    { "glMultiTexCoord4svARB", 407 },
  470.    { NULL, 0 }
  471. };
  472.