modesetting: Refactor drmmode_glamor_new_screen_pixmap
The original drmmode_glamor_new_screen_pixmap function was specific to the primary screen pixmap. This commit pulls the guts out into a new, more general, drmmode_set_pixmap_bo function for setting a buffer on a pixmap. The new function also properly tears down the glamor bits if the buffer being set is NULL. The drmmode_glamor_new_screen_pixmap function is now just a 3-line wrapper around drmmode_set_pixmap_bo. v2 Jason Ekstrand <jason.ekstrand@intel.com>: - Re-arranged code in drmmode_set_pixmap_bo and drmmode_glamor_handle_new_screen_pixmap so that glamor_set_screen_pixmap only gets called for the screen pixmap - Guard the call to glamor_set_screen_pixmapa with a drmmode->glamor check Signed-off-by: Jason Ekstrand <jason.ekstrand@intel.com> Reviewed-by: Keith Packard <keithp@keithp.com> Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
bb23fbf5bb
commit
b4703a5a6e
|
@ -1123,34 +1123,32 @@ drmmode_clones_init(ScrnInfoPtr scrn, drmmode_ptr drmmode)
|
|||
}
|
||||
}
|
||||
|
||||
Bool
|
||||
drmmode_glamor_handle_new_screen_pixmap(drmmode_ptr drmmode)
|
||||
static Bool
|
||||
drmmode_set_pixmap_bo(drmmode_ptr drmmode, PixmapPtr pixmap, drmmode_bo *bo)
|
||||
{
|
||||
#ifdef GLAMOR
|
||||
ScrnInfoPtr scrn = drmmode->scrn;
|
||||
ScreenPtr screen = xf86ScrnToScreen(drmmode->scrn);
|
||||
PixmapPtr screen_pixmap;
|
||||
void *gbm_bo;
|
||||
|
||||
if (!drmmode->glamor)
|
||||
return TRUE;
|
||||
|
||||
#ifdef GLAMOR_HAS_GBM
|
||||
gbm_bo = drmmode->front_bo.gbm;
|
||||
screen_pixmap = screen->GetScreenPixmap(screen);
|
||||
if (bo == NULL) {
|
||||
glamor_egl_destroy_textured_pixmap(pixmap);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (!glamor_egl_create_textured_pixmap_from_gbm_bo(screen_pixmap, gbm_bo)) {
|
||||
#ifdef GLAMOR_HAS_GBM
|
||||
if (!glamor_egl_create_textured_pixmap_from_gbm_bo(pixmap, bo->gbm)) {
|
||||
xf86DrvMsg(scrn->scrnIndex, X_ERROR, "Failed");
|
||||
return FALSE;
|
||||
}
|
||||
glamor_set_screen_pixmap(screen_pixmap, NULL);
|
||||
#else
|
||||
if (!glamor_egl_create_textured_screen(screen,
|
||||
if (!glamor_egl_create_textured_pixmap(pixmap,
|
||||
drmmode_bo_get_handle(&drmmode->front_bo),
|
||||
scrn->displayWidth *
|
||||
scrn->bitsPerPixel / 8)) {
|
||||
xf86DrvMsg(scrn->scrnIndex, X_ERROR,
|
||||
"glamor_egl_create_textured_screen() failed\n");
|
||||
"glamor_egl_create_textured_pixmap() failed\n");
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
|
@ -1159,6 +1157,23 @@ drmmode_glamor_handle_new_screen_pixmap(drmmode_ptr drmmode)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
Bool
|
||||
drmmode_glamor_handle_new_screen_pixmap(drmmode_ptr drmmode)
|
||||
{
|
||||
ScreenPtr screen = xf86ScrnToScreen(drmmode->scrn);
|
||||
PixmapPtr screen_pixmap = screen->GetScreenPixmap(screen);
|
||||
|
||||
if (!drmmode_set_pixmap_bo(drmmode, screen_pixmap, &drmmode->front_bo))
|
||||
return FALSE;
|
||||
|
||||
#ifdef GLAMOR
|
||||
if (drmmode->glamor)
|
||||
glamor_set_screen_pixmap(screen_pixmap, NULL);
|
||||
#endif
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static Bool
|
||||
drmmode_xf86crtc_resize(ScrnInfoPtr scrn, int width, int height)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue
Block a user