xserver-xorg-video-ati: Changes to 'upstream-unstable'
configure.ac | 2
man/radeon.man | 59 ++++++-------
src/Makefile.am | 2
src/ati.c | 1
src/ati.h | 1
src/ati_pciids_gen.h | 13 ++
src/atipciids.h | 1
src/atombios_output.c | 9 ++
src/cayman_reg.h | 31 +++----
src/drmmode_display.c | 52 +++++++----
src/drmmode_display.h | 10 +-
src/evergreen_accel.c | 53 +++++++++++-
src/evergreen_exa.c | 147 +++++++++++++++++++++------------
src/evergreen_reg.h | 32 +++----
src/pcidb/ati_pciids.csv | 13 ++
src/r600_exa.c | 164 ++++++++++++++++++++++++-------------
src/r600_reg.h | 35 +++-----
src/r6xx_accel.c | 4
src/radeon.h | 67 ---------------
src/radeon_bios.c | 2
src/radeon_chipinfo_gen.h | 13 ++
src/radeon_chipset_gen.h | 13 ++
src/radeon_commonfuncs.c | 6 +
src/radeon_dri.c | 30 +++++-
src/radeon_dri2.c | 166 ++++++++++++++++++++++++++++----------
src/radeon_driver.c | 14 ++-
src/radeon_exa_funcs.c | 18 ++--
src/radeon_kms.c | 36 ++++++--
src/radeon_pci_chipset_gen.h | 13 ++
src/radeon_pci_device_match_gen.h | 13 ++
src/radeon_probe.c | 29 ++++++
src/radeon_probe.h | 66 +++++++++++++++
src/radeon_textured_video.c | 2
src/radeon_video.c | 26 +++++
src/radeon_video.h | 5 +
src/radeon_xvmc.c | 144 ++++++++++++++++++++++++++++++++
src/theatre.c | 4
37 files changed, 942 insertions(+), 354 deletions(-)
New commits:
commit 93459f842c2d8dc178a1954b8e05150fcb96ac9a
Author: Michel Dänzer <michel.daenzer@amd.com>
Date: Wed Nov 2 12:51:15 2011 +0100
Bump version for 6.14.3 release.
diff --git a/configure.ac b/configure.ac
index ec54478..167432c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
# Initialize Autoconf
AC_PREREQ([2.60])
AC_INIT([xf86-video-ati],
- [6.14.99],
+ [6.14.3],
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
[xf86-video-ati])
commit fe3ce559b7f07d39ded39abb38576846d6eb185b
Author: Jeremy Huddleston <jeremyhu@apple.com>
Date: Tue Nov 1 20:27:03 2011 -0700
Build fix for -Werror=int-to-pointer-cast
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
diff --git a/src/radeon_dri.c b/src/radeon_dri.c
index f1ae65e..81dc08b 100644
--- a/src/radeon_dri.c
+++ b/src/radeon_dri.c
@@ -1581,7 +1581,7 @@ Bool RADEONDRIScreenInit(ScreenPtr pScreen)
pDRIInfo->ddxDriverMajorVersion = info->allowColorTiling ? 5 : 4;
pDRIInfo->ddxDriverMinorVersion = 3;
pDRIInfo->ddxDriverPatchVersion = 0;
- pDRIInfo->frameBufferPhysicalAddress = (void *)info->LinearAddr + info->dri->frontOffset;
+ pDRIInfo->frameBufferPhysicalAddress = (void *)(uintptr_t)info->LinearAddr + info->dri->frontOffset;
pDRIInfo->frameBufferSize = info->FbMapSize - info->FbSecureSize;
pDRIInfo->frameBufferStride = (pScrn->displayWidth *
info->CurrentLayout.pixel_bytes);
commit d3d6a5da07aaec5961e51c9a8f90c1490ee101b6
Author: Tormod Volden <debian.tormod@gmail.com>
Date: Sat Oct 29 23:08:46 2011 +0200
radeon: do not include xf86PciInfo.h
We already use atipciids.h instead most places.
Signed-off-by: Tormod Volden <debian.tormod@gmail.com>
diff --git a/src/ati.c b/src/ati.c
index ea71e88..e1c136f 100644
--- a/src/ati.c
+++ b/src/ati.c
@@ -63,6 +63,7 @@
#include "atipcirename.h"
#include "ati.h"
+#include "atipciids.h"
#include "ativersion.h"
/* names duplicated from version headers */
diff --git a/src/ati.h b/src/ati.h
index 86c40a1..b7120d9 100644
--- a/src/ati.h
+++ b/src/ati.h
@@ -26,7 +26,6 @@
#include <unistd.h>
#include <stdint.h>
#include "xf86Pci.h"
-#include "xf86PciInfo.h"
#include "xf86.h"
diff --git a/src/atipciids.h b/src/atipciids.h
index 5f66aa0..04b5960 100644
--- a/src/atipciids.h
+++ b/src/atipciids.h
@@ -44,6 +44,7 @@
#ifndef PCI_VENDOR_HP
#define PCI_VENDOR_HP 0x103c
#endif
+#define PCI_VENDOR_SONY 0x104D
#include "ati_pciids_gen.h"
diff --git a/src/radeon_bios.c b/src/radeon_bios.c
index b53a0ed..5f12534 100644
--- a/src/radeon_bios.c
+++ b/src/radeon_bios.c
@@ -34,7 +34,7 @@
#include "xf86.h"
#include "xf86_OSproc.h"
-#include "xf86PciInfo.h"
+#include "atipciids.h"
#include "radeon.h"
#include "radeon_reg.h"
#include "radeon_macros.h"
diff --git a/src/radeon_dri.c b/src/radeon_dri.c
index 07f127c..f1ae65e 100644
--- a/src/radeon_dri.c
+++ b/src/radeon_dri.c
@@ -54,7 +54,6 @@
/* X and server generic header files */
#include "xf86.h"
-#include "xf86PciInfo.h"
#include "windowstr.h"
/* GLX/DRI/DRM definitions */
commit 70da7001e81363ed6ef2c4727c512daf53ae29fe
Author: Jeremy Huddleston <jeremyhu@apple.com>
Date: Sat Oct 29 20:15:09 2011 -0700
Use malloc/calloc/realloc/free directly
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
diff --git a/src/theatre.c b/src/theatre.c
index ad055c5..fc68f27 100644
--- a/src/theatre.c
+++ b/src/theatre.c
@@ -46,7 +46,7 @@ TheatrePtr DetectTheatre(GENERIC_BUS_Ptr b)
return NULL;
}
- t = xcalloc(1,sizeof(TheatreRec));
+ t = calloc(1,sizeof(TheatreRec));
t->VIP = b;
t->theatre_num = -1;
t->mode=MODE_UNINITIALIZED;
@@ -81,7 +81,7 @@ TheatrePtr DetectTheatre(GENERIC_BUS_Ptr b)
if(t->theatre_num < 0)
{
- xfree(t);
+ free(t);
return NULL;
}
commit a3bb07efb1757c33d70e2e1928219d12a4dd6498
Author: Michel Dänzer <michel.daenzer@amd.com>
Date: Tue Oct 25 17:43:58 2011 +0200
EXA >= R6xx / KMS: Avoid running out of CS space at inconvenient times.
Otherwise we may end up with things not properly set up at the beginning of the
next CS.
Fixes http://bugs.debian.org/645007 .
In contrast to the Composite code for < R6xx, this isn't necessary with UMS,
as the draw packet only uses constant space in the indirect buffer, and nothing
else can mess with the 3D state between indirect buffers.
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
diff --git a/src/evergreen_exa.c b/src/evergreen_exa.c
index 306e90f..6becbb3 100644
--- a/src/evergreen_exa.c
+++ b/src/evergreen_exa.c
@@ -55,9 +55,6 @@ extern int cayman_xv_ps(RADEONChipFamily ChipSet, uint32_t* shader);
extern int cayman_comp_vs(RADEONChipFamily ChipSet, uint32_t* vs);
extern int cayman_comp_ps(RADEONChipFamily ChipSet, uint32_t* ps);
-static void
-EVERGREENDoneSolid(PixmapPtr pPix);
-
static Bool
EVERGREENPrepareSolid(PixmapPtr pPix, int alu, Pixel pm, Pixel fg)
{
@@ -205,9 +202,27 @@ EVERGREENPrepareSolid(PixmapPtr pPix, int alu, Pixel pm, Pixel fg)
if (accel_state->vsync)
RADEONVlineHelperClear(pScrn);
+ accel_state->dst_pix = pPix;
+ accel_state->fg = fg;
+
return TRUE;
}
+static void
+EVERGREENDoneSolid(PixmapPtr pPix)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum];
+ RADEONInfoPtr info = RADEONPTR(pScrn);
+ struct radeon_accel_state *accel_state = info->accel_state;
+
+ if (accel_state->vsync)
+ evergreen_cp_wait_vline_sync(pScrn, pPix,
+ accel_state->vline_crtc,
+ accel_state->vline_y1,
+ accel_state->vline_y2);
+
+ evergreen_finish_op(pScrn, 8);
+}
static void
EVERGREENSolid(PixmapPtr pPix, int x1, int y1, int x2, int y2)
@@ -217,6 +232,15 @@ EVERGREENSolid(PixmapPtr pPix, int x1, int y1, int x2, int y2)
struct radeon_accel_state *accel_state = info->accel_state;
float *vb;
+ if (CS_FULL(info->cs)) {
+ EVERGREENDoneSolid(info->accel_state->dst_pix);
+ radeon_cs_flush_indirect(pScrn);
+ EVERGREENPrepareSolid(accel_state->dst_pix,
+ accel_state->rop,
+ accel_state->planemask,
+ accel_state->fg);
+ }
+
if (accel_state->vsync)
RADEONVlineHelperSet(pScrn, x1, y1, x2, y2);
@@ -235,22 +259,6 @@ EVERGREENSolid(PixmapPtr pPix, int x1, int y1, int x2, int y2)
}
static void
-EVERGREENDoneSolid(PixmapPtr pPix)
-{
- ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum];
- RADEONInfoPtr info = RADEONPTR(pScrn);
- struct radeon_accel_state *accel_state = info->accel_state;
-
- if (accel_state->vsync)
- evergreen_cp_wait_vline_sync(pScrn, pPix,
- accel_state->vline_crtc,
- accel_state->vline_y1,
- accel_state->vline_y2);
-
- evergreen_finish_op(pScrn, 8);
-}
-
-static void
EVERGREENDoPrepareCopy(ScrnInfoPtr pScrn)
{
RADEONInfoPtr info = RADEONPTR(pScrn);
@@ -510,10 +518,30 @@ EVERGREENPrepareCopy(PixmapPtr pSrc, PixmapPtr pDst,
if (accel_state->vsync)
RADEONVlineHelperClear(pScrn);
+ accel_state->dst_pix = pDst;
+ accel_state->src_pix = pSrc;
+ accel_state->xdir = xdir;
+ accel_state->ydir = ydir;
+
return TRUE;
}
static void
+EVERGREENDoneCopy(PixmapPtr pDst)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+ RADEONInfoPtr info = RADEONPTR(pScrn);
+ struct radeon_accel_state *accel_state = info->accel_state;
+
+ if (!accel_state->same_surface)
+ EVERGREENDoCopyVline(pDst);
+
+ if (accel_state->copy_area)
+ accel_state->copy_area = NULL;
+
+}
+
+static void
EVERGREENCopy(PixmapPtr pDst,
int srcX, int srcY,
int dstX, int dstY,
@@ -526,6 +554,17 @@ EVERGREENCopy(PixmapPtr pDst,
if (accel_state->same_surface && (srcX == dstX) && (srcY == dstY))
return;
+ if (CS_FULL(info->cs)) {
+ EVERGREENDoneCopy(info->accel_state->dst_pix);
+ radeon_cs_flush_indirect(pScrn);
+ EVERGREENPrepareCopy(accel_state->src_pix,
+ accel_state->dst_pix,
+ accel_state->xdir,
+ accel_state->ydir,
+ accel_state->rop,
+ accel_state->planemask);
+ }
+
if (accel_state->vsync)
RADEONVlineHelperSet(pScrn, dstX, dstY, dstX + w, dstY + h);
@@ -568,21 +607,6 @@ EVERGREENCopy(PixmapPtr pDst,
}
-static void
-EVERGREENDoneCopy(PixmapPtr pDst)
-{
- ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
- RADEONInfoPtr info = RADEONPTR(pScrn);
- struct radeon_accel_state *accel_state = info->accel_state;
-
- if (!accel_state->same_surface)
- EVERGREENDoCopyVline(pDst);
-
- if (accel_state->copy_area)
- accel_state->copy_area = NULL;
-
-}
-
struct blendinfo {
Bool dst_alpha;
Bool src_alpha;
@@ -1306,9 +1330,34 @@ static Bool EVERGREENPrepareComposite(int op, PicturePtr pSrcPicture,
if (accel_state->vsync)
RADEONVlineHelperClear(pScrn);
+ accel_state->composite_op = op;
+ accel_state->dst_pic = pDstPicture;
+ accel_state->src_pic = pSrcPicture;
+ accel_state->dst_pix = pDst;
+ accel_state->msk_pix = pMask;
+ accel_state->src_pix = pSrc;
+
return TRUE;
}
+static void EVERGREENDoneComposite(PixmapPtr pDst)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+ RADEONInfoPtr info = RADEONPTR(pScrn);
+ struct radeon_accel_state *accel_state = info->accel_state;
+ int vtx_size;
+
+ if (accel_state->vsync)
+ evergreen_cp_wait_vline_sync(pScrn, pDst,
+ accel_state->vline_crtc,
+ accel_state->vline_y1,
+ accel_state->vline_y2);
+
+ vtx_size = accel_state->msk_pic ? 24 : 16;
+
+ evergreen_finish_op(pScrn, vtx_size);
+}
+
static void EVERGREENComposite(PixmapPtr pDst,
int srcX, int srcY,
int maskX, int maskY,
@@ -1320,6 +1369,18 @@ static void EVERGREENComposite(PixmapPtr pDst,
struct radeon_accel_state *accel_state = info->accel_state;
float *vb;
+ if (CS_FULL(info->cs)) {
+ EVERGREENDoneComposite(info->accel_state->dst_pix);
+ radeon_cs_flush_indirect(pScrn);
+ EVERGREENPrepareComposite(info->accel_state->composite_op,
+ info->accel_state->src_pic,
+ info->accel_state->msk_pic,
+ info->accel_state->dst_pic,
+ info->accel_state->src_pix,
+ info->accel_state->msk_pix,
+ info->accel_state->dst_pix);
+ }
+
if (accel_state->vsync)
RADEONVlineHelperSet(pScrn, dstX, dstY, dstX + w, dstY + h);
@@ -1375,24 +1436,6 @@ static void EVERGREENComposite(PixmapPtr pDst,
}
-static void EVERGREENDoneComposite(PixmapPtr pDst)
-{
- ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
- RADEONInfoPtr info = RADEONPTR(pScrn);
- struct radeon_accel_state *accel_state = info->accel_state;
- int vtx_size;
-
- if (accel_state->vsync)
- evergreen_cp_wait_vline_sync(pScrn, pDst,
- accel_state->vline_crtc,
- accel_state->vline_y1,
- accel_state->vline_y2);
-
- vtx_size = accel_state->msk_pic ? 24 : 16;
-
- evergreen_finish_op(pScrn, vtx_size);
-}
-
static Bool
EVERGREENUploadToScreen(PixmapPtr pDst, int x, int y, int w, int h,
char *src, int src_pitch)
diff --git a/src/r600_exa.c b/src/r600_exa.c
index 2673599..71e1393 100644
--- a/src/r600_exa.c
+++ b/src/r600_exa.c
@@ -132,6 +132,11 @@ R600SetAccelState(ScrnInfoPtr pScrn,
accel_state->dst_size = 0;
}
+#ifdef XF86DRM_MODE
+ if (info->cs && CS_FULL(info->cs))
+ radeon_cs_flush_indirect(pScrn);
+#endif
+
accel_state->rop = rop;
accel_state->planemask = planemask;
@@ -170,9 +175,6 @@ R600SetAccelState(ScrnInfoPtr pScrn,
return TRUE;
}
-static void
-R600DoneSolid(PixmapPtr pPix);
-
static Bool
R600PrepareSolid(PixmapPtr pPix, int alu, Pixel pm, Pixel fg)
{
@@ -318,9 +320,27 @@ R600PrepareSolid(PixmapPtr pPix, int alu, Pixel pm, Pixel fg)
if (accel_state->vsync)
RADEONVlineHelperClear(pScrn);
+ accel_state->dst_pix = pPix;
+ accel_state->fg = fg;
+
return TRUE;
}
+static void
+R600DoneSolid(PixmapPtr pPix)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum];
+ RADEONInfoPtr info = RADEONPTR(pScrn);
+ struct radeon_accel_state *accel_state = info->accel_state;
+
+ if (accel_state->vsync)
+ r600_cp_wait_vline_sync(pScrn, accel_state->ib, pPix,
+ accel_state->vline_crtc,
+ accel_state->vline_y1,
+ accel_state->vline_y2);
+
+ r600_finish_op(pScrn, 8);
+}
static void
R600Solid(PixmapPtr pPix, int x1, int y1, int x2, int y2)
@@ -330,6 +350,17 @@ R600Solid(PixmapPtr pPix, int x1, int y1, int x2, int y2)
struct radeon_accel_state *accel_state = info->accel_state;
float *vb;
+#ifdef XF86DRM_MODE
+ if (info->cs && CS_FULL(info->cs)) {
+ R600DoneSolid(info->accel_state->dst_pix);
+ radeon_cs_flush_indirect(pScrn);
+ R600PrepareSolid(accel_state->dst_pix,
+ accel_state->rop,
+ accel_state->planemask,
+ accel_state->fg);
+ }
+#endif
+
if (accel_state->vsync)
RADEONVlineHelperSet(pScrn, x1, y1, x2, y2);
@@ -348,22 +379,6 @@ R600Solid(PixmapPtr pPix, int x1, int y1, int x2, int y2)
}
static void
-R600DoneSolid(PixmapPtr pPix)
-{
- ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum];
- RADEONInfoPtr info = RADEONPTR(pScrn);
- struct radeon_accel_state *accel_state = info->accel_state;
-
- if (accel_state->vsync)
- r600_cp_wait_vline_sync(pScrn, accel_state->ib, pPix,
- accel_state->vline_crtc,
- accel_state->vline_y1,
- accel_state->vline_y2);
-
- r600_finish_op(pScrn, 8);
-}
-
-static void
R600DoPrepareCopy(ScrnInfoPtr pScrn)
{
RADEONInfoPtr info = RADEONPTR(pScrn);
@@ -653,10 +668,33 @@ R600PrepareCopy(PixmapPtr pSrc, PixmapPtr pDst,
if (accel_state->vsync)
RADEONVlineHelperClear(pScrn);
+ accel_state->dst_pix = pDst;
+ accel_state->src_pix = pSrc;
+ accel_state->xdir = xdir;
+ accel_state->ydir = ydir;
+
return TRUE;
}
static void
+R600DoneCopy(PixmapPtr pDst)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+ RADEONInfoPtr info = RADEONPTR(pScrn);
+ struct radeon_accel_state *accel_state = info->accel_state;
+
+ if (!accel_state->same_surface)
+ R600DoCopyVline(pDst);
+
+ if (accel_state->copy_area) {
+ if (!info->cs)
+ exaOffscreenFree(pDst->drawable.pScreen, accel_state->copy_area);
+ accel_state->copy_area = NULL;
+ }
+
+}
+
+static void
R600Copy(PixmapPtr pDst,
int srcX, int srcY,
int dstX, int dstY,
@@ -669,6 +707,19 @@ R600Copy(PixmapPtr pDst,
if (accel_state->same_surface && (srcX == dstX) && (srcY == dstY))
return;
+#ifdef XF86DRM_MODE
+ if (info->cs && CS_FULL(info->cs)) {
+ R600DoneCopy(info->accel_state->dst_pix);
+ radeon_cs_flush_indirect(pScrn);
+ R600PrepareCopy(accel_state->src_pix,
+ accel_state->dst_pix,
+ accel_state->xdir,
+ accel_state->ydir,
+ accel_state->rop,
+ accel_state->planemask);
+ }
+#endif
+
if (accel_state->vsync)
RADEONVlineHelperSet(pScrn, dstX, dstY, dstX + w, dstY + h);
@@ -723,24 +774,6 @@ R600Copy(PixmapPtr pDst,
}
-static void
-R600DoneCopy(PixmapPtr pDst)
-{
- ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
- RADEONInfoPtr info = RADEONPTR(pScrn);
- struct radeon_accel_state *accel_state = info->accel_state;
-
- if (!accel_state->same_surface)
- R600DoCopyVline(pDst);
-
- if (accel_state->copy_area) {
- if (!info->cs)
- exaOffscreenFree(pDst->drawable.pScreen, accel_state->copy_area);
- accel_state->copy_area = NULL;
- }
-
-}
-
struct blendinfo {
Bool dst_alpha;
Bool src_alpha;
@@ -1452,9 +1485,34 @@ static Bool R600PrepareComposite(int op, PicturePtr pSrcPicture,
if (accel_state->vsync)
RADEONVlineHelperClear(pScrn);
+ accel_state->composite_op = op;
+ accel_state->dst_pic = pDstPicture;
+ accel_state->src_pic = pSrcPicture;
+ accel_state->dst_pix = pDst;
+ accel_state->msk_pix = pMask;
+ accel_state->src_pix = pSrc;
+
return TRUE;
}
+static void R600DoneComposite(PixmapPtr pDst)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+ RADEONInfoPtr info = RADEONPTR(pScrn);
+ struct radeon_accel_state *accel_state = info->accel_state;
+ int vtx_size;
+
+ if (accel_state->vsync)
+ r600_cp_wait_vline_sync(pScrn, accel_state->ib, pDst,
+ accel_state->vline_crtc,
+ accel_state->vline_y1,
+ accel_state->vline_y2);
+
+ vtx_size = accel_state->msk_pic ? 24 : 16;
+
+ r600_finish_op(pScrn, vtx_size);
+}
+
static void R600Composite(PixmapPtr pDst,
int srcX, int srcY,
int maskX, int maskY,
@@ -1469,6 +1527,20 @@ static void R600Composite(PixmapPtr pDst,
/* ErrorF("R600Composite (%d,%d) (%d,%d) (%d,%d) (%d,%d)\n",
srcX, srcY, maskX, maskY,dstX, dstY, w, h); */
+#ifdef XF86DRM_MODE
+ if (info->cs && CS_FULL(info->cs)) {
+ R600DoneComposite(info->accel_state->dst_pix);
+ radeon_cs_flush_indirect(pScrn);
+ R600PrepareComposite(info->accel_state->composite_op,
+ info->accel_state->src_pic,
+ info->accel_state->msk_pic,
+ info->accel_state->dst_pic,
+ info->accel_state->src_pix,
+ info->accel_state->msk_pix,
+ info->accel_state->dst_pix);
+ }
+#endif
+
if (accel_state->vsync)
RADEONVlineHelperSet(pScrn, dstX, dstY, dstX + w, dstY + h);
@@ -1524,24 +1596,6 @@ static void R600Composite(PixmapPtr pDst,
}
-static void R600DoneComposite(PixmapPtr pDst)
-{
- ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
- RADEONInfoPtr info = RADEONPTR(pScrn);
- struct radeon_accel_state *accel_state = info->accel_state;
- int vtx_size;
-
- if (accel_state->vsync)
- r600_cp_wait_vline_sync(pScrn, accel_state->ib, pDst,
- accel_state->vline_crtc,
- accel_state->vline_y1,
- accel_state->vline_y2);
-
- vtx_size = accel_state->msk_pic ? 24 : 16;
-
- r600_finish_op(pScrn, vtx_size);
-}
-
Bool
R600CopyToVRAM(ScrnInfoPtr pScrn,
char *src, int src_pitch,
diff --git a/src/radeon.h b/src/radeon.h
index 50ce62f..73d6db1 100644
--- a/src/radeon.h
+++ b/src/radeon.h
@@ -735,12 +735,13 @@ struct radeon_accel_state {
// UTS/DFS
drmBufPtr scratch;
- // copy
+ // solid/copy
ExaOffscreenArea *copy_area;
struct radeon_bo *copy_area_bo;
Bool same_surface;
int rop;
uint32_t planemask;
+ uint32_t fg;
// composite
Bool component_alpha;
commit 23788c4a5e3b6affb9b183e1393edd0e5ca4550e
Author: Michel Dänzer <michel.daenzer@amd.com>
Date: Thu Oct 27 19:12:22 2011 +0200
EXA < R6xx: Make sure 2D state is re-emitted after running out of CS space.
Otherwise it's basically luck what the 2D state ends up being at the beginning
of the next CS.
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
diff --git a/src/radeon_exa_funcs.c b/src/radeon_exa_funcs.c
index 52adcea..058a547 100644
--- a/src/radeon_exa_funcs.c
+++ b/src/radeon_exa_funcs.c
@@ -132,14 +132,13 @@ static void FUNC_NAME(Emit2DState)(ScrnInfoPtr pScrn, int op)
}
static void
-FUNC_NAME(RADEONDone2D)(PixmapPtr pPix)
+FUNC_NAME(RADEONFlush2D)(PixmapPtr pPix)
{
RINFO_FROM_SCREEN(pPix->drawable.pScreen);
ACCEL_PREAMBLE();
TRACE;
- info->state_2d.op = 0;
BEGIN_ACCEL(2);
OUT_ACCEL_REG(RADEON_DSTCACHE_CTLSTAT, RADEON_RB2D_DC_FLUSH_ALL);
OUT_ACCEL_REG(RADEON_WAIT_UNTIL,
@@ -147,6 +146,15 @@ FUNC_NAME(RADEONDone2D)(PixmapPtr pPix)
FINISH_ACCEL();
}
+static void
+FUNC_NAME(RADEONDone2D)(PixmapPtr pPix)
+{
+ RINFO_FROM_SCREEN(pPix->drawable.pScreen);
+ info->state_2d.op = 0;
+
+ FUNC_NAME(RADEONFlush2D)(pPix);
+}
+
static Bool
FUNC_NAME(RADEONPrepareSolid)(PixmapPtr pPix, int alu, Pixel pm, Pixel fg)
{
@@ -220,7 +228,7 @@ FUNC_NAME(RADEONSolid)(PixmapPtr pPix, int x1, int y1, int x2, int y2)
#if defined(ACCEL_CP) && defined(XF86DRM_MODE)
if (info->cs && CS_FULL(info->cs)) {
- FUNC_NAME(RADEONDone2D)(info->accel_state->dst_pix);
+ FUNC_NAME(RADEONFlush2D)(info->accel_state->dst_pix);
radeon_cs_flush_indirect(pScrn);
}
#endif
@@ -332,7 +340,7 @@ FUNC_NAME(RADEONCopy)(PixmapPtr pDst,
#if defined(ACCEL_CP) && defined(XF86DRM_MODE)
if (info->cs && CS_FULL(info->cs)) {
- FUNC_NAME(RADEONDone2D)(info->accel_state->dst_pix);
+ FUNC_NAME(RADEONFlush2D)(info->accel_state->dst_pix);
radeon_cs_flush_indirect(pScrn);
}
#endif
commit 6e0e1a821accc6ca95f4134e49b66a6b168c1934
Author: Michel Dänzer <michel.daenzer@amd.com>
Date: Tue Oct 25 17:39:57 2011 +0200
Make radeon_dri2_create_buffer(s) more robust. (Bug #30047)
In particular, handle and propagate failure to allocate GPU accessible memory,
instead of crashing. Fixes https://bugs.freedesktop.org/show_bug.cgi?id=30047 .
Also take care not to leak resources in error paths.
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
diff --git a/src/radeon_dri2.c b/src/radeon_dri2.c
index 88117a5..8789d73 100644
--- a/src/radeon_dri2.c
+++ b/src/radeon_dri2.c
@@ -205,9 +205,17 @@ radeon_dri2_create_buffers(DrawablePtr drawable,
exaMoveInPixmap(pixmap);
info->exa_force_create = FALSE;
driver_priv = exaGetPixmapDriverPrivate(pixmap);
- r = radeon_gem_get_kernel_name(driver_priv->bo, &buffers[i].name);
- if (r)
- return r;
+ if (!driver_priv ||
+ radeon_gem_get_kernel_name(driver_priv->bo, &buffers[i].name) != 0) {
+ int j;
+
+ for (j = 0; j < i; j++)
+ (*pScreen->DestroyPixmap)(privates[j].pixmap);
+ (*pScreen->DestroyPixmap)(pixmap);
+ free(privates);
+ free(buffers);
+ return NULL;
+ }
buffers[i].attachment = attachments[i];
buffers[i].pitch = pixmap->devKind;
@@ -232,7 +240,7 @@ radeon_dri2_create_buffer(DrawablePtr drawable,
struct dri2_buffer_priv *privates;
PixmapPtr pixmap, depth_pixmap;
struct radeon_exa_pixmap_priv *driver_priv;
- int r, need_enlarge = 0;
+ int need_enlarge = 0;
int flags;
unsigned front_width;
uint32_t tiling = 0;
@@ -240,17 +248,7 @@ radeon_dri2_create_buffer(DrawablePtr drawable,
pixmap = pScreen->GetScreenPixmap(pScreen);
front_width = pixmap->drawable.width;
- buffers = calloc(1, sizeof *buffers);
- if (buffers == NULL) {
- return NULL;
- }
- privates = calloc(1, sizeof(struct dri2_buffer_priv));
- if (privates == NULL) {
- free(buffers);
- return NULL;
- }
-
- depth_pixmap = NULL;
+ pixmap = depth_pixmap = NULL;
if (attachment == DRI2BufferFrontLeft) {
if (drawable->type == DRAWABLE_PIXMAP) {
@@ -351,6 +349,13 @@ radeon_dri2_create_buffer(DrawablePtr drawable,
}
}
+ if (!pixmap)
+ return NULL;
+
+ buffers = calloc(1, sizeof *buffers);
+ if (buffers == NULL)
+ goto error;
+
if (attachment == DRI2BufferDepth) {
depth_pixmap = pixmap;
}
@@ -358,9 +363,13 @@ radeon_dri2_create_buffer(DrawablePtr drawable,
exaMoveInPixmap(pixmap);
info->exa_force_create = FALSE;
driver_priv = exaGetPixmapDriverPrivate(pixmap);
- r = radeon_gem_get_kernel_name(driver_priv->bo, &buffers->name);
- if (r)
- return NULL;
+ if (!driver_priv ||
+ (radeon_gem_get_kernel_name(driver_priv->bo, &buffers->name) != 0))
+ goto error;
+
+ privates = calloc(1, sizeof(struct dri2_buffer_priv));
+ if (privates == NULL)
+ goto error;
buffers->attachment = attachment;
buffers->pitch = pixmap->devKind;
@@ -373,6 +382,12 @@ radeon_dri2_create_buffer(DrawablePtr drawable,
privates->refcnt = 1;
return buffers;
+
+error:
+ free(buffers);
+ if (pixmap)
+ (*pScreen->DestroyPixmap)(pixmap);
+ return NULL;
}
#endif
commit 856583dbca9319c77fed40daa9956e81a0068f9e
Author: Jerome Glisse <jglisse@redhat.com>
Date: Thu Oct 20 14:17:14 2011 -0400
radeon/kms: fallback to vesa if GPU is not supported by UMS
For GPU not supported by UMS, test in probe so that we properly
fallback to vesa.
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
diff --git a/src/radeon.h b/src/radeon.h
index f66ffd0..50ce62f 100644
--- a/src/radeon.h
+++ b/src/radeon.h
@@ -313,62 +313,6 @@ typedef struct {
DisplayModePtr mode;
} RADEONFBLayout;
-typedef enum {
- CHIP_FAMILY_UNKNOW,
- CHIP_FAMILY_LEGACY,
- CHIP_FAMILY_RADEON,
- CHIP_FAMILY_RV100,
- CHIP_FAMILY_RS100, /* U1 (IGP320M) or A3 (IGP320)*/
- CHIP_FAMILY_RV200,
- CHIP_FAMILY_RS200, /* U2 (IGP330M/340M/350M) or A4 (IGP330/340/345/350), RS250 (IGP 7000) */
- CHIP_FAMILY_R200,
- CHIP_FAMILY_RV250,
- CHIP_FAMILY_RS300, /* RS300/RS350 */
- CHIP_FAMILY_RV280,
- CHIP_FAMILY_R300,
- CHIP_FAMILY_R350,
- CHIP_FAMILY_RV350,
- CHIP_FAMILY_RV380, /* RV370/RV380/M22/M24 */
- CHIP_FAMILY_R420, /* R420/R423/M18 */
- CHIP_FAMILY_RV410, /* RV410, M26 */
- CHIP_FAMILY_RS400, /* xpress 200, 200m (RS400) Intel */
- CHIP_FAMILY_RS480, /* xpress 200, 200m (RS410/480/482/485) AMD */
- CHIP_FAMILY_RV515, /* rv515 */
- CHIP_FAMILY_R520, /* r520 */
- CHIP_FAMILY_RV530, /* rv530 */
- CHIP_FAMILY_R580, /* r580 */
- CHIP_FAMILY_RV560, /* rv560 */
- CHIP_FAMILY_RV570, /* rv570 */
- CHIP_FAMILY_RS600,
- CHIP_FAMILY_RS690,
- CHIP_FAMILY_RS740,
- CHIP_FAMILY_R600, /* r600 */
- CHIP_FAMILY_RV610,
- CHIP_FAMILY_RV630,
- CHIP_FAMILY_RV670,
- CHIP_FAMILY_RV620,
- CHIP_FAMILY_RV635,
- CHIP_FAMILY_RS780,
- CHIP_FAMILY_RS880,
- CHIP_FAMILY_RV770, /* r700 */
- CHIP_FAMILY_RV730,
- CHIP_FAMILY_RV710,
- CHIP_FAMILY_RV740,
- CHIP_FAMILY_CEDAR, /* evergreen */
- CHIP_FAMILY_REDWOOD,
- CHIP_FAMILY_JUNIPER,
- CHIP_FAMILY_CYPRESS,
- CHIP_FAMILY_HEMLOCK,
- CHIP_FAMILY_PALM,
- CHIP_FAMILY_SUMO,
- CHIP_FAMILY_SUMO2,
- CHIP_FAMILY_BARTS,
- CHIP_FAMILY_TURKS,
- CHIP_FAMILY_CAICOS,
- CHIP_FAMILY_CAYMAN,
- CHIP_FAMILY_LAST
-} RADEONChipFamily;
-
#define IS_RV100_VARIANT ((info->ChipFamily == CHIP_FAMILY_RV100) || \
(info->ChipFamily == CHIP_FAMILY_RV200) || \
(info->ChipFamily == CHIP_FAMILY_RS100) || \
@@ -501,16 +445,6 @@ struct radeon_exa_pixmap_priv {
Bool bo_mapped;
};
-typedef struct {
- uint32_t pci_device_id;
- RADEONChipFamily chip_family;
- int mobility;
- int igp;
- int nocrtc2;
- int nointtvout;
- int singledac;
-} RADEONCardInfo;
-
#define RADEON_2D_EXA_COPY 1
#define RADEON_2D_EXA_SOLID 2
diff --git a/src/radeon_probe.c b/src/radeon_probe.c
index 7819027..26dec28 100644
--- a/src/radeon_probe.c
+++ b/src/radeon_probe.c
@@ -59,9 +59,31 @@
#include "radeon_pci_chipset_gen.h"
+#include "radeon_chipinfo_gen.h"
#ifdef XSERVER_LIBPCIACCESS
#include "radeon_pci_device_match_gen.h"
+
+static Bool radeon_ums_supported(ScrnInfoPtr pScrn, struct pci_device *pci_dev)
+{
+ unsigned family = 0, i;
+
+ for (i = 0; i < sizeof(RADEONCards) / sizeof(RADEONCardInfo); i++) {
Reply to: