core/xf86-video-ati/git_fixes.patch
Jan Mette 93d9bd24fe
2010-03-14 15:48:48 +00:00

629 lines
22 KiB
Diff

From 0db4b1708c2e5f3c14f48de186ee866ab8d9d5a9 Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Wed, 07 Oct 2009 21:01:55 +0000
Subject: radeon: clamp the internal FB map to the aperture size
We don't use the invisible memory yet and on cards with
large amounts of vram this can cause the top of GART
calculation to overflow.
Fixes bug fdo bug 24301:
http://bugs.freedesktop.org/show_bug.cgi?id=24301
---
diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index 800397c..4e0dcf9 100644
--- a/src/radeon_driver.c
+++ b/src/radeon_driver.c
@@ -1362,6 +1362,15 @@ static void RADEONInitMemoryMap(ScrnInfoPtr pScrn)
if (aper_size > mem_size)
mem_size = aper_size;
+ /* don't map the whole FB in the internal address space.
+ * we don't currently use fb space larger than the aperture
+ * size and on cards with 1 GB of vram, this can overflow
+ * the internal top of gart calculation on some systems.
+ * See fdo bug 24301.
+ */
+ if (mem_size > aper_size)
+ mem_size = aper_size;
+
#ifdef XF86DRI
/* Apply memory map limitation if using an old DRI */
if (info->directRenderingEnabled && !info->dri->newMemoryMap) {
--
cgit v0.8.3-6-g21f6
From 26ecf3aad5f3a70b3267614bff6030604820f4d9 Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Mon, 23 Nov 2009 17:54:41 +0000
Subject: DCE3.2: fix uniphy2 dvi issues
In some cases the atom transmitter table sets the
golden value of this reg differently which some monitors
don't like. I haven't had time to dig further, so this
works around it for now.
Fixes fdo bug 24313
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
---
diff --git a/src/atombios_output.c b/src/atombios_output.c
index 57345b3..66a86f4 100644
--- a/src/atombios_output.c
+++ b/src/atombios_output.c
@@ -1472,6 +1472,18 @@ atombios_apply_output_quirks(xf86OutputPtr output, DisplayModePtr mode)
/* set scaler clears this on some chips */
if (IS_AVIVO_VARIANT && (mode->Flags & V_INTERLACE))
OUTREG(AVIVO_D1MODE_DATA_FORMAT + radeon_crtc->crtc_offset, AVIVO_D1MODE_INTERLEAVE_EN);
+
+ if (IS_DCE32_VARIANT && (radeon_output->active_device & (ATOM_DEVICE_DFP_SUPPORT))) {
+ radeon_encoder_ptr radeon_encoder = radeon_get_encoder(output);
+ if (radeon_encoder == NULL)
+ return;
+ /* XXX: need to sort out why transmitter control table sometimes sets this to a
+ * different golden value.
+ */
+ if (radeon_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_UNIPHY2) {
+ OUTREG(0x7ec4, 0x00824002);
+ }
+ }
}
void
--
cgit v0.8.3-6-g21f6
From 3d59746808bc5f335104d27a8dce0fe94ab3cb78 Mon Sep 17 00:00:00 2001
From: Matthijs Kooijman <matthijs@stdin.nl>
Date: Thu, 03 Dec 2009 17:10:14 +0000
Subject: radeon: fix crtc2 dpms
noticed by Matthijs Kooijman on fdo bug 22140
---
diff --git a/src/legacy_crtc.c b/src/legacy_crtc.c
index 5ea13bc..aee3d15 100644
--- a/src/legacy_crtc.c
+++ b/src/legacy_crtc.c
@@ -670,8 +670,7 @@ legacy_crtc_dpms(xf86CrtcPtr crtc, int mode)
unsigned char *RADEONMMIO = pRADEONEnt->MMIO;
if (radeon_crtc->crtc_id)
- mask = (RADEON_CRTC2_EN |
- RADEON_CRTC2_DISP_DIS |
+ mask = (RADEON_CRTC2_DISP_DIS |
RADEON_CRTC2_VSYNC_DIS |
RADEON_CRTC2_HSYNC_DIS |
RADEON_CRTC2_DISP_REQ_EN_B);
@@ -683,7 +682,7 @@ legacy_crtc_dpms(xf86CrtcPtr crtc, int mode)
switch(mode) {
case DPMSModeOn:
if (radeon_crtc->crtc_id) {
- OUTREGP(RADEON_CRTC2_GEN_CNTL, RADEON_CRTC2_EN, ~mask);
+ OUTREGP(RADEON_CRTC2_GEN_CNTL, RADEON_CRTC2_EN, ~(RADEON_CRTC2_EN | mask));
} else {
OUTREGP(RADEON_CRTC_GEN_CNTL, RADEON_CRTC_EN, ~(RADEON_CRTC_EN | RADEON_CRTC_DISP_REQ_EN_B));
OUTREGP(RADEON_CRTC_EXT_CNTL, 0, ~mask);
@@ -693,7 +692,7 @@ legacy_crtc_dpms(xf86CrtcPtr crtc, int mode)
case DPMSModeSuspend:
case DPMSModeOff:
if (radeon_crtc->crtc_id) {
- OUTREGP(RADEON_CRTC2_GEN_CNTL, mask, ~mask);
+ OUTREGP(RADEON_CRTC2_GEN_CNTL, mask, ~(RADEON_CRTC2_EN | mask));
} else {
OUTREGP(RADEON_CRTC_GEN_CNTL, RADEON_CRTC_DISP_REQ_EN_B, ~(RADEON_CRTC_EN | RADEON_CRTC_DISP_REQ_EN_B));
OUTREGP(RADEON_CRTC_EXT_CNTL, mask, ~mask);
--
cgit v0.8.3-6-g21f6
From 45edca0e9d7b833b9de3037e94f293122c922e42 Mon Sep 17 00:00:00 2001
From: Michel Dänzer <daenzer@vmware.com>
Date: Thu, 03 Sep 2009 12:55:05 +0000
Subject: EXA: Check for solid/gradient pictures the same way for all generations.
In particular, also catch them for >= R300.
---
diff --git a/src/r600_exa.c b/src/r600_exa.c
index 9aeb862..54d91e8 100644
--- a/src/r600_exa.c
+++ b/src/r600_exa.c
@@ -1313,6 +1313,9 @@ static Bool R600CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
if (op >= (int) (sizeof(R600BlendOp) / sizeof(R600BlendOp[0])))
RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op));
+ if (!pSrcPicture->pDrawable)
+ RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
+
pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable);
max_tex_w = 8192;
diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c
index 660ec43..e663b54 100644
--- a/src/radeon_exa_render.c
+++ b/src/radeon_exa_render.c
@@ -478,7 +478,7 @@ static Bool R100CheckComposite(int op, PicturePtr pSrcPicture,
RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op));
if (!pSrcPicture->pDrawable)
- return FALSE;
+ RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
/* r100 limit should be 2048, there are issues with 2048
* see 197a62704742a4a19736c2637ac92d1dc5ab34ed
@@ -813,7 +813,7 @@ static Bool R200CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op));
if (!pSrcPicture->pDrawable)
- return FALSE;
+ RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
/* r200 limit should be 2048, there are issues with 2048
* see bug 19269
@@ -1192,6 +1192,9 @@ static Bool R300CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
if (op >= sizeof(RadeonBlendOp) / sizeof(RadeonBlendOp[0]))
RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op));
+ if (!pSrcPicture->pDrawable)
+ RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
+
pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable);
if (IS_R500_3D) {
--
cgit v0.8.3-6-g21f6
From 51266161f70baf4ddbf79ba6225ee2ae107a9f36 Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Tue, 17 Nov 2009 19:16:22 +0000
Subject: radeon: deal with connectors sourced to the same encoder
Some systems have multiple connectors connected to the
same encoder; e.g., DVI and HDMI connected to the same
encoder with the same ddc line. Since we expose
connectors as xrandr outputs, randr treats them separately
which results in it trying to source the same encoder to
different crtcs. If we have an HDMI and DVI-D port on the
same encoder, pick the one to be considered connected
based on the edid (HDMI if edid indicates HDMI, DVI
otherwise). Also, don't turn off (dpms) encoders that are
shared.
Fixes fdo bug 21767.
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
---
diff --git a/src/radeon_output.c b/src/radeon_output.c
index edf59cd..6b6ba70 100644
--- a/src/radeon_output.c
+++ b/src/radeon_output.c
@@ -236,10 +236,40 @@ radeon_ddc_connected(xf86OutputPtr output)
case CONNECTOR_HDMI_TYPE_A:
case CONNECTOR_HDMI_TYPE_B:
if (radeon_output->shared_ddc) {
+ xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR (output->scrn);
+ int i;
+
if (MonInfo->rawData[0x14] & 0x80) /* if it's digital and DVI/HDMI/etc. */
MonType = MT_DFP;
else
MonType = MT_NONE;
+
+ for (i = 0; i < config->num_output; i++) {
+ if (output != config->output[i]) {
+ RADEONOutputPrivatePtr other_radeon_output =
+ config->output[i]->driver_private;
+ if (radeon_output->devices & other_radeon_output->devices) {
+#ifndef EDID_COMPLETE_RAWDATA
+ if (radeon_output->ConnectorType == CONNECTOR_HDMI_TYPE_A) {
+ MonType = MT_NONE;
+ break;
+ }
+#else
+ if (xf86MonitorIsHDMI(MonInfo)) {
+ if (radeon_output->ConnectorType == CONNECTOR_DVI_D) {
+ MonType = MT_NONE;
+ break;
+ }
+ } else {
+ if (radeon_output->ConnectorType == CONNECTOR_HDMI_TYPE_A) {
+ MonType = MT_NONE;
+ break;
+ }
+ }
+#endif
+ }
+ }
+ }
} else
MonType = MT_DFP;
break;
@@ -334,6 +364,22 @@ radeon_dpms(xf86OutputPtr output, int mode)
if ((mode == DPMSModeOn) && radeon_output->enabled)
return;
+ if ((mode != DPMSModeOn) && radeon_output->shared_ddc) {
+ xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR (output->scrn);
+ int i;
+
+ for (i = 0; i < config->num_output; i++) {
+ if (output != config->output[i]) {
+ RADEONOutputPrivatePtr other_radeon_output =
+ config->output[i]->driver_private;
+ if (radeon_output->devices & other_radeon_output->devices) {
+ if (output->status == XF86OutputStatusDisconnected)
+ return;
+ }
+ }
+ }
+ }
+
if (IS_AVIVO_VARIANT || info->r4xx_atom) {
atombios_output_dpms(output, mode);
} else {
--
cgit v0.8.3-6-g21f6
From 587f693886e9025ba6fc30a8405902c43b2fcfb2 Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Tue, 22 Dec 2009 13:45:27 +0000
Subject: radeon: add cvt timing if we only have panel w/h
fixes mac laptops without an edid
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
---
diff --git a/src/radeon_modes.c b/src/radeon_modes.c
index ec60cc9..ce55c9f 100644
--- a/src/radeon_modes.c
+++ b/src/radeon_modes.c
@@ -169,6 +169,20 @@ static DisplayModePtr RADEONFPNativeMode(xf86OutputPtr output)
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Added native panel mode: %dx%d\n",
native_mode->PanelXRes, native_mode->PanelYRes);
+ } else if (native_mode->PanelXRes != 0 &&
+ native_mode->PanelYRes != 0) {
+
+ new = xf86CVTMode(native_mode->PanelXRes, native_mode->PanelYRes, 60.0, TRUE, FALSE);
+
+ if (new) {
+ new->type = M_T_DRIVER | M_T_PREFERRED;
+
+ new->next = NULL;
+ new->prev = NULL;
+ }
+
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Added native panel mode using CVT: %dx%d\n",
+ native_mode->PanelXRes, native_mode->PanelYRes);
}
return new;
--
cgit v0.8.3-6-g21f6
From 6dc632e2e91b6a7159ab3a27617b031713d8b8c4 Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Mon, 09 Nov 2009 20:09:34 +0000
Subject: IGP: some IGP chips report as AGP
Set bus type appropriately. fixes bug 25002
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
---
diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index c726f8f..17253a7 100644
--- a/src/radeon_driver.c
+++ b/src/radeon_driver.c
@@ -1959,6 +1959,11 @@ static Bool RADEONPreInitChipType(ScrnInfoPtr pScrn)
if (info->cardType == CARD_PCIE && info->IsIGP)
info->cardType = CARD_PCI;
+ /* some rs4xx cards report as agp */
+ if ((info->ChipFamily == CHIP_FAMILY_RS400) ||
+ (info->ChipFamily == CHIP_FAMILY_RS480))
+ info->cardType = CARD_PCI;
+
if ((info->ChipFamily >= CHIP_FAMILY_R600) && info->IsIGP)
info->cardType = CARD_PCIE;
@@ -1972,7 +1977,13 @@ static Bool RADEONPreInitChipType(ScrnInfoPtr pScrn)
xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Forced into AGP mode\n");
} else if ((strcmp(s, "PCI") == 0) ||
(strcmp(s, "PCIE") == 0)) {
- if (info->ChipFamily >= CHIP_FAMILY_RV380) {
+ if ((info->ChipFamily == CHIP_FAMILY_RS400) ||
+ (info->ChipFamily == CHIP_FAMILY_RS480) ||
+ (info->ChipFamily == CHIP_FAMILY_RS690) ||
+ (info->ChipFamily == CHIP_FAMILY_RS740)) {
+ info->cardType = CARD_PCI;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Forced into PCI mode\n");
+ } else if (info->ChipFamily >= CHIP_FAMILY_RV380) {
info->cardType = CARD_PCIE;
xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Forced into PCI Express mode\n");
} else {
--
cgit v0.8.3-6-g21f6
From 93de38348fa77987297c3977d5acddbae54fbc10 Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Thu, 12 Nov 2009 16:11:17 +0000
Subject: radeon: man page updates
---
diff --git a/man/radeon.man b/man/radeon.man
index 09239cf..4d8942f 100644
--- a/man/radeon.man
+++ b/man/radeon.man
@@ -40,14 +40,14 @@ R/RV/RS2xx and RS3xx);
.TP
\(bu
Textured XVideo acceleration including anti-tearing support (Bicubic filtering
-only available on R/RV3xx, R/RV/RS4xx, R/RV5xx, and RS6xx);
+only available on R/RV3xx, R/RV/RS4xx, R/RV5xx, and RS6xx/RS740);
.TP
\(bu
Overlay XVideo acceleration (only on R/RV/RS1xx, R/RV/RS2xx,
R/RV/RS3xx, R/RV/RS4xx);
.TP
\(bu
-3D acceleration (not supported on R/RV6xx and R/RV/RS7xx);
+3D acceleration;
.PD
.SH SUPPORTED HARDWARE
The
--
cgit v0.8.3-6-g21f6
From c2892cbd18e0f25401b615055425f727e096b7cd Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Tue, 17 Nov 2009 16:45:09 +0000
Subject: radeon: fix potential memory leak in ddc code
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
---
diff --git a/src/radeon_output.c b/src/radeon_output.c
index acba31f..edf59cd 100644
--- a/src/radeon_output.c
+++ b/src/radeon_output.c
@@ -268,9 +268,11 @@ radeon_ddc_connected(xf86OutputPtr output)
break;
}
- if (MonType != MT_NONE)
+ if (MonType != MT_NONE) {
if (!xf86ReturnOptValBool(info->Options, OPTION_IGNORE_EDID, FALSE))
xf86OutputSetEDID(output, MonInfo);
+ } else
+ xfree(MonInfo);
} else
MonType = MT_NONE;
--
cgit v0.8.3-6-g21f6
From ca9c619c9c085fac3bea486cfce1c8b5ba09cd52 Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Fri, 30 Oct 2009 21:36:29 +0000
Subject: radeon: clamp the internal FB map to the aperture size v2
We don't use the invisible memory yet and on cards with
large amounts of vram this can cause the top of GART
calculation to overflow.
Fixes bug fdo bug 24301:
http://bugs.freedesktop.org/show_bug.cgi?id=24301
v2: only clamp cards with more than 512 MB. This seems
to cause problems on some older cards due to the way the
drm and ddx set up the internal memory map.
---
diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index 4e0dcf9..c726f8f 100644
--- a/src/radeon_driver.c
+++ b/src/radeon_driver.c
@@ -1364,11 +1364,14 @@ static void RADEONInitMemoryMap(ScrnInfoPtr pScrn)
/* don't map the whole FB in the internal address space.
* we don't currently use fb space larger than the aperture
- * size and on cards with 1 GB of vram, this can overflow
+ * size and on cards with more than 512 MB of vram, this can overflow
* the internal top of gart calculation on some systems.
+ * Limit it to cards with more than 512 MB as this causes problems
+ * on some other cards due to the way the ddx and drm set up the
+ * internal memory map.
* See fdo bug 24301.
*/
- if (mem_size > aper_size)
+ if (mem_size > 0x20000000)
mem_size = aper_size;
#ifdef XF86DRI
--
cgit v0.8.3-6-g21f6
From d1d3681748251fb7e95b8d56e6c37847ca6b1a8d Mon Sep 17 00:00:00 2001
From: Michael Olbrich <m.olbrich@pengutronix.de>
Date: Sun, 20 Sep 2009 12:19:41 +0000
Subject: use AC_CHECK_HEADER instead of AC_CHECK_FILE
AC_CHECK_FILE is not possible when cross-compiling. Use AC_CHECK_HEADER /
AC_PREPROC_IFELSE instead.
[ Michel Dänzer: Shuffled things around slightly to make it work on my setup ]
Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
Signed-off-by: Michel Dänzer <daenzer@vmware.com>
(cherry picked from commit 97a4e747bfac14f34646c55ddf639e8fe22f2f55)
---
diff --git a/configure.ac b/configure.ac
index f081c67..a19a308 100644
--- a/configure.ac
+++ b/configure.ac
@@ -88,14 +88,21 @@ sdkdir=$(pkg-config --variable=sdkdir xorg-server)
AC_HEADER_STDC
if test "$DRI" != no; then
- AC_CHECK_FILE([${sdkdir}/dri.h],
- [have_dri_h="yes"], [have_dri_h="no"])
- AC_CHECK_FILE([${sdkdir}/sarea.h],
- [have_sarea_h="yes"], [have_sarea_h="no"])
- AC_CHECK_FILE([${sdkdir}/dristruct.h],
- [have_dristruct_h="yes"], [have_dristruct_h="no"])
- AC_CHECK_FILE([${sdkdir}/damage.h],
- [have_damage_h="yes"], [have_damage_h="no"])
+ PKG_CHECK_MODULES(DRI, [libdrm >= 2.2 xf86driproto])
+ save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$XORG_CFLAGS $DRI_CFLAGS"
+ AC_CHECK_HEADER([dri.h],
+ [have_dri_h="yes"], [have_dri_h="no"],[-])
+ AC_CHECK_HEADER([sarea.h],
+ [have_sarea_h="yes"], [have_sarea_h="no"],[-])
+ AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
+#include <xorg-server.h>
+#include <dristruct.h>
+ ]])],
+ [have_dristruct_h="yes"], [have_dristruct_h="no"],[-])
+ AC_CHECK_HEADER([damage.h],
+ [have_damage_h="yes"], [have_damage_h="no"],[-])
+ CPPFLAGS="$save_CPPFLAGS"
fi
AC_MSG_CHECKING([whether to include DRI support])
@@ -112,7 +119,6 @@ AC_MSG_RESULT([$DRI])
AM_CONDITIONAL(DRI, test x$DRI = xyes)
if test "$DRI" = yes; then
- PKG_CHECK_MODULES(DRI, [libdrm >= 2.2 xf86driproto])
AC_DEFINE(XF86DRI,1,[Enable DRI driver support])
AC_DEFINE(XF86DRI_DEVEL,1,[Enable developmental DRI driver support])
if test "$have_damage_h" = yes; then
--
cgit v0.8.3-6-g21f6
From e7b26abc3c20fb53bf2cd02404ac5e0654fee18d Mon Sep 17 00:00:00 2001
From: Matthias Hopf <mhopf@suse.de>
Date: Tue, 15 Dec 2009 15:53:48 +0000
Subject: fix 200M freezes on VT switch if CRTC is disabled
It appears that RS4xx chips need to have the crtc
enabled when the timing is programmed.
agd5f: minor fixes/cleanup of the original patch
---
diff --git a/src/legacy_crtc.c b/src/legacy_crtc.c
index aee3d15..ba3b102 100644
--- a/src/legacy_crtc.c
+++ b/src/legacy_crtc.c
@@ -912,6 +912,11 @@ RADEONInitCrtcRegisters(xf86CrtcPtr crtc, RADEONSavePtr save,
? RADEON_CRTC_INTERLACE_EN
: 0));
+ /* 200M freezes on VT switch sometimes if CRTC is disabled */
+ if ((info->ChipFamily == CHIP_FAMILY_RS400) ||
+ (info->ChipFamily == CHIP_FAMILY_RS480))
+ save->crtc_gen_cntl |= RADEON_CRTC_EN;
+
save->crtc_ext_cntl |= (RADEON_XCRT_CNT_EN|
RADEON_CRTC_VSYNC_DIS |
RADEON_CRTC_HSYNC_DIS |
@@ -1162,6 +1167,11 @@ RADEONInitCrtc2Registers(xf86CrtcPtr crtc, RADEONSavePtr save,
? RADEON_CRTC2_INTERLACE_EN
: 0));
+ /* 200M freezes on VT switch sometimes if CRTC is disabled */
+ if ((info->ChipFamily == CHIP_FAMILY_RS400) ||
+ (info->ChipFamily == CHIP_FAMILY_RS480))
+ save->crtc2_gen_cntl |= RADEON_CRTC2_EN;
+
save->disp2_merge_cntl = info->SavedReg->disp2_merge_cntl;
save->disp2_merge_cntl &= ~(RADEON_DISP2_RGB_OFFSET_EN);
--
cgit v0.8.3-6-g21f6
From eab41805c0e6cc6deb7eca9342457b690834d7d2 Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeucher@gmail.com>
Date: Thu, 05 Nov 2009 15:23:03 +0000
Subject: EXA: fallback if no pMaskPicture->pDrawable
A solid or gradient mask could be used for blending
the source picture onto the destination picture.
Fixes fdo bug 24838
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
---
diff --git a/src/r600_exa.c b/src/r600_exa.c
index bee8f09..9aeb862 100644
--- a/src/r600_exa.c
+++ b/src/r600_exa.c
@@ -1337,7 +1337,12 @@ static Bool R600CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
}
if (pMaskPicture) {
- PixmapPtr pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable);
+ PixmapPtr pMaskPixmap;
+
+ if (!pMaskPicture->pDrawable)
+ RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
+
+ pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable);
if (pMaskPixmap->drawable.width >= max_tex_w ||
pMaskPixmap->drawable.height >= max_tex_h) {
diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c
index 8e98b9f..660ec43 100644
--- a/src/radeon_exa_render.c
+++ b/src/radeon_exa_render.c
@@ -503,7 +503,12 @@ static Bool R100CheckComposite(int op, PicturePtr pSrcPicture,
}
if (pMaskPicture) {
- PixmapPtr pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable);
+ PixmapPtr pMaskPixmap;
+
+ if (!pMaskPicture->pDrawable)
+ RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
+
+ pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable);
if (pMaskPixmap->drawable.width > 2047 ||
pMaskPixmap->drawable.height > 2047) {
@@ -833,7 +838,12 @@ static Bool R200CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
}
if (pMaskPicture) {
- PixmapPtr pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable);
+ PixmapPtr pMaskPixmap;
+
+ if (!pMaskPicture->pDrawable)
+ RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
+
+ pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable);
if (pMaskPixmap->drawable.width > 2047 ||
pMaskPixmap->drawable.height > 2047) {
@@ -1213,7 +1223,12 @@ static Bool R300CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
}
if (pMaskPicture) {
- PixmapPtr pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable);
+ PixmapPtr pMaskPixmap;
+
+ if (!pMaskPicture->pDrawable)
+ RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
+
+ pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable);
if (pMaskPixmap->drawable.width > max_tex_w ||
pMaskPixmap->drawable.height > max_tex_h) {
--
cgit v0.8.3-6-g21f6
From ecc192e2e5d72090bb35b142c6dc4639ec2542f0 Mon Sep 17 00:00:00 2001
From: Dave Airlie <airlied@linux.ie>
Date: Fri, 25 Sep 2009 20:03:51 +0000
Subject: radeon: fix zaphod
---
diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index 551cb7f..800397c 100644
--- a/src/radeon_driver.c
+++ b/src/radeon_driver.c
@@ -3727,6 +3727,8 @@ Bool RADEONScreenInit(int scrnIndex, ScreenPtr pScreen,
memset(info->FB + pScrn->fbOffset, 0,
pScrn->virtualY * pScrn->displayWidth * info->CurrentLayout.pixel_bytes);
+ pScrn->pScreen = pScreen;
+
/* set the modes with desired rotation, etc. */
if (!xf86SetDesiredModes (pScrn))
return FALSE;
--
cgit v0.8.3-6-g21f6