[PATCH 03/11] glx: Extend __GLXscreen::createContext to take attributes

Christopher James Halse Rogers christopher.halse.rogers at canonical.com
Tue Apr 17 03:05:56 PDT 2012


On Fri, 2012-04-13 at 18:11 -0700, Ian Romanick wrote:
> From: Ian Romanick <ian.d.romanick at intel.com>
> 
> The attributes will be used for glXCreateContextAttribsARB additions
> in follow-on patches.
> 
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> Reviewed-by: Jesse Barnes <jbarnes at virtuousgeek.org>
> ---
>  glx/glxcmds.c      |   12 ++++++++++--
>  glx/glxdri.c       |   10 +++++++++-
>  glx/glxdri2.c      |    5 ++++-
>  glx/glxdriswrast.c |    4 +++-
>  glx/glxscreens.h   |    5 ++++-
>  5 files changed, 30 insertions(+), 6 deletions(-)
> 
> diff --git a/glx/glxcmds.c b/glx/glxcmds.c
> index 5c70afa..f754104 100644
> --- a/glx/glxcmds.c
> +++ b/glx/glxcmds.c
> @@ -276,8 +276,16 @@ DoCreateContext(__GLXclientState * cl, GLXContextID gcId,
>      /*
>       ** Allocate memory for the new context
>       */
> -    if (!isDirect)
> -        glxc = pGlxScreen->createContext(pGlxScreen, config, shareglxc);
> +    if (!isDirect) {
> +        int err;

This variable shadows the err defined at the top of the function, which
is not used after this point; any reason why you didn't just reuse the
existing variable?

> +
> +        /* 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 9b8b66f..a4463ef 100644
> --- a/glx/glxdri.c
> +++ b/glx/glxdri.c
> @@ -599,7 +599,9 @@ __glXDRIscreenDestroy(__GLXscreen * baseScreen)
>  static __GLXcontext *
>  __glXDRIscreenCreateContext(__GLXscreen * baseScreen,
>                              __GLXconfig * glxConfig,
> -                            __GLXcontext * baseShareContext)
> +                            __GLXcontext * baseShareContext,
> +                            unsigned num_attribs,
> +                            const uint32_t *attribs)

You're missing int *error here.  I don't _think_ it'll cause problems,
but it does add an extra “assignment from incompatible pointer” warning
(to the humongous list of other warnings the glx code generates ☹).

>  {
>      __GLXDRIscreen *screen = (__GLXDRIscreen *) baseScreen;
>      __GLXDRIcontext *context, *shareContext;
> @@ -611,6 +613,12 @@ __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;
> +
>      shareContext = (__GLXDRIcontext *) baseShareContext;
>      if (shareContext)
>          driShare = shareContext->driContext;
> diff --git a/glx/glxdri2.c b/glx/glxdri2.c
> index aa38295..656b577 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 c69b4d2..5543ab7 100644
> --- a/glx/glxdriswrast.c
> +++ b/glx/glxdriswrast.c
> @@ -257,7 +257,9 @@ __glXDRIscreenDestroy(__GLXscreen * baseScreen)
>  static __GLXcontext *
>  __glXDRIscreenCreateContext(__GLXscreen * baseScreen,
>                              __GLXconfig * glxConfig,
> -                            __GLXcontext * baseShareContext)
> +                            __GLXcontext * baseShareContext,
> +                            unsigned num_attribs,
> +                            const uint32_t *attribs)

Also missing int *error here.

>  {
>      __GLXDRIscreen *screen = (__GLXDRIscreen *) baseScreen;
>      __GLXDRIcontext *context, *shareContext;
> diff --git a/glx/glxscreens.h b/glx/glxscreens.h
> index d5420ee..7ef4657 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,


-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part
URL: <http://lists.x.org/archives/xorg-devel/attachments/20120417/a94c9679/attachment.pgp>


More information about the xorg-devel mailing list