xf86-video-ati: Branch 'master' - 4 commits
Alex Deucher
agd5f at kemper.freedesktop.org
Tue Jun 9 12:06:27 PDT 2009
src/radeon_commonfuncs.c | 4
src/radeon_exa_funcs.c | 24 ----
src/radeon_exa_render.c | 224 +++++++++++++--------------------------
src/radeon_textured_videofuncs.c | 12 ++
4 files changed, 95 insertions(+), 169 deletions(-)
New commits:
commit 43374c7420e378918bec062f4cbd581f16adb6f0
Author: Alex Deucher <alexdeucher at gmail.com>
Date: Tue Jun 9 14:39:54 2009 -0400
r1xx/r2xx: clip 3D rendering to destination buffer
diff --git a/src/radeon_commonfuncs.c b/src/radeon_commonfuncs.c
index deea2d2..63aae92 100644
--- a/src/radeon_commonfuncs.c
+++ b/src/radeon_commonfuncs.c
@@ -776,8 +776,6 @@ static void FUNC_NAME(RADEONInit3DEngine)(ScrnInfoPtr pScrn)
FINISH_ACCEL();
BEGIN_ACCEL(5);
- OUT_ACCEL_REG(RADEON_RE_TOP_LEFT, 0);
- OUT_ACCEL_REG(RADEON_RE_WIDTH_HEIGHT, 0x07ff07ff);
OUT_ACCEL_REG(RADEON_AUX_SC_CNTL, 0);
OUT_ACCEL_REG(RADEON_RB3D_PLANEMASK, 0xffffffff);
OUT_ACCEL_REG(RADEON_SE_CNTL, (RADEON_DIFFUSE_SHADE_GOURAUD |
@@ -800,8 +798,6 @@ static void FUNC_NAME(RADEONInit3DEngine)(ScrnInfoPtr pScrn)
FINISH_ACCEL();
BEGIN_ACCEL(5);
- OUT_ACCEL_REG(RADEON_RE_TOP_LEFT, 0);
- OUT_ACCEL_REG(RADEON_RE_WIDTH_HEIGHT, 0x07ff07ff);
OUT_ACCEL_REG(RADEON_AUX_SC_CNTL, 0);
OUT_ACCEL_REG(RADEON_RB3D_PLANEMASK, 0xffffffff);
OUT_ACCEL_REG(RADEON_SE_CNTL, (RADEON_DIFFUSE_SHADE_GOURAUD |
diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c
index 7885eb9..4610d80 100644
--- a/src/radeon_exa_render.c
+++ b/src/radeon_exa_render.c
@@ -598,7 +598,7 @@ static Bool FUNC_NAME(R100PrepareComposite)(int op,
info->accel_state->is_transform[1] = FALSE;
}
- BEGIN_ACCEL(8);
+ BEGIN_ACCEL(10);
OUT_ACCEL_REG(RADEON_PP_CNTL, pp_cntl);
OUT_ACCEL_REG(RADEON_RB3D_CNTL, dst_format | RADEON_ALPHA_BLEND_ENABLE);
OUT_ACCEL_REG(RADEON_RB3D_COLOROFFSET, dst_offset);
@@ -650,6 +650,10 @@ static Bool FUNC_NAME(R100PrepareComposite)(int op,
blendcntl = RADEONGetBlendCntl(op, pMaskPicture, pDstPicture->format);
OUT_ACCEL_REG(RADEON_RB3D_BLENDCNTL, blendcntl);
+
+ OUT_ACCEL_REG(RADEON_RE_TOP_LEFT, 0);
+ OUT_ACCEL_REG(RADEON_RE_WIDTH_HEIGHT, (((pDst->drawable.width) << RADEON_RE_WIDTH_SHIFT) |
+ ((pDst->drawable.height) << RADEON_RE_HEIGHT_SHIFT)));
FINISH_ACCEL();
return TRUE;
@@ -918,7 +922,7 @@ static Bool FUNC_NAME(R200PrepareComposite)(int op, PicturePtr pSrcPicture,
info->accel_state->is_transform[1] = FALSE;
}
- BEGIN_ACCEL(11);
+ BEGIN_ACCEL(13);
OUT_ACCEL_REG(RADEON_PP_CNTL, pp_cntl);
OUT_ACCEL_REG(RADEON_RB3D_CNTL, dst_format | RADEON_ALPHA_BLEND_ENABLE);
@@ -978,6 +982,11 @@ static Bool FUNC_NAME(R200PrepareComposite)(int op, PicturePtr pSrcPicture,
/* Op operator. */
blendcntl = RADEONGetBlendCntl(op, pMaskPicture, pDstPicture->format);
OUT_ACCEL_REG(RADEON_RB3D_BLENDCNTL, blendcntl);
+
+ OUT_ACCEL_REG(RADEON_RE_TOP_LEFT, 0);
+ OUT_ACCEL_REG(RADEON_RE_WIDTH_HEIGHT, (((pDst->drawable.width) << RADEON_RE_WIDTH_SHIFT) |
+ ((pDst->drawable.height) << RADEON_RE_HEIGHT_SHIFT)));
+
FINISH_ACCEL();
return TRUE;
diff --git a/src/radeon_textured_videofuncs.c b/src/radeon_textured_videofuncs.c
index 227e19a..47878fc 100644
--- a/src/radeon_textured_videofuncs.c
+++ b/src/radeon_textured_videofuncs.c
@@ -321,6 +321,12 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv
FINISH_ACCEL();
}
+ BEGIN_ACCEL(2);
+ OUT_ACCEL_REG(RADEON_RE_TOP_LEFT, 0);
+ OUT_ACCEL_REG(RADEON_RE_WIDTH_HEIGHT, (((pPixmap->drawable.width) << RADEON_RE_WIDTH_SHIFT) |
+ ((pPixmap->drawable.height) << RADEON_RE_HEIGHT_SHIFT)));
+ FINISH_ACCEL();
+
if (pPriv->vsync) {
xf86CrtcPtr crtc = radeon_xv_pick_best_crtc(pScrn,
pPriv->drw_x,
@@ -856,6 +862,12 @@ FUNC_NAME(R200DisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
FINISH_ACCEL();
}
+ BEGIN_ACCEL(2);
+ OUT_ACCEL_REG(RADEON_RE_TOP_LEFT, 0);
+ OUT_ACCEL_REG(RADEON_RE_WIDTH_HEIGHT, (((pPixmap->drawable.width) << RADEON_RE_WIDTH_SHIFT) |
+ ((pPixmap->drawable.height) << RADEON_RE_HEIGHT_SHIFT)));
+ FINISH_ACCEL();
+
if (pPriv->vsync) {
xf86CrtcPtr crtc = radeon_xv_pick_best_crtc(pScrn,
pPriv->drw_x,
commit 74b0a38c75c1d6a6344015d32d84b43d9e80df1d
Author: Alex Deucher <alexdeucher at gmail.com>
Date: Tue Jun 9 14:26:21 2009 -0400
Consolidate indentical RADEONDoneSolid/RADEONDoneCopy functions
diff --git a/src/radeon_exa_funcs.c b/src/radeon_exa_funcs.c
index 3804498..ac82952 100644
--- a/src/radeon_exa_funcs.c
+++ b/src/radeon_exa_funcs.c
@@ -139,7 +139,7 @@ FUNC_NAME(RADEONSolid)(PixmapPtr pPix, int x1, int y1, int x2, int y2)
}
static void
-FUNC_NAME(RADEONDoneSolid)(PixmapPtr pPix)
+FUNC_NAME(RADEONDone2D)(PixmapPtr pPix)
{
RINFO_FROM_SCREEN(pPix->drawable.pScreen);
ACCEL_PREAMBLE();
@@ -231,7 +231,7 @@ FUNC_NAME(RADEONCopy)(PixmapPtr pDst,
dstY += h - 1;
}
- if (info->accel_state->vsync)
+ if (info->accel_state->vsync)
FUNC_NAME(RADEONWaitForVLine)(pScrn, pDst, RADEONBiggerCrtcArea(pDst), dstY, dstY + h);
BEGIN_ACCEL(3);
@@ -243,22 +243,6 @@ FUNC_NAME(RADEONCopy)(PixmapPtr pDst,
FINISH_ACCEL();
}
-static void
-FUNC_NAME(RADEONDoneCopy)(PixmapPtr pDst)
-{
- RINFO_FROM_SCREEN(pDst->drawable.pScreen);
- ACCEL_PREAMBLE();
-
- TRACE;
-
- BEGIN_ACCEL(2);
- OUT_ACCEL_REG(RADEON_DSTCACHE_CTLSTAT, RADEON_RB2D_DC_FLUSH_ALL);
- OUT_ACCEL_REG(RADEON_WAIT_UNTIL,
- RADEON_WAIT_2D_IDLECLEAN | RADEON_WAIT_DMA_GUI_IDLE);
- FINISH_ACCEL();
-}
-
-
#ifdef ACCEL_CP
static Bool
@@ -459,11 +443,11 @@ Bool FUNC_NAME(RADEONDrawInit)(ScreenPtr pScreen)
info->accel_state->exa->PrepareSolid = FUNC_NAME(RADEONPrepareSolid);
info->accel_state->exa->Solid = FUNC_NAME(RADEONSolid);
- info->accel_state->exa->DoneSolid = FUNC_NAME(RADEONDoneSolid);
+ info->accel_state->exa->DoneSolid = FUNC_NAME(RADEONDone2D);
info->accel_state->exa->PrepareCopy = FUNC_NAME(RADEONPrepareCopy);
info->accel_state->exa->Copy = FUNC_NAME(RADEONCopy);
- info->accel_state->exa->DoneCopy = FUNC_NAME(RADEONDoneCopy);
+ info->accel_state->exa->DoneCopy = FUNC_NAME(RADEONDone2D);
info->accel_state->exa->MarkSync = FUNC_NAME(RADEONMarkSync);
info->accel_state->exa->WaitMarker = FUNC_NAME(RADEONSync);
commit f6dff8836729cc9d29264080c9cfa0e1df6182cf
Author: Alex Deucher <alexdeucher at gmail.com>
Date: Tue Jun 9 13:31:15 2009 -0400
r3xx/r4xx/r5xx: clip 3D rendering to destination buffer
diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c
index 87339d4..7885eb9 100644
--- a/src/radeon_exa_render.c
+++ b/src/radeon_exa_render.c
@@ -1918,14 +1918,18 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
/* Clear out scissoring */
BEGIN_ACCEL(2);
- if (IS_R300_3D)
+ if (IS_R300_3D) {
OUT_ACCEL_REG(R300_SC_SCISSOR0, ((1440 << R300_SCISSOR_X_SHIFT) |
(1440 << R300_SCISSOR_Y_SHIFT)));
- else
+ OUT_ACCEL_REG(R300_SC_SCISSOR1, (((pDst->drawable.width + 1440 - 1) << R300_SCISSOR_X_SHIFT) |
+ ((pDst->drawable.height + 1440 - 1) << R300_SCISSOR_Y_SHIFT)));
+
+ } else {
OUT_ACCEL_REG(R300_SC_SCISSOR0, ((0 << R300_SCISSOR_X_SHIFT) |
(0 << R300_SCISSOR_Y_SHIFT)));
- OUT_ACCEL_REG(R300_SC_SCISSOR1, ((8191 << R300_SCISSOR_X_SHIFT) |
- (8191 << R300_SCISSOR_Y_SHIFT)));
+ OUT_ACCEL_REG(R300_SC_SCISSOR1, (((pDst->drawable.width - 1) << R300_SCISSOR_X_SHIFT) |
+ ((pDst->drawable.height - 1) << R300_SCISSOR_Y_SHIFT)));
+ }
FINISH_ACCEL();
BEGIN_ACCEL(3);
commit 48dbf09e1309c815ac8b733145a0310083a29933
Author: Alex Deucher <alexdeucher at gmail.com>
Date: Tue Jun 9 13:12:40 2009 -0400
r3xx/r4xx/r5xx: refactor exa prepare composite
- consolidate code duplicated between r3xx/r4xx and r5xx
- make pixel shader setup easier to read and less
redundant
diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c
index bbe3a68..87339d4 100644
--- a/src/radeon_exa_render.c
+++ b/src/radeon_exa_render.c
@@ -1310,7 +1310,9 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
RINFO_FROM_SCREEN(pDst->drawable.pScreen);
uint32_t dst_format, dst_offset, dst_pitch;
uint32_t txenable, colorpitch;
- uint32_t blendcntl;
+ uint32_t blendcntl, output_fmt;
+ uint32_t src_color, src_alpha;
+ uint32_t mask_color, mask_alpha;
int pixel_shift;
ACCEL_PREAMBLE();
@@ -1457,12 +1459,33 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
OUT_ACCEL_REG(R300_TX_ENABLE, txenable);
FINISH_ACCEL();
+ /* shader output swizzling */
+ switch (pDstPicture->format) {
+ case PICT_a8r8g8b8:
+ case PICT_x8r8g8b8:
+ default:
+ output_fmt = (R300_OUT_FMT_C4_8 |
+ R300_OUT_FMT_C0_SEL_BLUE |
+ R300_OUT_FMT_C1_SEL_GREEN |
+ R300_OUT_FMT_C2_SEL_RED |
+ R300_OUT_FMT_C3_SEL_ALPHA);
+ break;
+ case PICT_a8b8g8r8:
+ case PICT_x8b8g8r8:
+ output_fmt = (R300_OUT_FMT_C4_8 |
+ R300_OUT_FMT_C0_SEL_RED |
+ R300_OUT_FMT_C1_SEL_GREEN |
+ R300_OUT_FMT_C2_SEL_BLUE |
+ R300_OUT_FMT_C3_SEL_ALPHA);
+ break;
+ case PICT_a8:
+ output_fmt = (R300_OUT_FMT_C4_8 |
+ R300_OUT_FMT_C0_SEL_ALPHA);
+ break;
+ }
+
/* setup pixel shader */
if (IS_R300_3D) {
- uint32_t output_fmt;
- int src_color, src_alpha;
- int mask_color, mask_alpha;
-
if (PICT_FORMAT_RGB(pSrcPicture->format) == 0)
src_color = R300_ALU_RGB_0_0;
else
@@ -1473,45 +1496,22 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
else
src_alpha = R300_ALU_ALPHA_SRC0_A;
- if (pMask && pMaskPicture->componentAlpha) {
- if (RadeonBlendOp[op].src_alpha) {
- if (PICT_FORMAT_A(pSrcPicture->format) == 0) {
- src_color = R300_ALU_RGB_1_0;
- src_alpha = R300_ALU_ALPHA_1_0;
- } else {
- src_color = R300_ALU_RGB_SRC0_AAA;
- src_alpha = R300_ALU_ALPHA_SRC0_A;
- }
-
+ if (pMask) {
+ if (pMaskPicture->componentAlpha) {
+ if (RadeonBlendOp[op].src_alpha) {
+ if (PICT_FORMAT_A(pSrcPicture->format) == 0)
+ src_color = R300_ALU_RGB_1_0;
+ else
+ src_color = R300_ALU_RGB_SRC0_AAA;
+ } else
+ src_color = R300_ALU_RGB_SRC0_RGB;
mask_color = R300_ALU_RGB_SRC1_RGB;
-
- if (PICT_FORMAT_A(pMaskPicture->format) == 0)
- mask_alpha = R300_ALU_ALPHA_1_0;
- else
- mask_alpha = R300_ALU_ALPHA_SRC1_A;
-
} else {
- src_color = R300_ALU_RGB_SRC0_RGB;
-
- if (PICT_FORMAT_A(pSrcPicture->format) == 0)
- src_alpha = R300_ALU_ALPHA_1_0;
- else
- src_alpha = R300_ALU_ALPHA_SRC0_A;
-
- mask_color = R300_ALU_RGB_SRC1_RGB;
-
if (PICT_FORMAT_A(pMaskPicture->format) == 0)
- mask_alpha = R300_ALU_ALPHA_1_0;
+ mask_color = R300_ALU_RGB_1_0;
else
- mask_alpha = R300_ALU_ALPHA_SRC1_A;
-
+ mask_color = R300_ALU_RGB_SRC1_AAA;
}
- } else if (pMask) {
- if (PICT_FORMAT_A(pMaskPicture->format) == 0)
- mask_color = R300_ALU_RGB_1_0;
- else
- mask_color = R300_ALU_RGB_SRC1_AAA;
-
if (PICT_FORMAT_A(pMaskPicture->format) == 0)
mask_alpha = R300_ALU_ALPHA_1_0;
else
@@ -1521,32 +1521,6 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
mask_alpha = R300_ALU_ALPHA_1_0;
}
- /* shader output swizzling */
- switch (pDstPicture->format) {
- case PICT_a8r8g8b8:
- case PICT_x8r8g8b8:
- default:
- output_fmt = (R300_OUT_FMT_C4_8 |
- R300_OUT_FMT_C0_SEL_BLUE |
- R300_OUT_FMT_C1_SEL_GREEN |
- R300_OUT_FMT_C2_SEL_RED |
- R300_OUT_FMT_C3_SEL_ALPHA);
- break;
- case PICT_a8b8g8r8:
- case PICT_x8b8g8r8:
- output_fmt = (R300_OUT_FMT_C4_8 |
- R300_OUT_FMT_C0_SEL_RED |
- R300_OUT_FMT_C1_SEL_GREEN |
- R300_OUT_FMT_C2_SEL_BLUE |
- R300_OUT_FMT_C3_SEL_ALPHA);
- break;
- case PICT_a8:
- output_fmt = (R300_OUT_FMT_C4_8 |
- R300_OUT_FMT_C0_SEL_ALPHA);
- break;
- }
-
-
/* setup the rasterizer, load FS */
if (pMask) {
BEGIN_ACCEL(16);
@@ -1690,10 +1664,6 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
R300_ALU_ALPHA_CLAMP));
FINISH_ACCEL();
} else {
- uint32_t output_fmt;
- uint32_t src_color, src_alpha;
- uint32_t mask_color, mask_alpha;
-
if (PICT_FORMAT_RGB(pSrcPicture->format) == 0)
src_color = (R500_ALU_RGB_R_SWIZ_A_0 |
R500_ALU_RGB_G_SWIZ_A_0 |
@@ -1708,59 +1678,35 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
else
src_alpha = R500_ALPHA_SWIZ_A_A;
- if (pMask && pMaskPicture->componentAlpha) {
- if (RadeonBlendOp[op].src_alpha) {
- if (PICT_FORMAT_A(pSrcPicture->format) == 0) {
- src_color = (R500_ALU_RGB_R_SWIZ_A_1 |
- R500_ALU_RGB_G_SWIZ_A_1 |
- R500_ALU_RGB_B_SWIZ_A_1);
- src_alpha = R500_ALPHA_SWIZ_A_1;
- } else {
- src_color = (R500_ALU_RGB_R_SWIZ_A_A |
- R500_ALU_RGB_G_SWIZ_A_A |
- R500_ALU_RGB_B_SWIZ_A_A);
- src_alpha = R500_ALPHA_SWIZ_A_A;
- }
+ if (pMask) {
+ if (pMaskPicture->componentAlpha) {
+ if (RadeonBlendOp[op].src_alpha) {
+ if (PICT_FORMAT_A(pSrcPicture->format) == 0)
+ src_color = (R500_ALU_RGB_R_SWIZ_A_1 |
+ R500_ALU_RGB_G_SWIZ_A_1 |
+ R500_ALU_RGB_B_SWIZ_A_1);
+ else
+ src_color = (R500_ALU_RGB_R_SWIZ_A_A |
+ R500_ALU_RGB_G_SWIZ_A_A |
+ R500_ALU_RGB_B_SWIZ_A_A);
+ } else
+ src_color = (R500_ALU_RGB_R_SWIZ_A_R |
+ R500_ALU_RGB_G_SWIZ_A_G |
+ R500_ALU_RGB_B_SWIZ_A_B);
mask_color = (R500_ALU_RGB_R_SWIZ_B_R |
R500_ALU_RGB_G_SWIZ_B_G |
R500_ALU_RGB_B_SWIZ_B_B);
-
- if (PICT_FORMAT_A(pMaskPicture->format) == 0)
- mask_alpha = R500_ALPHA_SWIZ_B_1;
- else
- mask_alpha = R500_ALPHA_SWIZ_B_A;
-
} else {
- src_color = (R500_ALU_RGB_R_SWIZ_A_R |
- R500_ALU_RGB_G_SWIZ_A_G |
- R500_ALU_RGB_B_SWIZ_A_B);
-
- if (PICT_FORMAT_A(pSrcPicture->format) == 0)
- src_alpha = R500_ALPHA_SWIZ_A_1;
- else
- src_alpha = R500_ALPHA_SWIZ_A_A;
-
- mask_color = (R500_ALU_RGB_R_SWIZ_B_R |
- R500_ALU_RGB_G_SWIZ_B_G |
- R500_ALU_RGB_B_SWIZ_B_B);
-
if (PICT_FORMAT_A(pMaskPicture->format) == 0)
- mask_alpha = R500_ALPHA_SWIZ_B_1;
+ mask_color = (R500_ALU_RGB_R_SWIZ_B_1 |
+ R500_ALU_RGB_G_SWIZ_B_1 |
+ R500_ALU_RGB_B_SWIZ_B_1);
else
- mask_alpha = R500_ALPHA_SWIZ_B_A;
-
+ mask_color = (R500_ALU_RGB_R_SWIZ_B_A |
+ R500_ALU_RGB_G_SWIZ_B_A |
+ R500_ALU_RGB_B_SWIZ_B_A);
}
- } else if (pMask) {
- if (PICT_FORMAT_A(pMaskPicture->format) == 0)
- mask_color = (R500_ALU_RGB_R_SWIZ_B_1 |
- R500_ALU_RGB_G_SWIZ_B_1 |
- R500_ALU_RGB_B_SWIZ_B_1);
- else
- mask_color = (R500_ALU_RGB_R_SWIZ_B_A |
- R500_ALU_RGB_G_SWIZ_B_A |
- R500_ALU_RGB_B_SWIZ_B_A);
-
if (PICT_FORMAT_A(pMaskPicture->format) == 0)
mask_alpha = R500_ALPHA_SWIZ_B_1;
else
@@ -1772,31 +1718,6 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
mask_alpha = R500_ALPHA_SWIZ_B_1;
}
- /* shader output swizzling */
- switch (pDstPicture->format) {
- case PICT_a8r8g8b8:
- case PICT_x8r8g8b8:
- default:
- output_fmt = (R300_OUT_FMT_C4_8 |
- R300_OUT_FMT_C0_SEL_BLUE |
- R300_OUT_FMT_C1_SEL_GREEN |
- R300_OUT_FMT_C2_SEL_RED |
- R300_OUT_FMT_C3_SEL_ALPHA);
- break;
- case PICT_a8b8g8r8:
- case PICT_x8b8g8r8:
- output_fmt = (R300_OUT_FMT_C4_8 |
- R300_OUT_FMT_C0_SEL_RED |
- R300_OUT_FMT_C1_SEL_GREEN |
- R300_OUT_FMT_C2_SEL_BLUE |
- R300_OUT_FMT_C3_SEL_ALPHA);
- break;
- case PICT_a8:
- output_fmt = (R300_OUT_FMT_C4_8 |
- R300_OUT_FMT_C0_SEL_ALPHA);
- break;
- }
-
BEGIN_ACCEL(7);
if (pMask) {
/* 4 components: 2 for tex0, 2 for tex1 */
More information about the xorg-commit
mailing list