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>
This commit is contained in:
		
							parent
							
								
									62f06b0dcd
								
							
						
					
					
						commit
						96d74138b1
					
				|  | @ -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) { | ||||
|  |  | |||
							
								
								
									
										12
									
								
								glx/glxdri.c
								
								
								
								
							
							
						
						
									
										12
									
								
								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; | ||||
|  |  | |||
|  | @ -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; | ||||
|  |  | |||
|  | @ -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; | ||||
|  |  | |||
|  | @ -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, | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue