summaryrefslogtreecommitdiff
path: root/src/drmmode_display.c
diff options
context:
space:
mode:
authorMichel Dänzer <michel.daenzer@amd.com>2017-03-02 17:19:59 +0900
committerMichel Dänzer <michel@daenzer.net>2017-03-03 16:11:54 +0900
commit77853f02e5b879e7042f55c672cf2d8e6955309f (patch)
tree6cebcac03dc89d81643e7f48e607b63dd827d4c8 /src/drmmode_display.c
parentd25cc3b2b3b2d257aea247b85fea405d7e84e5b1 (diff)
Factor out drmmode_crtc_scanout_update helper
Cleanup in preparation for following change, no functional change intended. (Ported from radeon commit 305e2cbf335837a2ab6a24e9ff65815afe038296) Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'src/drmmode_display.c')
-rw-r--r--src/drmmode_display.c85
1 files changed, 49 insertions, 36 deletions
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 463759b..303848f 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -621,6 +621,53 @@ drmmode_handle_transform(xf86CrtcPtr crtc)
#endif
+static void
+drmmode_crtc_scanout_update(xf86CrtcPtr crtc, DisplayModePtr mode,
+ unsigned scanout_id, int *fb_id, int *x, int *y)
+{
+ ScrnInfoPtr scrn = crtc->scrn;
+ ScreenPtr screen = scrn->pScreen;
+ AMDGPUInfoPtr info = AMDGPUPTR(scrn);
+ drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
+
+ drmmode_crtc_scanout_create(crtc, &drmmode_crtc->scanout[0],
+ mode->HDisplay, mode->VDisplay);
+ if (info->tear_free) {
+ drmmode_crtc_scanout_create(crtc, &drmmode_crtc->scanout[1],
+ mode->HDisplay, mode->VDisplay);
+ }
+
+ if (drmmode_crtc->scanout[0].pixmap &&
+ (!info->tear_free || drmmode_crtc->scanout[1].pixmap)) {
+ RegionPtr region;
+ BoxPtr box;
+
+ if (!drmmode_crtc->scanout_damage) {
+ drmmode_crtc->scanout_damage =
+ DamageCreate(amdgpu_screen_damage_report,
+ NULL, DamageReportRawRegion,
+ TRUE, screen, NULL);
+ DamageRegister(&screen->GetScreenPixmap(screen)->drawable,
+ drmmode_crtc->scanout_damage);
+ }
+
+ region = DamageRegion(drmmode_crtc->scanout_damage);
+ RegionUninit(region);
+ region->data = NULL;
+ box = RegionExtents(region);
+ box->x1 = 0;
+ box->y1 = 0;
+ box->x2 = max(box->x2, scrn->virtualX);
+ box->y2 = max(box->y2, scrn->virtualY);
+
+ *fb_id = drmmode_crtc->scanout[scanout_id].fb_id;
+ *x = *y = 0;
+
+ amdgpu_scanout_do_update(crtc, scanout_id);
+ amdgpu_glamor_finish(scrn);
+ }
+}
+
static Bool
drmmode_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr mode,
Rotation rotation, int x, int y)
@@ -697,42 +744,8 @@ drmmode_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr mode,
crtc->driverIsPerformingTransform ||
#endif
info->shadow_primary)) {
- for (i = 0; i < (info->tear_free ? 2 : 1); i++) {
- drmmode_crtc_scanout_create(crtc,
- &drmmode_crtc->scanout[i],
- mode->HDisplay,
- mode->VDisplay);
- }
-
- if (drmmode_crtc->scanout[0].pixmap &&
- (!info->tear_free || drmmode_crtc->scanout[1].pixmap)) {
- RegionPtr pRegion;
- BoxPtr pBox;
-
- if (!drmmode_crtc->scanout_damage) {
- drmmode_crtc->scanout_damage =
- DamageCreate(amdgpu_screen_damage_report,
- NULL, DamageReportRawRegion,
- TRUE, pScreen, NULL);
- DamageRegister(&pScreen->GetScreenPixmap(pScreen)->drawable,
- drmmode_crtc->scanout_damage);
- }
-
- pRegion = DamageRegion(drmmode_crtc->scanout_damage);
- RegionUninit(pRegion);
- pRegion->data = NULL;
- pBox = RegionExtents(pRegion);
- pBox->x1 = 0;
- pBox->y1 = 0;
- pBox->x2 = max(pBox->x2, pScrn->virtualX);
- pBox->y2 = max(pBox->y2, pScrn->virtualY);
-
- fb_id = drmmode_crtc->scanout[scanout_id].fb_id;
- x = y = 0;
-
- amdgpu_scanout_do_update(crtc, scanout_id);
- amdgpu_glamor_finish(pScrn);
- }
+ drmmode_crtc_scanout_update(crtc, mode, scanout_id,
+ &fb_id, &x, &y);
}
if (fb_id == 0) {