... |
... |
@@ -785,7 +785,7 @@ drmmode_crtc_scanout_update(xf86CrtcPtr crtc, DisplayModePtr mode, |
785
|
785
|
screen->GetWindowPixmap(screen->root),
|
786
|
786
|
extents)) {
|
787
|
787
|
RegionEmpty(DamageRegion(drmmode_crtc->scanout_damage));
|
788
|
|
- radeon_glamor_finish(scrn);
|
|
788
|
+ radeon_finish(scrn, drmmode_crtc->scanout[scanout_id].bo);
|
789
|
789
|
|
790
|
790
|
if (!drmmode_crtc->flip_pending) {
|
791
|
791
|
radeon_drm_abort_entry(drmmode_crtc->
|
... |
... |
@@ -1576,6 +1576,51 @@ drmmode_output_mode_valid(xf86OutputPtr output, DisplayModePtr pModes) |
1576
|
1576
|
return MODE_OK;
|
1577
|
1577
|
}
|
1578
|
1578
|
|
|
1579
|
+static void
|
|
1580
|
+drmmode_output_attach_tile(xf86OutputPtr output)
|
|
1581
|
+{
|
|
1582
|
+#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1, 17, 99, 901, 0)
|
|
1583
|
+ drmmode_output_private_ptr drmmode_output = output->driver_private;
|
|
1584
|
+ drmModeConnectorPtr koutput = drmmode_output->mode_output;
|
|
1585
|
+ RADEONEntPtr pRADEONEnt = RADEONEntPriv(output->scrn);
|
|
1586
|
+ struct xf86CrtcTileInfo tile_info, *set = NULL;
|
|
1587
|
+ int i;
|
|
1588
|
+
|
|
1589
|
+ if (!koutput) {
|
|
1590
|
+ xf86OutputSetTile(output, NULL);
|
|
1591
|
+ return;
|
|
1592
|
+ }
|
|
1593
|
+
|
|
1594
|
+ /* look for a TILE property */
|
|
1595
|
+ for (i = 0; i < koutput->count_props; i++) {
|
|
1596
|
+ drmModePropertyPtr props;
|
|
1597
|
+ props = drmModeGetProperty(pRADEONEnt->fd, koutput->props[i]);
|
|
1598
|
+ if (!props)
|
|
1599
|
+ continue;
|
|
1600
|
+
|
|
1601
|
+ if (!(props->flags & DRM_MODE_PROP_BLOB)) {
|
|
1602
|
+ drmModeFreeProperty(props);
|
|
1603
|
+ continue;
|
|
1604
|
+ }
|
|
1605
|
+
|
|
1606
|
+ if (!strcmp(props->name, "TILE")) {
|
|
1607
|
+ drmModeFreePropertyBlob(drmmode_output->tile_blob);
|
|
1608
|
+ drmmode_output->tile_blob =
|
|
1609
|
+ drmModeGetPropertyBlob(pRADEONEnt->fd,
|
|
1610
|
+ koutput->prop_values[i]);
|
|
1611
|
+ }
|
|
1612
|
+ drmModeFreeProperty(props);
|
|
1613
|
+ }
|
|
1614
|
+ if (drmmode_output->tile_blob) {
|
|
1615
|
+ if (xf86OutputParseKMSTile(drmmode_output->tile_blob->data,
|
|
1616
|
+ drmmode_output->tile_blob->length,
|
|
1617
|
+ &tile_info) == TRUE)
|
|
1618
|
+ set = &tile_info;
|
|
1619
|
+ }
|
|
1620
|
+ xf86OutputSetTile(output, set);
|
|
1621
|
+#endif
|
|
1622
|
+}
|
|
1623
|
+
|
1579
|
1624
|
static int
|
1580
|
1625
|
koutput_get_prop_idx(int fd, drmModeConnectorPtr koutput,
|
1581
|
1626
|
int type, const char *name)
|
... |
... |
@@ -1648,6 +1693,8 @@ drmmode_output_get_modes(xf86OutputPtr output) |
1648
|
1693
|
}
|
1649
|
1694
|
xf86OutputSetEDID(output, mon);
|
1650
|
1695
|
|
|
1696
|
+ drmmode_output_attach_tile(output);
|
|
1697
|
+
|
1651
|
1698
|
/* modes should already be available */
|
1652
|
1699
|
for (i = 0; i < koutput->count_modes; i++) {
|
1653
|
1700
|
Mode = xnfalloc(sizeof(DisplayModeRec));
|
... |
... |
@@ -1665,8 +1712,11 @@ drmmode_output_destroy(xf86OutputPtr output) |
1665
|
1712
|
drmmode_output_private_ptr drmmode_output = output->driver_private;
|
1666
|
1713
|
int i;
|
1667
|
1714
|
|
1668
|
|
- if (drmmode_output->edid_blob)
|
1669
|
|
- drmModeFreePropertyBlob(drmmode_output->edid_blob);
|
|
1715
|
+ drmModeFreePropertyBlob(drmmode_output->edid_blob);
|
|
1716
|
+#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1, 17, 99, 901, 0)
|
|
1717
|
+ drmModeFreePropertyBlob(drmmode_output->tile_blob);
|
|
1718
|
+#endif
|
|
1719
|
+
|
1670
|
1720
|
for (i = 0; i < drmmode_output->num_props; i++) {
|
1671
|
1721
|
drmModeFreeProperty(drmmode_output->props[i].mode_prop);
|
1672
|
1722
|
free(drmmode_output->props[i].atoms);
|