On Thu, Oct 27, 2011 at 9:04 PM, Jose Fonseca <jfons...@vmware.com> wrote: > Margan, > > The code in the diff has wrapped-around and can't be applied automatically. > > Please re-send the patch as an attachment. > > Jose > > ----- Original Message ----- >> Here is the modified patch. I just checked if it works but doesn't >> have a good test case for it. But I will write one for sure! >> >> --- >> src/gallium/state_trackers/wgl/SConscript | 1 + >> src/gallium/state_trackers/wgl/stw_context.c | 47 +++++++- >> src/gallium/state_trackers/wgl/stw_context.h | 3 + >> src/gallium/state_trackers/wgl/stw_ext_context.c | 119 >> ++++++++++++++++++++ >> .../state_trackers/wgl/stw_getprocaddress.c | 3 + >> 5 files changed, 166 insertions(+), 7 deletions(-) >> create mode 100644 src/gallium/state_trackers/wgl/stw_ext_context.c >> >> diff --git a/src/gallium/state_trackers/wgl/SConscript >> b/src/gallium/state_trackers/wgl/SConscript >> index 7cb953b..1014b45 100644 >> --- a/src/gallium/state_trackers/wgl/SConscript >> +++ b/src/gallium/state_trackers/wgl/SConscript >> @@ -22,6 +22,7 @@ if not env['gles']: >> sources = [ >> 'stw_context.c', >> 'stw_device.c', >> + 'stw_ext_context.c', >> 'stw_ext_extensionsstring.c', >> 'stw_ext_gallium.c', >> 'stw_ext_pbuffer.c', >> diff --git a/src/gallium/state_trackers/wgl/stw_context.c >> b/src/gallium/state_trackers/wgl/stw_context.c >> index c2839fe..6cc8a83 100644 >> --- a/src/gallium/state_trackers/wgl/stw_context.c >> +++ b/src/gallium/state_trackers/wgl/stw_context.c >> @@ -27,6 +27,11 @@ >> >> #include <windows.h> >> >> +#define WGL_WGLEXT_PROTOTYPES >> + >> +#include <GL/gl.h> >> +#include <GL/wglext.h> >> + >> #include "pipe/p_compiler.h" >> #include "pipe/p_context.h" >> #include "pipe/p_state.h" >> @@ -121,23 +126,41 @@ DrvCreateLayerContext( >> HDC hdc, >> INT iLayerPlane ) >> { >> + return stw_create_context_attribs(hdc, iLayerPlane, 0, 1, 0, 0, >> WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB); >> +} >> + >> +DHGLRC >> +stw_create_context_attribs( >> + HDC hdc, >> + INT iLayerPlane, >> + DHGLRC hShareContext, >> + int majorVersion, int minorVersion, >> + int contextFlags, int profileMask) >> +{ >> int iPixelFormat; >> const struct stw_pixelformat_info *pfi; >> struct st_context_attribs attribs; >> struct stw_context *ctx = NULL; >> - >> - if(!stw_dev) >> + struct stw_context *shareCtx = NULL; >> + >> + if (!stw_dev) >> return 0; >> - >> + >> if (iLayerPlane != 0) >> return 0; >> >> iPixelFormat = GetPixelFormat(hdc); >> if(!iPixelFormat) >> return 0; >> - >> + >> pfi = stw_pixelformat_get_info( iPixelFormat - 1 ); >> - >> + >> + if (hShareContext != 0) { >> + pipe_mutex_lock( stw_dev->ctx_mutex ); >> + shareCtx = stw_lookup_context_locked( hShareContext ); >> + pipe_mutex_unlock( stw_dev->ctx_mutex ); >> + } >> + >> ctx = CALLOC_STRUCT( stw_context ); >> if (ctx == NULL) >> goto no_ctx; >> @@ -148,10 +171,20 @@ DrvCreateLayerContext( >> memset(&attribs, 0, sizeof(attribs)); >> attribs.profile = ST_PROFILE_DEFAULT; >> attribs.visual = pfi->stvis; >> + attribs.major = majorVersion; >> + attribs.minor = minorVersion; >> + if (contextFlags & WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB) >> + attribs.flags |= ST_CONTEXT_FLAG_FORWARD_COMPATIBLE; >> + if (contextFlags & WGL_CONTEXT_DEBUG_BIT_ARB) >> + attribs.flags |= ST_CONTEXT_FLAG_DEBUG; >> + if (profileMask & WGL_CONTEXT_CORE_PROFILE_BIT_ARB) >> + attribs.flags |= ST_CONTEXT_FLAG_CORE_PROFILE; >> + if (profileMask & WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB) >> + attribs.flags |= ST_CONTEXT_FLAG_COMPATIBLE_PROFILE; >> >> ctx->st = stw_dev->stapi->create_context(stw_dev->stapi, >> - stw_dev->smapi, &attribs, NULL); >> - if (ctx->st == NULL) >> + stw_dev->smapi, &attribs, shareCtx ? shareCtx->st : NULL); >> + if (ctx->st == NULL) >> goto no_st_ctx; >> >> ctx->st->st_manager_private = (void *) ctx; >> diff --git a/src/gallium/state_trackers/wgl/stw_context.h >> b/src/gallium/state_trackers/wgl/stw_context.h >> index 0bbed84..07a5c7d 100644 >> --- a/src/gallium/state_trackers/wgl/stw_context.h >> +++ b/src/gallium/state_trackers/wgl/stw_context.h >> @@ -43,6 +43,9 @@ struct stw_context >> struct stw_framebuffer *current_framebuffer; >> }; >> >> +DHGLRC stw_create_context_attribs( HDC hdc, INT iLayerPlane, DHGLRC >> hShareContext, >> + int majorVersion, int >> minorVersion, int contextFlags, int profileMask ); >> + >> DHGLRC stw_get_current_context( void ); >> >> HDC stw_get_current_dc( void ); >> diff --git a/src/gallium/state_trackers/wgl/stw_ext_context.c >> b/src/gallium/state_trackers/wgl/stw_ext_context.c >> new file mode 100644 >> index 0000000..a3470ac >> --- /dev/null >> +++ b/src/gallium/state_trackers/wgl/stw_ext_context.c >> @@ -0,0 +1,119 @@ >> +/* >> + * Mesa 3-D graphics library >> + * Version: 7.11 >> + * >> + * Copyright (C) 2011 Morgan Armand <morgan.de...@gmail.com> >> + * >> + * Permission is hereby granted, free of charge, to any person >> obtaining a >> + * copy of this software and associated documentation files (the >> "Software"), >> + * to deal in the Software without restriction, including without >> limitation >> + * the rights to use, copy, modify, merge, publish, distribute, >> sublicense, >> + * and/or sell copies of the Software, and to permit persons to whom >> the >> + * Software is furnished to do so, subject to the following >> conditions: >> + * >> + * The above copyright notice and this permission notice shall be >> included >> + * in all copies or substantial portions of the Software. >> + * >> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, >> EXPRESS >> + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF >> MERCHANTABILITY, >> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO >> EVENT SHALL >> + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, >> WHETHER IN >> + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR >> IN >> + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE >> SOFTWARE. >> + */ >> + >> +#include <windows.h> >> + >> +#define WGL_WGLEXT_PROTOTYPES >> + >> +#include <GL/gl.h> >> +#include <GL/wglext.h> >> + >> +#include "stw_icd.h" >> +#include "stw_context.h" >> + >> +HGLRC WINAPI >> +wglCreateContextAttribsARB(HDC hDC, HGLRC hShareContext, const int >> *attribList) >> +{ >> + int majorVersion = 1, minorVersion = 0, layerPlane = 0; >> + int contextFlags = 0x0; >> + int profileMask = WGL_CONTEXT_CORE_PROFILE_BIT_ARB; >> + int i; >> + BOOL done = FALSE; >> + >> + /* parse attrib_list */ >> + if (attribList) { >> + for (i = 0; !done && attribList[i]; i++) { >> + switch (attribList[i]) { >> + case WGL_CONTEXT_MAJOR_VERSION_ARB: >> + majorVersion = attribList[++i]; >> + break; >> + case WGL_CONTEXT_MINOR_VERSION_ARB: >> + minorVersion = attribList[++i]; >> + break; >> + case WGL_CONTEXT_LAYER_PLANE_ARB: >> + layerPlane = attribList[++i]; >> + break; >> + case WGL_CONTEXT_FLAGS_ARB: >> + contextFlags = attribList[++i]; >> + break; >> + case WGL_CONTEXT_PROFILE_MASK_ARB: >> + profileMask = attribList[++i]; >> + break; >> + case 0: >> + /* end of list */ >> + done = TRUE; >> + break; >> + default: >> + /* bad attribute */ >> + SetLastError(ERROR_INVALID_PARAMETER); >> + return NULL; >> + } >> + } >> + } >> + >> + /* check version (generate ERROR_INVALID_VERSION_ARB if bad) */ >> + switch (majorVersion) { >> + case 1: >> + if (minorVersion < 0 || minorVersion > 5) { >> + SetLastError(ERROR_INVALID_VERSION_ARB); >> + return NULL; >> + } >> + break; >> + case 2: >> + if (minorVersion < 0 || minorVersion > 1) { >> + SetLastError(ERROR_INVALID_VERSION_ARB); >> + return NULL; >> + } >> + break; >> + case 3: >> + if (minorVersion < 0 || minorVersion > 3) { >> + SetLastError(ERROR_INVALID_VERSION_ARB); >> + return NULL; >> + } >> + break; >> + case 4: >> + if (minorVersion < 0 || minorVersion > 2) { >> + SetLastError(ERROR_INVALID_VERSION_ARB); >> + return NULL; >> + } >> + break; >> + default: >> + return NULL; >> + } >> + >> + if ((contextFlags & WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB) && >> majorVersion < 3) { >> + SetLastError(ERROR_INVALID_VERSION_ARB); >> + return NULL; >> + } >> + >> + /* check profileMask */ >> + if (profileMask != WGL_CONTEXT_CORE_PROFILE_BIT_ARB && >> + profileMask != WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB) { >> + SetLastError(ERROR_INVALID_PROFILE_ARB); >> + return NULL; >> + } >> + >> + return (HGLRC) stw_create_context_attribs( hDC, layerPlane, >> (DHGLRC)(UINT_PTR)hShareContext, >> + majorVersion, >> minorVersion, contextFlags, profileMask ); >> +} >> diff --git a/src/gallium/state_trackers/wgl/stw_getprocaddress.c >> b/src/gallium/state_trackers/wgl/stw_getprocaddress.c >> index b0aef94..a1df44c 100644 >> --- a/src/gallium/state_trackers/wgl/stw_getprocaddress.c >> +++ b/src/gallium/state_trackers/wgl/stw_getprocaddress.c >> @@ -73,6 +73,9 @@ static const struct stw_extension_entry >> stw_extension_entries[] = { >> STW_EXTENSION_ENTRY( wglGetGalliumScreenMESA ), >> STW_EXTENSION_ENTRY( wglCreateGalliumContextMESA ), >> >> + /* WGL_ARB_create_context */ >> + STW_EXTENSION_ENTRY( wglCreateContextAttribsARB ), >> + >> { NULL, NULL } >> }; >> >> -- >> 1.7.7.msysgit.1 >> >> On Mon, Oct 24, 2011 at 5:37 PM, Jose Fonseca <jfons...@vmware.com> >> wrote: >> > Looks good to me. Just a few minor requests: >> > - The APIENTRY keyword in stw_create_context_attribs() is >> > unnecessary given it is an internal API. >> > - Please move the stw_create_context_attribs() immediately after >> > DrvCreateLayerContext so that the code doesn't move around so >> > much, and the diff is cleaner. >> > >> > BTW, do you have test case for this? It would be really good have >> > one in piglit and/or mesa demos. >> > >> > Jose >> > >> > ----- Original Message ----- >> >> Sorry about the missing file. Here is the patch taking into >> >> account >> >> your remarks. >> >> >> >> --- >> >> src/gallium/state_trackers/wgl/SConscript | 1 + >> >> src/gallium/state_trackers/wgl/stw_context.c | 130 >> >> ++++++++++++-------- >> >> src/gallium/state_trackers/wgl/stw_context.h | 3 + >> >> src/gallium/state_trackers/wgl/stw_ext_context.c | 119 >> >> ++++++++++++++++++ >> >> .../state_trackers/wgl/stw_getprocaddress.c | 3 + >> >> 5 files changed, 207 insertions(+), 49 deletions(-) >> >> create mode 100644 >> >> src/gallium/state_trackers/wgl/stw_ext_context.c >> >> >> >> diff --git a/src/gallium/state_trackers/wgl/SConscript >> >> b/src/gallium/state_trackers/wgl/SConscript >> >> index 7cb953b..1014b45 100644 >> >> --- a/src/gallium/state_trackers/wgl/SConscript >> >> +++ b/src/gallium/state_trackers/wgl/SConscript >> >> @@ -22,6 +22,7 @@ if not env['gles']: >> >> sources = [ >> >> 'stw_context.c', >> >> 'stw_device.c', >> >> + 'stw_ext_context.c', >> >> 'stw_ext_extensionsstring.c', >> >> 'stw_ext_gallium.c', >> >> 'stw_ext_pbuffer.c', >> >> diff --git a/src/gallium/state_trackers/wgl/stw_context.c >> >> b/src/gallium/state_trackers/wgl/stw_context.c >> >> index c2839fe..152984a 100644 >> >> --- a/src/gallium/state_trackers/wgl/stw_context.c >> >> +++ b/src/gallium/state_trackers/wgl/stw_context.c >> >> @@ -27,6 +27,11 @@ >> >> >> >> #include <windows.h> >> >> >> >> +#define WGL_WGLEXT_PROTOTYPES >> >> + >> >> +#include <GL/gl.h> >> >> +#include <GL/wglext.h> >> >> + >> >> #include "pipe/p_compiler.h" >> >> #include "pipe/p_context.h" >> >> #include "pipe/p_state.h" >> >> @@ -121,55 +126,7 @@ DrvCreateLayerContext( >> >> HDC hdc, >> >> INT iLayerPlane ) >> >> { >> >> - int iPixelFormat; >> >> - const struct stw_pixelformat_info *pfi; >> >> - struct st_context_attribs attribs; >> >> - struct stw_context *ctx = NULL; >> >> - >> >> - if(!stw_dev) >> >> - return 0; >> >> - >> >> - if (iLayerPlane != 0) >> >> - return 0; >> >> - >> >> - iPixelFormat = GetPixelFormat(hdc); >> >> - if(!iPixelFormat) >> >> - return 0; >> >> - >> >> - pfi = stw_pixelformat_get_info( iPixelFormat - 1 ); >> >> - >> >> - ctx = CALLOC_STRUCT( stw_context ); >> >> - if (ctx == NULL) >> >> - goto no_ctx; >> >> - >> >> - ctx->hdc = hdc; >> >> - ctx->iPixelFormat = iPixelFormat; >> >> - >> >> - memset(&attribs, 0, sizeof(attribs)); >> >> - attribs.profile = ST_PROFILE_DEFAULT; >> >> - attribs.visual = pfi->stvis; >> >> - >> >> - ctx->st = stw_dev->stapi->create_context(stw_dev->stapi, >> >> - stw_dev->smapi, &attribs, NULL); >> >> - if (ctx->st == NULL) >> >> - goto no_st_ctx; >> >> - >> >> - ctx->st->st_manager_private = (void *) ctx; >> >> - >> >> - pipe_mutex_lock( stw_dev->ctx_mutex ); >> >> - ctx->dhglrc = handle_table_add(stw_dev->ctx_table, ctx); >> >> - pipe_mutex_unlock( stw_dev->ctx_mutex ); >> >> - if (!ctx->dhglrc) >> >> - goto no_hglrc; >> >> - >> >> - return ctx->dhglrc; >> >> - >> >> -no_hglrc: >> >> - ctx->st->destroy(ctx->st); >> >> -no_st_ctx: >> >> - FREE(ctx); >> >> -no_ctx: >> >> - return 0; >> >> + return stw_create_context_attribs(hdc, iLayerPlane, 0, 1, 0, >> >> 0, >> >> WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB); >> >> } >> >> >> >> BOOL APIENTRY >> >> @@ -232,6 +189,81 @@ DrvReleaseContext( >> >> return TRUE; >> >> } >> >> >> >> +DHGLRC APIENTRY >> >> +stw_create_context_attribs( >> >> + HDC hdc, >> >> + INT iLayerPlane, >> >> + DHGLRC hShareContext, >> >> + int majorVersion, int minorVersion, >> >> + int contextFlags, int profileMask) >> >> +{ >> >> + int iPixelFormat; >> >> + const struct stw_pixelformat_info *pfi; >> >> + struct st_context_attribs attribs; >> >> + struct stw_context *ctx = NULL; >> >> + struct stw_context *shareCtx = NULL; >> >> + >> >> + if(!stw_dev) >> >> + return 0; >> >> + >> >> + if (iLayerPlane != 0) >> >> + return 0; >> >> + >> >> + iPixelFormat = GetPixelFormat(hdc); >> >> + if(!iPixelFormat) >> >> + return 0; >> >> + >> >> + pfi = stw_pixelformat_get_info( iPixelFormat - 1 ); >> >> + >> >> + if (hShareContext != 0) { >> >> + pipe_mutex_lock( stw_dev->ctx_mutex ); >> >> + shareCtx = stw_lookup_context_locked( hShareContext ); >> >> + pipe_mutex_unlock( stw_dev->ctx_mutex ); >> >> + } >> >> + >> >> + ctx = CALLOC_STRUCT( stw_context ); >> >> + if (ctx == NULL) >> >> + goto no_ctx; >> >> + >> >> + ctx->hdc = hdc; >> >> + ctx->iPixelFormat = iPixelFormat; >> >> + >> >> + memset(&attribs, 0, sizeof(attribs)); >> >> + attribs.profile = ST_PROFILE_DEFAULT; >> >> + attribs.visual = pfi->stvis; >> >> + attribs.major = majorVersion; >> >> + attribs.minor = minorVersion; >> >> + if (contextFlags & WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB) >> >> + attribs.flags |= ST_CONTEXT_FLAG_FORWARD_COMPATIBLE; >> >> + if (contextFlags & WGL_CONTEXT_DEBUG_BIT_ARB) >> >> + attribs.flags |= ST_CONTEXT_FLAG_DEBUG; >> >> + if (profileMask & WGL_CONTEXT_CORE_PROFILE_BIT_ARB) >> >> + attribs.flags |= ST_CONTEXT_FLAG_CORE_PROFILE; >> >> + if (profileMask & WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB) >> >> + attribs.flags |= ST_CONTEXT_FLAG_COMPATIBLE_PROFILE; >> >> + >> >> + ctx->st = stw_dev->stapi->create_context(stw_dev->stapi, >> >> + stw_dev->smapi, &attribs, shareCtx ? shareCtx->st : >> >> NULL); >> >> + if (ctx->st == NULL) >> >> + goto no_st_ctx; >> >> + >> >> + ctx->st->st_manager_private = (void *) ctx; >> >> + >> >> + pipe_mutex_lock( stw_dev->ctx_mutex ); >> >> + ctx->dhglrc = handle_table_add(stw_dev->ctx_table, ctx); >> >> + pipe_mutex_unlock( stw_dev->ctx_mutex ); >> >> + if (!ctx->dhglrc) >> >> + goto no_hglrc; >> >> + >> >> + return ctx->dhglrc; >> >> + >> >> +no_hglrc: >> >> + ctx->st->destroy(ctx->st); >> >> +no_st_ctx: >> >> + FREE(ctx); >> >> +no_ctx: >> >> + return 0; >> >> +} >> >> >> >> DHGLRC >> >> stw_get_current_context( void ) >> >> diff --git a/src/gallium/state_trackers/wgl/stw_context.h >> >> b/src/gallium/state_trackers/wgl/stw_context.h >> >> index 0bbed84..103768b 100644 >> >> --- a/src/gallium/state_trackers/wgl/stw_context.h >> >> +++ b/src/gallium/state_trackers/wgl/stw_context.h >> >> @@ -43,6 +43,9 @@ struct stw_context >> >> struct stw_framebuffer *current_framebuffer; >> >> }; >> >> >> >> +DHGLRC APIENTRY stw_create_context_attribs( HDC hdc, INT >> >> iLayerPlane, >> >> DHGLRC hShareContext, >> >> + int majorVersion, int >> >> minorVersion, int contextFlags, int profileMask ); >> >> + >> >> DHGLRC stw_get_current_context( void ); >> >> >> >> HDC stw_get_current_dc( void ); >> >> diff --git a/src/gallium/state_trackers/wgl/stw_ext_context.c >> >> b/src/gallium/state_trackers/wgl/stw_ext_context.c >> >> new file mode 100644 >> >> index 0000000..a3470ac >> >> --- /dev/null >> >> +++ b/src/gallium/state_trackers/wgl/stw_ext_context.c >> >> @@ -0,0 +1,119 @@ >> >> +/* >> >> + * Mesa 3-D graphics library >> >> + * Version: 7.11 >> >> + * >> >> + * Copyright (C) 2011 Morgan Armand <morgan.de...@gmail.com> >> >> + * >> >> + * Permission is hereby granted, free of charge, to any person >> >> obtaining a >> >> + * copy of this software and associated documentation files (the >> >> "Software"), >> >> + * to deal in the Software without restriction, including without >> >> limitation >> >> + * the rights to use, copy, modify, merge, publish, distribute, >> >> sublicense, >> >> + * and/or sell copies of the Software, and to permit persons to >> >> whom >> >> the >> >> + * Software is furnished to do so, subject to the following >> >> conditions: >> >> + * >> >> + * The above copyright notice and this permission notice shall be >> >> included >> >> + * in all copies or substantial portions of the Software. >> >> + * >> >> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY >> >> KIND, >> >> EXPRESS >> >> + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF >> >> MERCHANTABILITY, >> >> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO >> >> EVENT SHALL >> >> + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER >> >> LIABILITY, >> >> WHETHER IN >> >> + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF >> >> OR >> >> IN >> >> + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN >> >> THE >> >> SOFTWARE. >> >> + */ >> >> + >> >> +#include <windows.h> >> >> + >> >> +#define WGL_WGLEXT_PROTOTYPES >> >> + >> >> +#include <GL/gl.h> >> >> +#include <GL/wglext.h> >> >> + >> >> +#include "stw_icd.h" >> >> +#include "stw_context.h" >> >> + >> >> +HGLRC WINAPI >> >> +wglCreateContextAttribsARB(HDC hDC, HGLRC hShareContext, const >> >> int >> >> *attribList) >> >> +{ >> >> + int majorVersion = 1, minorVersion = 0, layerPlane = 0; >> >> + int contextFlags = 0x0; >> >> + int profileMask = WGL_CONTEXT_CORE_PROFILE_BIT_ARB; >> >> + int i; >> >> + BOOL done = FALSE; >> >> + >> >> + /* parse attrib_list */ >> >> + if (attribList) { >> >> + for (i = 0; !done && attribList[i]; i++) { >> >> + switch (attribList[i]) { >> >> + case WGL_CONTEXT_MAJOR_VERSION_ARB: >> >> + majorVersion = attribList[++i]; >> >> + break; >> >> + case WGL_CONTEXT_MINOR_VERSION_ARB: >> >> + minorVersion = attribList[++i]; >> >> + break; >> >> + case WGL_CONTEXT_LAYER_PLANE_ARB: >> >> + layerPlane = attribList[++i]; >> >> + break; >> >> + case WGL_CONTEXT_FLAGS_ARB: >> >> + contextFlags = attribList[++i]; >> >> + break; >> >> + case WGL_CONTEXT_PROFILE_MASK_ARB: >> >> + profileMask = attribList[++i]; >> >> + break; >> >> + case 0: >> >> + /* end of list */ >> >> + done = TRUE; >> >> + break; >> >> + default: >> >> + /* bad attribute */ >> >> + SetLastError(ERROR_INVALID_PARAMETER); >> >> + return NULL; >> >> + } >> >> + } >> >> + } >> >> + >> >> + /* check version (generate ERROR_INVALID_VERSION_ARB if bad) >> >> */ >> >> + switch (majorVersion) { >> >> + case 1: >> >> + if (minorVersion < 0 || minorVersion > 5) { >> >> + SetLastError(ERROR_INVALID_VERSION_ARB); >> >> + return NULL; >> >> + } >> >> + break; >> >> + case 2: >> >> + if (minorVersion < 0 || minorVersion > 1) { >> >> + SetLastError(ERROR_INVALID_VERSION_ARB); >> >> + return NULL; >> >> + } >> >> + break; >> >> + case 3: >> >> + if (minorVersion < 0 || minorVersion > 3) { >> >> + SetLastError(ERROR_INVALID_VERSION_ARB); >> >> + return NULL; >> >> + } >> >> + break; >> >> + case 4: >> >> + if (minorVersion < 0 || minorVersion > 2) { >> >> + SetLastError(ERROR_INVALID_VERSION_ARB); >> >> + return NULL; >> >> + } >> >> + break; >> >> + default: >> >> + return NULL; >> >> + } >> >> + >> >> + if ((contextFlags & WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB) && >> >> majorVersion < 3) { >> >> + SetLastError(ERROR_INVALID_VERSION_ARB); >> >> + return NULL; >> >> + } >> >> + >> >> + /* check profileMask */ >> >> + if (profileMask != WGL_CONTEXT_CORE_PROFILE_BIT_ARB && >> >> + profileMask != WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB) >> >> { >> >> + SetLastError(ERROR_INVALID_PROFILE_ARB); >> >> + return NULL; >> >> + } >> >> + >> >> + return (HGLRC) stw_create_context_attribs( hDC, layerPlane, >> >> (DHGLRC)(UINT_PTR)hShareContext, >> >> + majorVersion, >> >> minorVersion, contextFlags, profileMask ); >> >> +} >> >> diff --git a/src/gallium/state_trackers/wgl/stw_getprocaddress.c >> >> b/src/gallium/state_trackers/wgl/stw_getprocaddress.c >> >> index b0aef94..a1df44c 100644 >> >> --- a/src/gallium/state_trackers/wgl/stw_getprocaddress.c >> >> +++ b/src/gallium/state_trackers/wgl/stw_getprocaddress.c >> >> @@ -73,6 +73,9 @@ static const struct stw_extension_entry >> >> stw_extension_entries[] = { >> >> STW_EXTENSION_ENTRY( wglGetGalliumScreenMESA ), >> >> STW_EXTENSION_ENTRY( wglCreateGalliumContextMESA ), >> >> >> >> + /* WGL_ARB_create_context */ >> >> + STW_EXTENSION_ENTRY( wglCreateContextAttribsARB ), >> >> + >> >> { NULL, NULL } >> >> }; >> >> >> >> -- >> >> 1.7.7.msysgit.1 >> >> >> >> On Wed, Oct 19, 2011 at 11:51 PM, Jose Fonseca >> >> <jfons...@vmware.com> >> >> wrote: >> >> > ----- Original Message ----- >> >> >> --- >> >> >> src/gallium/state_trackers/wgl/SConscript | 1 + >> >> >> src/gallium/state_trackers/wgl/stw_context.c | 39 >> >> >> ++++++++++++++++++-- >> >> >> .../state_trackers/wgl/stw_getprocaddress.c | 3 ++ >> >> >> src/gallium/state_trackers/wgl/stw_icd.h | 8 ++++ >> >> >> 4 files changed, 48 insertions(+), 3 deletions(-) >> >> >> >> >> >> diff --git a/src/gallium/state_trackers/wgl/SConscript >> >> >> b/src/gallium/state_trackers/wgl/SConscript >> >> >> index 7cb953b..1014b45 100644 >> >> >> --- a/src/gallium/state_trackers/wgl/SConscript >> >> >> +++ b/src/gallium/state_trackers/wgl/SConscript >> >> >> @@ -22,6 +22,7 @@ if not env['gles']: >> >> >> sources = [ >> >> >> 'stw_context.c', >> >> >> 'stw_device.c', >> >> >> + 'stw_ext_context.c', >> >> > >> >> > The file "stw_ext_context.c" was not included in the patch. >> >> > Please >> >> > add it and resend. >> >> > >> >> >> 'stw_ext_extensionsstring.c', >> >> >> 'stw_ext_gallium.c', >> >> >> 'stw_ext_pbuffer.c', >> >> >> diff --git a/src/gallium/state_trackers/wgl/stw_context.c >> >> >> b/src/gallium/state_trackers/wgl/stw_context.c >> >> >> index c2839fe..875d713 100644 >> >> >> --- a/src/gallium/state_trackers/wgl/stw_context.c >> >> >> +++ b/src/gallium/state_trackers/wgl/stw_context.c >> >> >> @@ -27,6 +27,11 @@ >> >> >> >> >> >> #include <windows.h> >> >> >> >> >> >> +#define WGL_WGLEXT_PROTOTYPES >> >> >> + >> >> >> +#include <GL/gl.h> >> >> >> +#include <GL/wglext.h> >> >> >> + >> >> >> #include "pipe/p_compiler.h" >> >> >> #include "pipe/p_context.h" >> >> >> #include "pipe/p_state.h" >> >> >> @@ -121,11 +126,23 @@ DrvCreateLayerContext( >> >> >> HDC hdc, >> >> >> INT iLayerPlane ) >> >> >> { >> >> >> + return DrvCreateContextAttribs(hdc, iLayerPlane, 0, 1, 0, >> >> >> 0, >> >> >> WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB); >> >> >> +} >> >> >> + >> >> >> +DHGLRC APIENTRY >> >> >> +DrvCreateContextAttribs( >> >> >> + HDC hdc, >> >> >> + INT iLayerPlane, >> >> >> + DHGLRC hShareContext, >> >> >> + int majorVersion, int minorVersion, >> >> >> + int contextFlags, int profileMask) >> >> >> +{ >> >> > >> >> > The Drv* prefix is for entrypoints that are part of the ICD. But >> >> > don't think that a "DrvCreateContextAttribs" has been defined by >> >> > Microsoft as part of the ICD. >> >> > >> >> > If so, please use a different funtion name, e.g., >> >> > stw_create_context_attribs, and declare in it stw_context.h, >> >> > instead of stw_icd.h >> >> > >> >> > >> >> > Jose >> >> > >> >> >> > >> >
0001-implement-WGL_ARB_create_context.patch
Description: Binary data
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev