1db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca/**************************************************************************
2db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca *
3db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
4db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * All Rights Reserved.
5db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca *
6db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * Permission is hereby granted, free of charge, to any person obtaining a
7db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * copy of this software and associated documentation files (the
8db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * "Software"), to deal in the Software without restriction, including
9db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * without limitation the rights to use, copy, modify, merge, publish,
10db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * distribute, sub license, and/or sell copies of the Software, and to
11db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * permit persons to whom the Software is furnished to do so, subject to
12db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * the following conditions:
13db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca *
14db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * The above copyright notice and this permission notice (including the
15db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * next paragraph) shall be included in all copies or substantial portions
16db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * of the Software.
17db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca *
18db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca *
26db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca **************************************************************************/
27db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca
28db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca#include <windows.h>
2919641a9295f5d14919480124575c6727a0ad79cfJosé Fonseca
30d8ffccc80b5835ff458facbe84d0dd9cda754a30José Fonseca#define WGL_WGLEXT_PROTOTYPES
31d8ffccc80b5835ff458facbe84d0dd9cda754a30José Fonseca
32d8ffccc80b5835ff458facbe84d0dd9cda754a30José Fonseca#include <GL/gl.h>
33d8ffccc80b5835ff458facbe84d0dd9cda754a30José Fonseca#include <GL/wglext.h>
34d8ffccc80b5835ff458facbe84d0dd9cda754a30José Fonseca
35db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca#include "glapi/glapi.h"
36f724036f0045bd28f323af3666c43b3ef03b6886José Fonseca#include "stw_ext_gallium.h"
37e6b66210def2c10f703c2a990b9652ea5419ebbeJosé Fonseca#include "stw_device.h"
38e6b66210def2c10f703c2a990b9652ea5419ebbeJosé Fonseca#include "stw_icd.h"
39db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca
4019068d93c8f0f1d2b8809248266bf6da3dc6abd7José Fonsecastruct stw_extension_entry
41db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca{
42db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca   const char *name;
43db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca   PROC proc;
44db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca};
45db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca
4619068d93c8f0f1d2b8809248266bf6da3dc6abd7José Fonseca#define STW_EXTENSION_ENTRY(P) { #P, (PROC) P }
47db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca
4819068d93c8f0f1d2b8809248266bf6da3dc6abd7José Fonsecastatic const struct stw_extension_entry stw_extension_entries[] = {
49db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca
50db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca   /* WGL_ARB_extensions_string */
5119068d93c8f0f1d2b8809248266bf6da3dc6abd7José Fonseca   STW_EXTENSION_ENTRY( wglGetExtensionsStringARB ),
52db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca
53c4a43873c5f2e39def45eb9ca24f538adf3f9196José Fonseca   /* WGL_ARB_pbuffer */
54c4a43873c5f2e39def45eb9ca24f538adf3f9196José Fonseca   STW_EXTENSION_ENTRY( wglCreatePbufferARB ),
55c4a43873c5f2e39def45eb9ca24f538adf3f9196José Fonseca   STW_EXTENSION_ENTRY( wglGetPbufferDCARB ),
56c4a43873c5f2e39def45eb9ca24f538adf3f9196José Fonseca   STW_EXTENSION_ENTRY( wglReleasePbufferDCARB ),
57c4a43873c5f2e39def45eb9ca24f538adf3f9196José Fonseca   STW_EXTENSION_ENTRY( wglDestroyPbufferARB ),
58c4a43873c5f2e39def45eb9ca24f538adf3f9196José Fonseca   STW_EXTENSION_ENTRY( wglQueryPbufferARB ),
59c4a43873c5f2e39def45eb9ca24f538adf3f9196José Fonseca
60db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca   /* WGL_ARB_pixel_format */
6119068d93c8f0f1d2b8809248266bf6da3dc6abd7José Fonseca   STW_EXTENSION_ENTRY( wglChoosePixelFormatARB ),
6219068d93c8f0f1d2b8809248266bf6da3dc6abd7José Fonseca   STW_EXTENSION_ENTRY( wglGetPixelFormatAttribfvARB ),
6319068d93c8f0f1d2b8809248266bf6da3dc6abd7José Fonseca   STW_EXTENSION_ENTRY( wglGetPixelFormatAttribivARB ),
64db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca
65c384ccb0c4f50f72bafdfb693d0aa36b4304a064José Fonseca   /* WGL_EXT_extensions_string */
66c384ccb0c4f50f72bafdfb693d0aa36b4304a064José Fonseca   STW_EXTENSION_ENTRY( wglGetExtensionsStringEXT ),
67c384ccb0c4f50f72bafdfb693d0aa36b4304a064José Fonseca
686c913411d39fd68eee1c1eeee7b6e81db9785fd1Keith Whitwell   /* WGL_EXT_swap_interval */
696c913411d39fd68eee1c1eeee7b6e81db9785fd1Keith Whitwell   STW_EXTENSION_ENTRY( wglGetSwapIntervalEXT ),
706c913411d39fd68eee1c1eeee7b6e81db9785fd1Keith Whitwell   STW_EXTENSION_ENTRY( wglSwapIntervalEXT ),
716c913411d39fd68eee1c1eeee7b6e81db9785fd1Keith Whitwell
724e1e18a772061fe3573f2ee2bf6afe447ee66fd6José Fonseca   /* WGL_EXT_gallium ? */
734e1e18a772061fe3573f2ee2bf6afe447ee66fd6José Fonseca   STW_EXTENSION_ENTRY( wglGetGalliumScreenMESA ),
744e1e18a772061fe3573f2ee2bf6afe447ee66fd6José Fonseca   STW_EXTENSION_ENTRY( wglCreateGalliumContextMESA ),
754e1e18a772061fe3573f2ee2bf6afe447ee66fd6José Fonseca
760c6a2c78fdd8b4ae620a9f449cab65c4be21a9a1Morgan Armand   /* WGL_ARB_create_context */
770c6a2c78fdd8b4ae620a9f449cab65c4be21a9a1Morgan Armand   STW_EXTENSION_ENTRY( wglCreateContextAttribsARB ),
780c6a2c78fdd8b4ae620a9f449cab65c4be21a9a1Morgan Armand
79db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca   { NULL, NULL }
80db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca};
81db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca
8231f1571d1f6e325c16833afbb6e15b61561e5f1fJosé FonsecaPROC APIENTRY
8331f1571d1f6e325c16833afbb6e15b61561e5f1fJosé FonsecaDrvGetProcAddress(
84db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca   LPCSTR lpszProc )
85db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca{
8619068d93c8f0f1d2b8809248266bf6da3dc6abd7José Fonseca   const struct stw_extension_entry *entry;
87db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca
88e6b66210def2c10f703c2a990b9652ea5419ebbeJosé Fonseca   if (!stw_dev)
89e6b66210def2c10f703c2a990b9652ea5419ebbeJosé Fonseca      return NULL;
90e6b66210def2c10f703c2a990b9652ea5419ebbeJosé Fonseca
91e8c4663c11cfbb80ed23b1581cf1f3ccaef28bceJosé Fonseca   if (lpszProc[0] == 'w' && lpszProc[1] == 'g' && lpszProc[2] == 'l')
92e8c4663c11cfbb80ed23b1581cf1f3ccaef28bceJosé Fonseca      for (entry = stw_extension_entries; entry->name; entry++)
93e8c4663c11cfbb80ed23b1581cf1f3ccaef28bceJosé Fonseca         if (strcmp( lpszProc, entry->name ) == 0)
94e8c4663c11cfbb80ed23b1581cf1f3ccaef28bceJosé Fonseca            return entry->proc;
95db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca
96e8c4663c11cfbb80ed23b1581cf1f3ccaef28bceJosé Fonseca   if (lpszProc[0] == 'g' && lpszProc[1] == 'l')
974e1e18a772061fe3573f2ee2bf6afe447ee66fd6José Fonseca      return (PROC) _glapi_get_proc_address( lpszProc );
98db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca
99db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca   return NULL;
100db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca}
101