mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-05-05 18:08:08 +02:00
modesetting: Detect whether damage tracking is needed
Call drmModeDirtyFB and check the return value to detect whether the driver support for damage tracking is present, only initialize it in that case. Signed-off-by: Keith Packard <keithp@keithp.com> Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
This commit is contained in:
parent
7804305673
commit
0d37c7e4b5
1 changed files with 16 additions and 11 deletions
|
|
@ -875,6 +875,7 @@ CreateScreenResources(ScreenPtr pScreen)
|
|||
PixmapPtr rootPixmap;
|
||||
Bool ret;
|
||||
void *pixels = NULL;
|
||||
int err;
|
||||
|
||||
pScreen->CreateScreenResources = ms->createScreenResources;
|
||||
ret = pScreen->CreateScreenResources(pScreen);
|
||||
|
|
@ -911,18 +912,22 @@ CreateScreenResources(ScreenPtr pScreen)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
ms->damage = DamageCreate(NULL, NULL, DamageReportNone, TRUE,
|
||||
pScreen, rootPixmap);
|
||||
err = drmModeDirtyFB(ms->fd, ms->drmmode.fb_id, NULL, 0);
|
||||
|
||||
if (ms->damage) {
|
||||
DamageRegister(&rootPixmap->drawable, ms->damage);
|
||||
ms->dirty_enabled = TRUE;
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Damage tracking initialized\n");
|
||||
}
|
||||
else {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
|
||||
"Failed to create screen damage record\n");
|
||||
return FALSE;
|
||||
if (err != -EINVAL && err != -ENOSYS) {
|
||||
ms->damage = DamageCreate(NULL, NULL, DamageReportNone, TRUE,
|
||||
pScreen, rootPixmap);
|
||||
|
||||
if (ms->damage) {
|
||||
DamageRegister(&rootPixmap->drawable, ms->damage);
|
||||
ms->dirty_enabled = TRUE;
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Damage tracking initialized\n");
|
||||
}
|
||||
else {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
|
||||
"Failed to create screen damage record\n");
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue