diff options
author | Alex Deucher <alex@samba.(none)> | 2008-02-27 02:13:10 -0500 |
---|---|---|
committer | Alex Deucher <alex@samba.(none)> | 2008-02-27 02:13:10 -0500 |
commit | 7cfad216a3f1486be194c972b9b6bcf070358586 (patch) | |
tree | f69814c2dadac514b7947107cd5da0bcce0c7a5c | |
parent | a2dca1d68d751def34ef3c6f836574173737bf76 (diff) |
RADEON: fix clipping for textured video
-rw-r--r-- | src/radeon_textured_video.c | 14 | ||||
-rw-r--r-- | src/radeon_textured_videofuncs.c | 30 | ||||
-rw-r--r-- | src/radeon_video.h | 4 |
3 files changed, 23 insertions, 25 deletions
diff --git a/src/radeon_textured_video.c b/src/radeon_textured_video.c index ff2e5d6..df62082 100644 --- a/src/radeon_textured_video.c +++ b/src/radeon_textured_video.c @@ -240,7 +240,7 @@ RADEONPutImageTextured(ScrnInfoPtr pScrn, tmp = ((top >> 1) * srcPitch2) + (left >> 1); s2offset += tmp; s3offset += tmp; - if(id == FOURCC_I420) { + if (id == FOURCC_I420) { tmp = s2offset; s2offset = s3offset; s3offset = tmp; @@ -263,18 +263,14 @@ RADEONPutImageTextured(ScrnInfoPtr pScrn, } pPriv->id = id; - pPriv->src_x1 = x1; - pPriv->src_y1 = y1; - pPriv->src_x2 = x2; - pPriv->src_y2 = y2; pPriv->src_w = src_w; pPriv->src_h = src_h; - pPriv->dst_x1 = dstBox.x1; - pPriv->dst_y1 = dstBox.y1; - pPriv->dst_x2 = dstBox.x2; - pPriv->dst_y2 = dstBox.y1; + pPriv->drw_x = drw_x; + pPriv->drw_y = drw_y; pPriv->dst_w = drw_w; pPriv->dst_h = drw_h; + pPriv->w = width; + pPriv->h = height; #ifdef XF86DRI if (info->directRenderingEnabled) diff --git a/src/radeon_textured_videofuncs.c b/src/radeon_textured_videofuncs.c index 6e8661e..e0f3bba 100644 --- a/src/radeon_textured_videofuncs.c +++ b/src/radeon_textured_videofuncs.c @@ -157,13 +157,13 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv txformat1 |= R300_TX_FORMAT_YUV_TO_RGB_CLAMP; - txformat0 = (((pPriv->src_w - 1) << R300_TXWIDTH_SHIFT) | - ((pPriv->src_h - 1) << R300_TXHEIGHT_SHIFT)); + txformat0 = (((pPriv->w - 1) << R300_TXWIDTH_SHIFT) | + ((pPriv->h - 1) << R300_TXHEIGHT_SHIFT)); txformat0 |= R300_TXPITCH_EN; - info->texW[0] = pPriv->src_w; - info->texH[0] = pPriv->src_h; + info->texW[0] = pPriv->w; + info->texH[0] = pPriv->h; txfilter = (R300_TX_CLAMP_S(R300_TX_CLAMP_CLAMP_LAST) | R300_TX_CLAMP_T(R300_TX_CLAMP_CLAMP_LAST) | @@ -419,8 +419,8 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv (info->ChipFamily == CHIP_FAMILY_RS300) || (info->ChipFamily == CHIP_FAMILY_R200)) { - info->texW[0] = pPriv->src_w; - info->texH[0] = pPriv->src_h; + info->texW[0] = pPriv->w; + info->texH[0] = pPriv->h; BEGIN_VIDEO(12); @@ -435,8 +435,8 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv OUT_VIDEO_REG(R200_PP_TXFORMAT_0, txformat); OUT_VIDEO_REG(R200_PP_TXFORMAT_X_0, 0); OUT_VIDEO_REG(R200_PP_TXSIZE_0, - (pPriv->src_w - 1) | - ((pPriv->src_h - 1) << RADEON_TEX_VSIZE_SHIFT)); + (pPriv->w - 1) | + ((pPriv->h - 1) << RADEON_TEX_VSIZE_SHIFT)); OUT_VIDEO_REG(R200_PP_TXPITCH_0, pPriv->src_pitch - 32); OUT_VIDEO_REG(R200_PP_TXOFFSET_0, pPriv->src_offset); @@ -485,8 +485,8 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv RADEON_CLAMP_TX); OUT_VIDEO_REG(RADEON_PP_TEX_SIZE_0, - (pPriv->src_w - 1) | - ((pPriv->src_h - 1) << RADEON_TEX_VSIZE_SHIFT)); + (pPriv->w - 1) | + ((pPriv->h - 1) << RADEON_TEX_VSIZE_SHIFT)); OUT_VIDEO_REG(RADEON_PP_TEX_PITCH_0, pPriv->src_pitch - 32); FINISH_VIDEO(); @@ -501,10 +501,11 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv dstY = pBox->y1 + dstyoff; dstw = pBox->x2 - pBox->x1; dsth = pBox->y2 - pBox->y1; - srcX = (pBox->x1 - pPriv->dst_x1) * - pPriv->src_w / pPriv->dst_w; - srcY = (pBox->y1 - pPriv->dst_y1) * - pPriv->src_h / pPriv->dst_h; + + srcX = ((pBox->x1 - pPriv->drw_x) * + pPriv->src_w) / pPriv->dst_w; + srcY = ((pBox->y1 - pPriv->drw_y) * + pPriv->src_h) / pPriv->dst_h; srcw = (pPriv->src_w * dstw) / pPriv->dst_w; srch = (pPriv->src_h * dsth) / pPriv->dst_h; @@ -518,6 +519,7 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv srcBottomRight.x = IntToxFixed(srcX + srcw); srcBottomRight.y = IntToxFixed(srcY + srch); + #if 0 ErrorF("dst: %d, %d, %d, %d\n", dstX, dstY, dstw, dsth); ErrorF("src: %d, %d, %d, %d\n", srcX, srcY, srcw, srch); diff --git a/src/radeon_video.h b/src/radeon_video.h index 9051faa..f897e07 100644 --- a/src/radeon_video.h +++ b/src/radeon_video.h @@ -101,9 +101,9 @@ typedef struct { CARD8 *src_addr; int id; - int src_x1, src_y1, src_x2, src_y2; - int dst_x1, dst_y1, dst_x2, dst_y2; int src_w, src_h, dst_w, dst_h; + int w, h; + int drw_x, drw_y; } RADEONPortPrivRec, *RADEONPortPrivPtr; |