Commit 12905dfa authored by Dave Airlie's avatar Dave Airlie

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's avatarKeith Packard <keithp@keithp.com>
Reviewed-by: Adam Jackson's avatarAdam Jackson <ajax@redhat.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent a7c01da5
......@@ -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->unattached_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,
......@@ -3927,3 +3928,21 @@ DetachOutputGPU(ScreenPtr slave)
xorg_list_del(&slave->output_head);
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
DetachOutputGPU(ScreenPtr output);
extern _X_EXPORT void
AttachOffloadGPU(ScreenPtr pScreen, ScreenPtr new);
extern _X_EXPORT void
DetachOffloadGPU(ScreenPtr slave);
typedef struct _ColormapRec *ColormapPtr;
#endif /* SCREENINT_H */
......@@ -507,6 +507,9 @@ typedef struct _Screen {
StopPixmapTrackingProcPtr StopPixmapTracking;
struct xorg_list pixmap_dirty_list;
struct xorg_list offload_slave_list;
struct xorg_list offload_head;
} ScreenRec;
static inline RegionPtr
......
......@@ -76,6 +76,10 @@ ProcRRGetProviders (ClientPtr client)
pScrPriv = rrGetScrPriv(iter);
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) {
pScrPriv = rrGetScrPriv(iter);
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) {
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) {
ADD_PROVIDER(iter);
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment