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