dix: pixmap sharing infrastructure (v3)

This is a hooks for pixmap sharing and tracking.

The pixmap sharing ones get an integer handle for the pixmap
and use a handle to be the backing for a pixmap.

The tracker interface is to be used when a GPU needs to
track pixmaps to be updated for another GPU.

v2: pass slave to sharing so it can use it to work out driver.

v3: use void * as per keithp's suggestion.

Reviewed-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Dave Airlie 2012-05-24 16:03:19 +01:00
parent 382dd45bb8
commit fd6c1bf0a3

View File

@ -179,6 +179,8 @@ typedef void (*ClipNotifyProcPtr) (WindowPtr /*pWindow */ ,
#define CREATE_PIXMAP_USAGE_BACKING_PIXMAP 2
/* pixmap will contain a glyph */
#define CREATE_PIXMAP_USAGE_GLYPH_PICTURE 3
/* pixmap will be shared */
#define CREATE_PIXMAP_USAGE_SHARED 4
typedef PixmapPtr (*CreatePixmapProcPtr) (ScreenPtr /*pScreen */ ,
int /*width */ ,
@ -339,6 +341,16 @@ typedef void (*DeviceCursorCleanupProcPtr) (DeviceIntPtr /* pDev */ ,
typedef void (*ConstrainCursorHarderProcPtr) (DeviceIntPtr, ScreenPtr, int,
int *, int *);
typedef Bool (*SharePixmapBackingProcPtr)(PixmapPtr, ScreenPtr, void **);
typedef Bool (*SetSharedPixmapBackingProcPtr)(PixmapPtr, void *);
typedef Bool (*StartPixmapTrackingProcPtr)(PixmapPtr, PixmapPtr,
int x, int y);
typedef Bool (*StopPixmapTrackingProcPtr)(PixmapPtr, PixmapPtr);
typedef struct _Screen {
int myNum; /* index of this instance in Screens[] */
ATOM id;
@ -488,6 +500,11 @@ typedef struct _Screen {
struct xorg_list output_slave_list;
struct xorg_list output_head;
SharePixmapBackingProcPtr SharePixmapBacking;
SetSharedPixmapBackingProcPtr SetSharedPixmapBacking;
StartPixmapTrackingProcPtr StartPixmapTracking;
StopPixmapTrackingProcPtr StopPixmapTracking;
} ScreenRec;
static inline RegionPtr