diff --git a/src/atombios_crtc.c b/src/atombios_crtc.c index 620bc8d..ae83483 100644 --- a/src/atombios_crtc.c +++ b/src/atombios_crtc.c @@ -512,9 +512,23 @@ atombios_crtc_mode_set(xf86CrtcPtr crtc, OUTREG(AVIVO_D1MODE_DATA_FORMAT + radeon_crtc->crtc_offset, 0); + fprintf(stderr, "Setting %d-%d (of %d/%d)\n", + adjusted_mode->CrtcVSyncStart, adjusted_mode->CrtcVSyncEnd, + mode->VDisplay, adjusted_mode->CrtcVTotal); + + OUTREG(AVIVO_D1MODE_VLINE_START_END + radeon_crtc->crtc_offset, + (((0) << AVIVO_D1MODE_VLINE_START_SHIFT) | + ((mode->VDisplay) << AVIVO_D1MODE_VLINE_END_SHIFT) + | AVIVO_D1MODE_VLINE_INV + )); + +/* OUTREG(AVIVO_D1MODE_VLINE_START_END + radeon_crtc->crtc_offset, - ((0 << AVIVO_D1MODE_VLINE_START_SHIFT) | - (mode->VDisplay << AVIVO_D1MODE_VLINE_END_SHIFT))); + (((mode->VDisplay-100) << AVIVO_D1MODE_VLINE_START_SHIFT) | + ((mode->VDisplay-95) << AVIVO_D1MODE_VLINE_END_SHIFT) +// | AVIVO_D1MODE_VLINE_INV + )); +*/ } atombios_crtc_set_pll(crtc, adjusted_mode, pll_flags); diff --git a/src/radeon_commonfuncs.c b/src/radeon_commonfuncs.c index 5d54ee7..0fc77c5 100644 --- a/src/radeon_commonfuncs.c +++ b/src/radeon_commonfuncs.c @@ -692,10 +692,10 @@ void FUNC_NAME(RADEONWaitForVLine)(ScrnInfoPtr pScrn, PixmapPtr pPix, int crtc) if (offset == 0) { BEGIN_ACCEL(1); if (crtc == 0) - OUT_ACCEL_REG(RADEON_WAIT_UNTIL, (RADEON_WAIT_RE_CRTC_VLINE | + OUT_ACCEL_REG(RADEON_WAIT_UNTIL, (RADEON_WAIT_CRTC_VLINE | RADEON_ENG_DISPLAY_SELECT_CRTC0)); else - OUT_ACCEL_REG(RADEON_WAIT_UNTIL, (RADEON_WAIT_RE_CRTC_VLINE | + OUT_ACCEL_REG(RADEON_WAIT_UNTIL, (RADEON_WAIT_CRTC_VLINE | RADEON_ENG_DISPLAY_SELECT_CRTC1)); FINISH_ACCEL(); } diff --git a/src/radeon_textured_video.c b/src/radeon_textured_video.c index 35b332b..572db4a 100644 --- a/src/radeon_textured_video.c +++ b/src/radeon_textured_video.c @@ -460,6 +460,7 @@ RADEONSetupImageTexturedVideo(ScreenPtr pScreen) pPriv->currentBuffer = 0; pPriv->doubleBuffer = 0; pPriv->bicubic_enabled = (info->ChipFamily >= CHIP_FAMILY_RV515); + pPriv->bicubic_enabled = 0; /* gotta uninit this someplace, XXX: shouldn't be necessary for textured */ REGION_NULL(pScreen, &pPriv->clip); diff --git a/src/radeon_textured_videofuncs.c b/src/radeon_textured_videofuncs.c index 5506c4b..16c0cfd 100644 --- a/src/radeon_textured_videofuncs.c +++ b/src/radeon_textured_videofuncs.c @@ -1123,6 +1123,7 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv } } + FUNC_NAME(RADEONWaitForVLine)(pScrn, pPixmap, radeon_covering_crtc_num(pScrn, pPriv->drw_x, @@ -1161,8 +1162,16 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv #if 0 ErrorF("dst: %d, %d, %d, %d\n", dstX, dstY, dstw, dsth); ErrorF("src: %d, %d, %d, %d\n", srcX, srcY, srcw, srch); + ErrorF("off: %d, %d\n", dstxoff, dstyoff); #endif + BEGIN_ACCEL(2); + OUT_ACCEL_REG(R300_SC_SCISSOR0, ((0 << R300_SCISSOR_X_SHIFT) | + ((dstY + 1024 + 64) << R300_SCISSOR_Y_SHIFT))); + OUT_ACCEL_REG(R300_SC_SCISSOR1, (((dstX + dstw + 1024 + 64) << R300_SCISSOR_X_SHIFT) | + (8191 << R300_SCISSOR_Y_SHIFT))); + FINISH_ACCEL(); + #ifdef ACCEL_CP if (info->ChipFamily < CHIP_FAMILY_R200) { BEGIN_RING(3 * vtx_count + 3); @@ -1177,22 +1186,22 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv (3 << RADEON_CP_VC_CNTL_NUM_SHIFT)); } else { if (IS_R300_3D || IS_R500_3D) - BEGIN_RING(4 * vtx_count + 4); + BEGIN_RING(3 * vtx_count + 4); else - BEGIN_RING(4 * vtx_count + 2); + BEGIN_RING(3 * vtx_count + 2); OUT_RING(CP_PACKET3(R200_CP_PACKET3_3D_DRAW_IMMD_2, - 4 * vtx_count)); - OUT_RING(RADEON_CP_VC_CNTL_PRIM_TYPE_QUAD_LIST | + 3 * vtx_count)); + OUT_RING(RADEON_CP_VC_CNTL_PRIM_TYPE_TRI_LIST | RADEON_CP_VC_CNTL_PRIM_WALK_RING | - (4 << RADEON_CP_VC_CNTL_NUM_SHIFT)); + (3 << RADEON_CP_VC_CNTL_NUM_SHIFT)); } #else /* ACCEL_CP */ if (IS_R300_3D || IS_R500_3D) - BEGIN_ACCEL(2 + vtx_count * 4); + BEGIN_ACCEL(2 + vtx_count * 3); else if (info->ChipFamily < CHIP_FAMILY_R200) BEGIN_ACCEL(1 + vtx_count * 3); else - BEGIN_ACCEL(1 + vtx_count * 4); + BEGIN_ACCEL(1 + vtx_count * 3); if (info->ChipFamily < CHIP_FAMILY_R200) OUT_ACCEL_REG(RADEON_SE_VF_CNTL, (RADEON_VF_PRIM_TYPE_RECTANGLE_LIST | @@ -1200,9 +1209,9 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv RADEON_VF_RADEON_MODE | (3 << RADEON_VF_NUM_VERTICES_SHIFT))); else - OUT_ACCEL_REG(RADEON_SE_VF_CNTL, (RADEON_VF_PRIM_TYPE_QUAD_LIST | + OUT_ACCEL_REG(RADEON_SE_VF_CNTL, (RADEON_VF_PRIM_TYPE_TRIANGLE_LIST | RADEON_VF_PRIM_WALK_DATA | - (4 << RADEON_VF_NUM_VERTICES_SHIFT))); + (3 << RADEON_VF_NUM_VERTICES_SHIFT))); #endif if (pPriv->bicubic_enabled) { @@ -1220,15 +1229,16 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv xFixedToFloat(srcTopRight.x) + 0.5, xFixedToFloat(srcTopRight.y) + 0.5); } else { if (info->ChipFamily >= CHIP_FAMILY_R200) { - VTX_OUT((float)dstX, (float)dstY, - xFixedToFloat(srcTopLeft.x) / info->accel_state->texW[0], xFixedToFloat(srcTopLeft.y) / info->accel_state->texH[0]); + VTX_OUT((float)dstX, (float)(dstY - dsth), + xFixedToFloat(srcTopLeft.x) / info->accel_state->texW[0], xFixedToFloat(srcTopLeft.y) / info->accel_state->texH[0] - 1.0); } VTX_OUT((float)dstX, (float)(dstY + dsth), xFixedToFloat(srcBottomLeft.x) / info->accel_state->texW[0], xFixedToFloat(srcBottomLeft.y) / info->accel_state->texH[0]); - VTX_OUT((float)(dstX + dstw), (float)(dstY + dsth), - xFixedToFloat(srcBottomRight.x) / info->accel_state->texW[0], xFixedToFloat(srcBottomRight.y) / info->accel_state->texH[0]); - VTX_OUT((float)(dstX + dstw), (float)dstY, + VTX_OUT((float)(dstX + dstw * 2), (float)(dstY + dsth), + xFixedToFloat(srcBottomRight.x) / info->accel_state->texW[0] + 1.0, xFixedToFloat(srcBottomRight.y) / info->accel_state->texH[0]); +/* VTX_OUT((float)(dstX + dstw), (float)dstY, xFixedToFloat(srcTopRight.x) / info->accel_state->texW[0], xFixedToFloat(srcTopRight.y) / info->accel_state->texH[0]); +*/ } if (IS_R300_3D || IS_R500_3D)