diff options
author | Ian Romanick <ian.d.romanick@intel.com> | 2011-12-05 10:56:07 -0800 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2012-05-23 13:07:51 -0700 |
commit | 96d74138b1c0273e88933220d99a893858b649cd (patch) | |
tree | 92c96f2a96c41a449ff82388fdff2dc995825c4e | |
parent | 62f06b0dcde13cb87bc3d0c5ff86d8db7e3ff0ef (diff) |
glx: Extend __GLXscreen::createContext to take attributes
The attributes will be used for glXCreateContextAttribsARB additions
in follow-on patches.
v2: Add missing 'int *error' parameters noticed by Christopher James
Halse Rogers.
v3: Remove redundant 'int err;' declaration noticed by Christopher
James Halse Rogers. This was supposed to be in v2, but I missed it.
v4: Add comma missing from additions in v2. Ugh.
Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Reviewed-by: Christopher James Halse Rogers <christopher.halse.rogers@canonical.com>
-rw-r--r-- | glx/glxcmds.c | 10 | ||||
-rw-r--r-- | glx/glxdri.c | 12 | ||||
-rw-r--r-- | glx/glxdri2.c | 5 | ||||
-rw-r--r-- | glx/glxdriswrast.c | 12 | ||||
-rw-r--r-- | glx/glxscreens.h | 5 |
5 files changed, 38 insertions, 6 deletions
diff --git a/glx/glxcmds.c b/glx/glxcmds.c index 5c70afabe..308c14a4e 100644 --- a/glx/glxcmds.c +++ b/glx/glxcmds.c @@ -276,8 +276,14 @@ DoCreateContext(__GLXclientState * cl, GLXContextID gcId, /* ** Allocate memory for the new context */ - if (!isDirect) - glxc = pGlxScreen->createContext(pGlxScreen, config, shareglxc); + if (!isDirect) { + /* Without any attributes, the only error that the driver should be + * able to generate is BadAlloc. As result, just drop the error + * returned from the driver on the floor. + */ + glxc = pGlxScreen->createContext(pGlxScreen, config, shareglxc, + 0, NULL, &err); + } else glxc = __glXdirectContextCreate(pGlxScreen, config, shareglxc); if (!glxc) { diff --git a/glx/glxdri.c b/glx/glxdri.c index b2209c551..666636e98 100644 --- a/glx/glxdri.c +++ b/glx/glxdri.c @@ -599,7 +599,10 @@ __glXDRIscreenDestroy(__GLXscreen * baseScreen) static __GLXcontext * __glXDRIscreenCreateContext(__GLXscreen * baseScreen, __GLXconfig * glxConfig, - __GLXcontext * baseShareContext) + __GLXcontext * baseShareContext, + unsigned num_attribs, + const uint32_t *attribs, + int *error) { __GLXDRIscreen *screen = (__GLXDRIscreen *) baseScreen; __GLXDRIcontext *context, *shareContext; @@ -611,6 +614,13 @@ __glXDRIscreenCreateContext(__GLXscreen * baseScreen, drm_context_t hwContext; ScreenPtr pScreen = baseScreen->pScreen; + /* DRI1 cannot support createContextAttribs, so these parameters will + * never be used. + */ + (void) num_attribs; + (void) attribs; + (void) error; + shareContext = (__GLXDRIcontext *) baseShareContext; if (shareContext) driShare = shareContext->driContext; diff --git a/glx/glxdri2.c b/glx/glxdri2.c index cceb12697..044016d16 100644 --- a/glx/glxdri2.c +++ b/glx/glxdri2.c @@ -380,7 +380,10 @@ __glXDRIscreenDestroy(__GLXscreen * baseScreen) static __GLXcontext * __glXDRIscreenCreateContext(__GLXscreen * baseScreen, __GLXconfig * glxConfig, - __GLXcontext * baseShareContext) + __GLXcontext * baseShareContext, + unsigned num_attribs, + const uint32_t *attribs, + int *error) { __GLXDRIscreen *screen = (__GLXDRIscreen *) baseScreen; __GLXDRIcontext *context, *shareContext; diff --git a/glx/glxdriswrast.c b/glx/glxdriswrast.c index c69b4d258..b47839868 100644 --- a/glx/glxdriswrast.c +++ b/glx/glxdriswrast.c @@ -257,7 +257,10 @@ __glXDRIscreenDestroy(__GLXscreen * baseScreen) static __GLXcontext * __glXDRIscreenCreateContext(__GLXscreen * baseScreen, __GLXconfig * glxConfig, - __GLXcontext * baseShareContext) + __GLXcontext * baseShareContext, + unsigned num_attribs, + const uint32_t *attribs, + int *error) { __GLXDRIscreen *screen = (__GLXDRIscreen *) baseScreen; __GLXDRIcontext *context, *shareContext; @@ -265,6 +268,13 @@ __glXDRIscreenCreateContext(__GLXscreen * baseScreen, const __DRIcoreExtension *core = screen->core; __DRIcontext *driShare; + /* DRISWRAST won't support createContextAttribs, so these parameters will + * never be used. + */ + (void) num_attribs; + (void) attribs; + (void) error; + shareContext = (__GLXDRIcontext *) baseShareContext; if (shareContext) driShare = shareContext->driContext; diff --git a/glx/glxscreens.h b/glx/glxscreens.h index d5420ee8d..7ef4657f2 100644 --- a/glx/glxscreens.h +++ b/glx/glxscreens.h @@ -117,7 +117,10 @@ struct __GLXscreen { __GLXcontext *(*createContext) (__GLXscreen * screen, __GLXconfig * modes, - __GLXcontext * shareContext); + __GLXcontext * shareContext, + unsigned num_attribs, + const uint32_t *attribs, + int *error); __GLXdrawable *(*createDrawable) (ClientPtr client, __GLXscreen * context, |