From 0db4b1708c2e5f3c14f48de186ee866ab8d9d5a9 Mon Sep 17 00:00:00 2001 From: Alex Deucher 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 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 --- 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 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 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 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 --- 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 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 --- 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 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 --- 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 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 Date: Tue, 17 Nov 2009 16:45:09 +0000 Subject: radeon: fix potential memory leak in ddc code Signed-off-by: Alex Deucher --- 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 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 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 Signed-off-by: Michel Dänzer (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 +#include + ]])], + [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 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 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 --- 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 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