summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Deucher <alexdeucher@gmail.com>2010-04-16 15:31:40 -0400
committerAlex Deucher <alexdeucher@gmail.com>2010-04-16 19:35:58 -0400
commitbd1cf42201a1f918080bf34786a6de327cb31b5f (patch)
treefc52d3ed6ce79dede05d086c8d2ca50fd2ed57ba
parentc1136f94b80346065893f8a43c0fbf60c8c9b057 (diff)
r1xx textured video: split into prepare and draw functions
-rw-r--r--src/radeon_textured_videofuncs.c63
1 files changed, 37 insertions, 26 deletions
diff --git a/src/radeon_textured_videofuncs.c b/src/radeon_textured_videofuncs.c
index 63ef2e81..f5f91017 100644
--- a/src/radeon_textured_videofuncs.c
+++ b/src/radeon_textured_videofuncs.c
@@ -87,8 +87,8 @@ do { \
#endif /* !ACCEL_CP */
-static void
-FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
+static Bool
+FUNC_NAME(RADEONPrepareTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
{
RADEONInfoPtr info = RADEONPTR(pScrn);
PixmapPtr pPixmap = pPriv->pPixmap;
@@ -97,9 +97,9 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv
uint32_t txformat, txsize, txpitch, txoffset;
uint32_t dst_pitch, dst_format;
uint32_t colorpitch;
- int dstxoff, dstyoff, pixel_shift;
- BoxPtr pBox = REGION_RECTS(&pPriv->clip);
- int nBox = REGION_NUM_RECTS(&pPriv->clip);
+ int pixel_shift;
+ int scissor_w = MIN(pPixmap->drawable.width, 2047);
+ int scissor_h = MIN(pPixmap->drawable.height, 2047);
ACCEL_PREAMBLE();
#ifdef XF86DRM_MODE
@@ -118,14 +118,14 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv
ret = radeon_cs_space_check(info->cs);
if (ret) {
ErrorF("Not enough RAM to hw accel xv operation\n");
- return;
+ return FALSE;
}
}
#endif
pixel_shift = pPixmap->drawable.bitsPerPixel >> 4;
-
+
#ifdef USE_EXA
if (info->useEXA) {
dst_pitch = exaGetPixmapPitch(pPixmap);
@@ -135,14 +135,6 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv
dst_pitch = pPixmap->devKind;
}
-#ifdef COMPOSITE
- dstxoff = -pPixmap->screen_x + pPixmap->drawable.x;
- dstyoff = -pPixmap->screen_y + pPixmap->drawable.y;
-#else
- dstxoff = 0;
- dstyoff = 0;
-#endif
-
#ifdef USE_EXA
if (info->useEXA) {
RADEON_SWITCH_TO_3D();
@@ -175,7 +167,7 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv
dst_format = RADEON_COLOR_FORMAT_ARGB8888;
break;
default:
- return;
+ return FALSE;
}
if (pPriv->id == FOURCC_I420 || pPriv->id == FOURCC_YV12) {
@@ -344,17 +336,36 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv
FINISH_ACCEL();
}
- {
- int scissor_w, scissor_h;
- scissor_w = MIN(pPixmap->drawable.width, 2047);
- scissor_h = MIN(pPixmap->drawable.height, 2047);
+ BEGIN_ACCEL(2);
+ OUT_ACCEL_REG(RADEON_RE_TOP_LEFT, 0);
+ OUT_ACCEL_REG(RADEON_RE_WIDTH_HEIGHT, ((scissor_w << RADEON_RE_WIDTH_SHIFT) |
+ (scissor_h << RADEON_RE_HEIGHT_SHIFT)));
+ FINISH_ACCEL();
+
+ return TRUE;
+}
+
+static void
+FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
+{
+ RADEONInfoPtr info = RADEONPTR(pScrn);
+ PixmapPtr pPixmap = pPriv->pPixmap;
+ int dstxoff, dstyoff;
+ BoxPtr pBox = REGION_RECTS(&pPriv->clip);
+ int nBox = REGION_NUM_RECTS(&pPriv->clip);
+ ACCEL_PREAMBLE();
+
+#ifdef COMPOSITE
+ dstxoff = -pPixmap->screen_x + pPixmap->drawable.x;
+ dstyoff = -pPixmap->screen_y + pPixmap->drawable.y;
+#else
+ dstxoff = 0;
+ dstyoff = 0;
+#endif
+
+ if (!FUNC_NAME(RADEONPrepareTexturedVideo)(pScrn, pPriv))
+ return;
- BEGIN_ACCEL(2);
- OUT_ACCEL_REG(RADEON_RE_TOP_LEFT, 0);
- OUT_ACCEL_REG(RADEON_RE_WIDTH_HEIGHT, ((scissor_w << RADEON_RE_WIDTH_SHIFT) |
- (scissor_h << RADEON_RE_HEIGHT_SHIFT)));
- FINISH_ACCEL();
- }
if (pPriv->vsync) {
xf86CrtcPtr crtc;
if (pPriv->desired_crtc)