[PATCH 12/36] dix: add unattached list for attaching screens to initially.
walter harms
wharms at bfs.de
Mon Jul 2 09:31:00 PDT 2012
Am 02.07.2012 12:13, schrieb Dave Airlie:
> From: Dave Airlie <airlied at redhat.com>
>
> This list is meant for attaching unbound gpu screens to initially,
> before the client side rebinds them.
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
> dix/dispatch.c | 19 +++++++++++++++++++
> include/screenint.h | 5 +++++
> include/scrnintstr.h | 6 ++++++
> 3 files changed, 30 insertions(+)
>
> diff --git a/dix/dispatch.c b/dix/dispatch.c
> index b0fc531..b9da233 100644
> --- a/dix/dispatch.c
> +++ b/dix/dispatch.c
> @@ -3740,6 +3740,8 @@ static int init_screen(ScreenPtr pScreen, int i, Bool gpu)
> pScreen->ClipNotify = 0; /* for R4 ddx compatibility */
> pScreen->CreateScreenResources = 0;
>
> + xorg_list_init(&pScreen->unattached_list);
> +
> /*
> * This loop gets run once for every Screen that gets added,
> * but thats ok. If the ddx layer initializes the formats
> @@ -3888,3 +3890,20 @@ RemoveGPUScreen(ScreenPtr pScreen)
> free(pScreen);
>
> }
> +
> +void
> +AttachUnboundGPU(ScreenPtr pScreen, ScreenPtr new)
> +{
> + assert(new->isGPU);
> + xorg_list_add(&new->unattached_head, &pScreen->unattached_list);
> + new->current_master = pScreen;
> +}
> +
> +void
> +DetachUnboundGPU(ScreenPtr slave)
> +{
> + assert(slave->isGPU);
> + xorg_list_del(&slave->unattached_head);
> + slave->current_master = NULL;
> +}
> +
I do not know the code so your are sure that there is no second user
so no lock is needed ?
re,
wh
> diff --git a/include/screenint.h b/include/screenint.h
> index 8205f63..c0c60ef 100644
> --- a/include/screenint.h
> +++ b/include/screenint.h
> @@ -71,6 +71,11 @@ extern _X_EXPORT int AddGPUScreen(Bool (*pfnInit) (ScreenPtr /*pScreen */ ,
>
> extern _X_EXPORT void RemoveGPUScreen(ScreenPtr pScreen);
>
> +extern _X_EXPORT void
> +AttachUnboundGPU(ScreenPtr pScreen, ScreenPtr new);
> +extern _X_EXPORT void
> +DetachUnboundGPU(ScreenPtr unbound);
> +
> typedef struct _ColormapRec *ColormapPtr;
>
> #endif /* SCREENINT_H */
> diff --git a/include/scrnintstr.h b/include/scrnintstr.h
> index 840c3ac..8a21c2c 100644
> --- a/include/scrnintstr.h
> +++ b/include/scrnintstr.h
> @@ -477,6 +477,12 @@ typedef struct _Screen {
> Bool canDoBGNoneRoot;
>
> Bool isGPU;
> +
> + struct xorg_list unattached_list;
> + struct xorg_list unattached_head;
> +
> + ScreenPtr current_master;
> +
> } ScreenRec;
>
> static inline RegionPtr
More information about the xorg-devel
mailing list