[Glamor] [PATCH] Synch with xorg 1.13 change.

Zhigang Gong zhigang.gong at linux.intel.com
Sun Jul 15 21:02:26 PDT 2012


Hi there,

Although this patch can solve the compilation problem with git master xorg,
it can't work with the default xorg server currently. The root cause is that
new xorg change the way to load the extension modules which break the
previous glamor assumption. Glamor wants dir2/glamoregl to be loaded
in prior to the glx module. Otherwise, egl may use wrong gl dispatch table.

If you still want to try with git master xorg, you may have to disable glx
when
You build the xserver.
./autogen.sh --disable-glx

Then the xserver with glamor enabled can start successfully.

If you want to get a full functional xserver with xorg at this time point,
I recommend you use xserver version at commit a615b90...

We will work on fix this problem latter.

> -----Original Message-----
> From: zhigang.gong [mailto:zhigang.gong]
> Sent: Monday, July 16, 2012 11:33 AM
> To: glamor at lists.freedesktop.org
> Cc: Zhigang Gong
> Subject: [PATCH] Synch with xorg 1.13 change.
> 
> From: Zhigang Gong <zhigang.gong at linux.intel.com>
> 
> As xorg 1.13 change the scrn interaces and remove those global arrays.
> Some API change cause we can't build. Now fix it.
> 
> Signed-off-by: Zhigang Gong <zhigang.gong at linux.intel.com>
> ---
>  src/glamor.c       |    4 ++--
>  src/glamor.h       |    9 ++++++---
>  src/glamor_egl.c   |   16 +++++++++++-----
>  src/glamor_priv.h  |    1 +
>  src/glamor_utils.h |    3 +++
>  5 files changed, 23 insertions(+), 10 deletions(-)
> 
> diff --git a/src/glamor.c b/src/glamor.c index 8b7dc93..d51811e 100644
> --- a/src/glamor.c
> +++ b/src/glamor.c
> @@ -491,7 +491,7 @@ glamor_set_pixmap_private(PixmapPtr pixmap,
> glamor_pixmap_private *priv)  }
> 
>  Bool
> -glamor_close_screen(int idx, ScreenPtr screen)
> +glamor_close_screen(CLOSE_SCREEN_ARGS_DECL)
>  {
>  	glamor_screen_private *glamor_priv;
>  	PixmapPtr screen_pixmap;
> @@ -533,7 +533,7 @@ glamor_close_screen(int idx, ScreenPtr screen)
> 
>  	glamor_release_screen_priv(screen);
> 
> -	return screen->CloseScreen(idx, screen);
> +	return screen->CloseScreen(CLOSE_SCREEN_ARGS);
>  }
> 
> 
> diff --git a/src/glamor.h b/src/glamor.h index fe3e4f8..bafd543 100644
> --- a/src/glamor.h
> +++ b/src/glamor.h
> @@ -30,9 +30,8 @@
>  #define GLAMOR_H
> 
>  #include <scrnintstr.h>
> -#ifdef GLAMOR_FOR_XORG
> +#include <xf86.h>
>  #include <xf86str.h>
> -#endif
>  #include <pixmapstr.h>
>  #include <gcstruct.h>
>  #include <picturestr.h>
> @@ -117,7 +116,11 @@ extern _X_EXPORT void glamor_fini(ScreenPtr
> screen);
>   * screen pixmap which must be a glamor pixmap and requires
>   * the internal data structure still exist at that time.
>   * Otherwise, the glamor internal structure will not be freed.*/ -extern
> _X_EXPORT Bool glamor_close_screen(int idx, ScreenPtr screen);
> +#ifndef XF86_SCRN_INTERFACE
> +extern _X_EXPORT Bool glamor_close_screen(int scrnIndex, ScreenPtr
> +screen); #else extern _X_EXPORT Bool glamor_close_screen(ScreenPtr
> +screen); #endif
> 
> 
>  /* Let glamor to know the screen's fbo. The low level diff --git
> a/src/glamor_egl.c b/src/glamor_egl.c index 07acf1a..da9283b 100644
> --- a/src/glamor_egl.c
> +++ b/src/glamor_egl.c
> @@ -59,6 +59,7 @@
>  #include <EGL/eglext.h>
> 
>  #include "glamor.h"
> +#include "compat-api.h"
>  #include "glamor_gl_dispatch.h"
>  #ifdef GLX_USE_SHARED_DISPATCH
>  #include "glapi.h"
> @@ -365,7 +366,7 @@ glamor_egl_destroy_textured_pixmap(PixmapPtr
> pixmap)  }
> 
>  static Bool
> -glamor_egl_close_screen(int idx, ScreenPtr screen)
> +glamor_egl_close_screen(CLOSE_SCREEN_ARGS_DECL)
>  {
>  	ScrnInfoPtr scrn;
>  	struct glamor_egl_screen_private *glamor_egl; @@ -391,7 +392,7
> @@ glamor_egl_close_screen(int idx, ScreenPtr screen)
> 
>  	screen->CloseScreen = glamor_egl->saved_close_screen;
> 
> -	return screen->CloseScreen(idx, screen);
> +	return screen->CloseScreen(CLOSE_SCREEN_ARGS);
>  }
> 
>  static Bool
> @@ -430,10 +431,15 @@ glamor_egl_screen_init(ScreenPtr screen)  }
> 
>  static void
> -glamor_egl_free_screen(int scrnIndex, int flags)
> +glamor_egl_free_screen(FREE_SCREEN_ARGS_DECL)
>  {
> -	ScrnInfoPtr scrn = xf86Screens[scrnIndex];
> +	ScrnInfoPtr scrn;
>  	struct glamor_egl_screen_private *glamor_egl;
> +#ifndef XF86_SCRN_INTERFACE
> +	scrn = xf86Screens[arg];
> +#else
> +	scrn = arg;
> +#endif
> 
>  	glamor_egl = glamor_egl_get_screen_private(scrn);
>  	if (glamor_egl != NULL) {
> @@ -447,7 +453,7 @@ glamor_egl_free_screen(int scrnIndex, int flags)
> #endif
>  		scrn->FreeScreen = glamor_egl->saved_free_screen;
>  		free(glamor_egl);
> -		scrn->FreeScreen(scrnIndex, flags);
> +		scrn->FreeScreen(FREE_SCREEN_ARGS);
>  	}
>  }
> 
> diff --git a/src/glamor_priv.h b/src/glamor_priv.h index 3b64c31..11d09c4
> 100644
> --- a/src/glamor_priv.h
> +++ b/src/glamor_priv.h
> @@ -38,6 +38,7 @@
>  #define NDEBUG
>  #endif
>  #include "glamor.h"
> +#include "compat-api.h"
> 
>  #define GL_GLEXT_PROTOTYPES
> 
> diff --git a/src/glamor_utils.h b/src/glamor_utils.h index
> a282985..eb2e202 100644
> --- a/src/glamor_utils.h
> +++ b/src/glamor_utils.h
> @@ -798,7 +798,10 @@ region_is_empty(pixman_region16_t *region)
>  	return region->data && region->data->numRects == 0;  }
> 
> +#ifndef ARRAY_SIZE
>  #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
> +#endif
> +
>  #define ALIGN(i,m)	(((i) + (m) - 1) & ~((m) - 1))
>  #define MIN(a,b)	((a) < (b) ? (a) : (b))
>  #define MAX(a,b)	((a) > (b) ? (a) : (b))
> --
> 1.7.4.4



More information about the Glamor mailing list