dix/xf86: initial offload slave tracking (v1.1)
add the linked list and provider hooks. v1.1: add another assert in the add path. 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:
parent
a7c01da54a
commit
12905dfaf0
|
@ -3745,6 +3745,7 @@ static int init_screen(ScreenPtr pScreen, int i, Bool gpu)
|
||||||
xorg_list_init(&pScreen->pixmap_dirty_list);
|
xorg_list_init(&pScreen->pixmap_dirty_list);
|
||||||
xorg_list_init(&pScreen->unattached_list);
|
xorg_list_init(&pScreen->unattached_list);
|
||||||
xorg_list_init(&pScreen->output_slave_list);
|
xorg_list_init(&pScreen->output_slave_list);
|
||||||
|
xorg_list_init(&pScreen->offload_slave_list);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This loop gets run once for every Screen that gets added,
|
* This loop gets run once for every Screen that gets added,
|
||||||
|
@ -3927,3 +3928,21 @@ DetachOutputGPU(ScreenPtr slave)
|
||||||
xorg_list_del(&slave->output_head);
|
xorg_list_del(&slave->output_head);
|
||||||
slave->current_master = NULL;
|
slave->current_master = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
AttachOffloadGPU(ScreenPtr pScreen, ScreenPtr new)
|
||||||
|
{
|
||||||
|
assert(new->isGPU);
|
||||||
|
assert(!new->current_master);
|
||||||
|
xorg_list_add(&new->offload_head, &pScreen->offload_slave_list);
|
||||||
|
new->current_master = pScreen;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
DetachOffloadGPU(ScreenPtr slave)
|
||||||
|
{
|
||||||
|
assert(slave->isGPU);
|
||||||
|
xorg_list_del(&slave->offload_head);
|
||||||
|
slave->current_master = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -82,6 +82,12 @@ AttachOutputGPU(ScreenPtr pScreen, ScreenPtr new);
|
||||||
extern _X_EXPORT void
|
extern _X_EXPORT void
|
||||||
DetachOutputGPU(ScreenPtr output);
|
DetachOutputGPU(ScreenPtr output);
|
||||||
|
|
||||||
|
extern _X_EXPORT void
|
||||||
|
AttachOffloadGPU(ScreenPtr pScreen, ScreenPtr new);
|
||||||
|
|
||||||
|
extern _X_EXPORT void
|
||||||
|
DetachOffloadGPU(ScreenPtr slave);
|
||||||
|
|
||||||
typedef struct _ColormapRec *ColormapPtr;
|
typedef struct _ColormapRec *ColormapPtr;
|
||||||
|
|
||||||
#endif /* SCREENINT_H */
|
#endif /* SCREENINT_H */
|
||||||
|
|
|
@ -507,6 +507,9 @@ typedef struct _Screen {
|
||||||
StopPixmapTrackingProcPtr StopPixmapTracking;
|
StopPixmapTrackingProcPtr StopPixmapTracking;
|
||||||
|
|
||||||
struct xorg_list pixmap_dirty_list;
|
struct xorg_list pixmap_dirty_list;
|
||||||
|
struct xorg_list offload_slave_list;
|
||||||
|
struct xorg_list offload_head;
|
||||||
|
|
||||||
} ScreenRec;
|
} ScreenRec;
|
||||||
|
|
||||||
static inline RegionPtr
|
static inline RegionPtr
|
||||||
|
|
|
@ -76,6 +76,10 @@ ProcRRGetProviders (ClientPtr client)
|
||||||
pScrPriv = rrGetScrPriv(iter);
|
pScrPriv = rrGetScrPriv(iter);
|
||||||
total_providers += pScrPriv->provider ? 1 : 0;
|
total_providers += pScrPriv->provider ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
xorg_list_for_each_entry(iter, &pScreen->offload_slave_list, offload_head) {
|
||||||
|
pScrPriv = rrGetScrPriv(iter);
|
||||||
|
total_providers += pScrPriv->provider ? 1 : 0;
|
||||||
|
}
|
||||||
xorg_list_for_each_entry(iter, &pScreen->unattached_list, unattached_head) {
|
xorg_list_for_each_entry(iter, &pScreen->unattached_list, unattached_head) {
|
||||||
pScrPriv = rrGetScrPriv(iter);
|
pScrPriv = rrGetScrPriv(iter);
|
||||||
total_providers += pScrPriv->provider ? 1 : 0;
|
total_providers += pScrPriv->provider ? 1 : 0;
|
||||||
|
@ -112,6 +116,9 @@ ProcRRGetProviders (ClientPtr client)
|
||||||
xorg_list_for_each_entry(iter, &pScreen->output_slave_list, output_head) {
|
xorg_list_for_each_entry(iter, &pScreen->output_slave_list, output_head) {
|
||||||
ADD_PROVIDER(iter);
|
ADD_PROVIDER(iter);
|
||||||
}
|
}
|
||||||
|
xorg_list_for_each_entry(iter, &pScreen->offload_slave_list, offload_head) {
|
||||||
|
ADD_PROVIDER(iter);
|
||||||
|
}
|
||||||
xorg_list_for_each_entry(iter, &pScreen->unattached_list, unattached_head) {
|
xorg_list_for_each_entry(iter, &pScreen->unattached_list, unattached_head) {
|
||||||
ADD_PROVIDER(iter);
|
ADD_PROVIDER(iter);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue