X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmesa%2Fdrivers%2Fdri%2Fr300%2Fradeon_ioctl.c;h=36502eb42de9882c576d65e225974d9b6b107d14;hb=3a40dee3eb5151a282ce831b67427f3aa625de28;hp=6a473e3bd64269aea8a7231b820de8755e28bb62;hpb=5377ac80dcabc717a93b270fbd84260b2dfe9d7a;p=mesa.git diff --git a/src/mesa/drivers/dri/r300/radeon_ioctl.c b/src/mesa/drivers/dri/r300/radeon_ioctl.c index 6a473e3bd64..36502eb42de 100644 --- a/src/mesa/drivers/dri/r300/radeon_ioctl.c +++ b/src/mesa/drivers/dri/r300/radeon_ioctl.c @@ -35,21 +35,14 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include #include -#include "glheader.h" -#include "imports.h" -#include "macros.h" -#include "context.h" +#include "main/glheader.h" +#include "main/imports.h" +#include "main/macros.h" +#include "main/context.h" #include "swrast/swrast.h" -#include "r200_context.h" #include "r300_context.h" -#include "r200_state.h" #include "radeon_ioctl.h" -#include "r200_ioctl.h" #include "r300_ioctl.h" -#if R200_MERGED -#include "r200_tcl.h" -#include "r200_sanity.h" -#endif #include "r300_state.h" #include "radeon_reg.h" @@ -164,13 +157,14 @@ static void radeonWaitForFrameCompletion(radeonContextPtr radeon) /* Copy the back color buffer to the front color buffer. */ -void radeonCopyBuffer(const __DRIdrawablePrivate * dPriv, +void radeonCopyBuffer(__DRIdrawablePrivate * dPriv, const drm_clip_rect_t * rect) { radeonContextPtr radeon; GLint nbox, i, ret; GLboolean missed_target; int64_t ust; + __DRIscreenPrivate *psp = dPriv->driScreenPriv; assert(dPriv); assert(dPriv->driContextPriv); @@ -183,10 +177,7 @@ void radeonCopyBuffer(const __DRIdrawablePrivate * dPriv, (void *)radeon->glCtx); } - if (IS_R200_CLASS(radeon->radeonScreen)) - R200_FIREVERTICES((r200ContextPtr)radeon); - else - r300Flush(radeon->glCtx); + r300Flush(radeon->glCtx); LOCK_HARDWARE(radeon); @@ -197,8 +188,7 @@ void radeonCopyBuffer(const __DRIdrawablePrivate * dPriv, if (!rect) { UNLOCK_HARDWARE(radeon); - driWaitForVBlank(dPriv, &radeon->vbl_seq, radeon->vblank_flags, - &missed_target); + driWaitForVBlank(dPriv, &missed_target); LOCK_HARDWARE(radeon); } @@ -225,16 +215,18 @@ void radeonCopyBuffer(const __DRIdrawablePrivate * dPriv, if (rect->y2 < b->y2) b->y2 = rect->y2; - if (b->x1 < b->x2 && b->y1 < b->y2) - b++; + if (b->x1 >= b->x2 || b->y1 >= b->y2) + continue; } - else - b++; + b++; n++; } radeon->sarea->nbox = n; + if (!n) + continue; + ret = drmCommandNone(radeon->dri.fd, DRM_RADEON_SWAP); if (ret) { @@ -248,13 +240,10 @@ void radeonCopyBuffer(const __DRIdrawablePrivate * dPriv, UNLOCK_HARDWARE(radeon); if (!rect) { - if (IS_R200_CLASS(radeon->radeonScreen)) - ((r200ContextPtr)radeon)->hw.all_dirty = GL_TRUE; - else - ((r300ContextPtr)radeon)->hw.all_dirty = GL_TRUE; + ((r300ContextPtr)radeon)->hw.all_dirty = GL_TRUE; radeon->swap_count++; - (*dri_interface->getUST) (&ust); + (*psp->systemTime->getUST) (&ust); if (missed_target) { radeon->swap_missed_count++; radeon->swap_missed_ust = ust - radeon->swap_ust; @@ -266,11 +255,12 @@ void radeonCopyBuffer(const __DRIdrawablePrivate * dPriv, } } -void radeonPageFlip(const __DRIdrawablePrivate * dPriv) +void radeonPageFlip(__DRIdrawablePrivate * dPriv) { radeonContextPtr radeon; GLint ret; GLboolean missed_target; + __DRIscreenPrivate *psp = dPriv->driScreenPriv; assert(dPriv); assert(dPriv->driContextPriv); @@ -283,10 +273,7 @@ void radeonPageFlip(const __DRIdrawablePrivate * dPriv) radeon->sarea->pfCurrentPage); } - if (IS_R200_CLASS(radeon->radeonScreen)) - R200_FIREVERTICES((r200ContextPtr)radeon); - else - r300Flush(radeon->glCtx); + r300Flush(radeon->glCtx); LOCK_HARDWARE(radeon); if (!dPriv->numClipRects) { @@ -309,11 +296,10 @@ void radeonPageFlip(const __DRIdrawablePrivate * dPriv) */ radeonWaitForFrameCompletion(radeon); UNLOCK_HARDWARE(radeon); - driWaitForVBlank(dPriv, &radeon->vbl_seq, radeon->vblank_flags, - &missed_target); + driWaitForVBlank(dPriv, &missed_target); if (missed_target) { radeon->swap_missed_count++; - (void)(*dri_interface->getUST) (&radeon->swap_missed_ust); + (void)(*psp->systemTime->getUST) (&radeon->swap_missed_ust); } LOCK_HARDWARE(radeon); @@ -327,7 +313,7 @@ void radeonPageFlip(const __DRIdrawablePrivate * dPriv) } radeon->swap_count++; - (void)(*dri_interface->getUST) (&radeon->swap_ust); + (void)(*psp->systemTime->getUST) (&radeon->swap_ust); driFlipRenderbuffers(radeon->glCtx->WinSysDrawBuffer, radeon->sarea->pfCurrentPage); @@ -340,14 +326,6 @@ void radeonPageFlip(const __DRIdrawablePrivate * dPriv) radeon->state.color.drawPitch = radeon->radeonScreen->backPitch; } - if (IS_R200_CLASS(radeon->radeonScreen)) { - r200ContextPtr r200 = (r200ContextPtr)radeon; - - R200_STATECHANGE(r200, ctx); - r200->hw.ctx.cmd[CTX_RB3D_COLOROFFSET] = radeon->state.color.drawOffset - + radeon->radeonScreen->fbLocation; - r200->hw.ctx.cmd[CTX_RB3D_COLORPITCH] = radeon->state.color.drawPitch; - } if (IS_R300_CLASS(radeon->radeonScreen)) { r300ContextPtr r300 = (r300ContextPtr)radeon; R300_STATECHANGE(r300, cb); @@ -378,7 +356,7 @@ void radeonWaitForIdleLocked(radeonContextPtr radeon) if (ret < 0) { UNLOCK_HARDWARE(radeon); - fprintf(stderr, "Error: R200 timed out... exiting\n"); + fprintf(stderr, "Error: R300 timed out... exiting\n"); exit(-1); } } @@ -396,10 +374,6 @@ void radeonFlush(GLcontext * ctx) if (IS_R300_CLASS(radeon->radeonScreen)) r300Flush(ctx); -#if R200_MERGED - else - r200Flush(ctx); -#endif }