diff options
author | Alex Deucher <alex@botch2.com> | 2008-04-10 14:12:15 -0400 |
---|---|---|
committer | Alex Deucher <alex@botch2.com> | 2008-04-10 14:12:15 -0400 |
commit | e1a9f26c2d2cbca9ad159e723ec95b95be1ef349 (patch) | |
tree | 4aa1b22547d60de1b740790236992080ce944522 /src | |
parent | d79040906cd25bd494feb5901f465bbd050aa923 (diff) |
R3xx+: minor textured video fixes
- set shader output swizzling correctly
- flush the right cache register on r3xx+
Diffstat (limited to 'src')
-rw-r--r-- | src/radeon_textured_videofuncs.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/radeon_textured_videofuncs.c b/src/radeon_textured_videofuncs.c index e2db615d..aa756f71 100644 --- a/src/radeon_textured_videofuncs.c +++ b/src/radeon_textured_videofuncs.c @@ -111,13 +111,17 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv /* we can probably improve this */ BEGIN_VIDEO(2); - OUT_VIDEO_REG(RADEON_RB3D_DSTCACHE_CTLSTAT, RADEON_RB3D_DC_FLUSH); + if (IS_R300_3D || IS_R500_3D) + OUT_VIDEO_REG(R300_RB3D_DSTCACHE_CTLSTAT, R300_DC_FLUSH_3D); + else + OUT_VIDEO_REG(RADEON_RB3D_DSTCACHE_CTLSTAT, RADEON_RB3D_DC_FLUSH); /* We must wait for 3d to idle, in case source was just written as a dest. */ OUT_VIDEO_REG(RADEON_WAIT_UNTIL, RADEON_WAIT_HOST_IDLECLEAN | RADEON_WAIT_2D_IDLECLEAN | RADEON_WAIT_3D_IDLECLEAN); FINISH_VIDEO(); if (IS_R300_3D || IS_R500_3D) { + CARD32 output_fmt; switch (pPixmap->drawable.bitsPerPixel) { case 16: @@ -133,6 +137,12 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv return; } + 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); + colorpitch = dst_pitch >> pixel_shift; colorpitch |= dst_format; @@ -181,7 +191,7 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv txenable = R300_TEX_0_ENABLE; - BEGIN_VIDEO(6); + BEGIN_VIDEO(7); OUT_VIDEO_REG(R300_VAP_PROG_STREAM_CNTL_0, ((R300_DATA_TYPE_FLOAT_2 << R300_DATA_TYPE_0_SHIFT) | (0 << R300_SKIP_DWORDS_0_SHIFT) | @@ -211,6 +221,7 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv OUT_VIDEO_REG(R300_TX_INVALTAGS, 0); OUT_VIDEO_REG(R300_TX_ENABLE, txenable); + OUT_VIDEO_REG(R300_US_OUT_FMT_0, output_fmt); FINISH_VIDEO(); /* setup pixel shader */ |