From ae805ac379ccfdae9ee272896665e73f5bc7d2cf Mon Sep 17 00:00:00 2001 From: Zhenyu Wang Date: Thu, 15 Nov 2007 02:13:07 +0800 Subject: [PATCH] xvmc: take out batch buffer handling code --- src/i830_memory.c | 3 +++ src/i915_hwmc.c | 62 +++++++++++++++++++++++++++++++---------------- 2 files changed, 44 insertions(+), 21 deletions(-) diff --git a/src/i830_memory.c b/src/i830_memory.c index 907a58a1..a08312db 100644 --- a/src/i830_memory.c +++ b/src/i830_memory.c @@ -2010,5 +2010,8 @@ Bool i830_allocate_xvmc_buffer(ScrnInfoPtr pScrn, const char *name, return FALSE; } + if (!i830_bind_memory(pScrn, *buffer)) + return FALSE; + return TRUE; } diff --git a/src/i915_hwmc.c b/src/i915_hwmc.c index ef242ba7..8a0abf35 100644 --- a/src/i915_hwmc.c +++ b/src/i915_hwmc.c @@ -293,14 +293,6 @@ static Bool i915_map_xvmc_buffers(ScrnInfoPtr pScrn, I915XvMCContextPriv *ctxpri return FALSE; } - if (drmAddMap(pI830->drmSubFD, - (drm_handle_t)(xvmc_driver->batch->offset + pI830->LinearAddr), - xvmc_driver->batch->size, DRM_AGP, 0, - &xvmc_driver->batch_handle) < 0) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[drm] drmAddMap(batchbuffer_handle) failed!\n"); - return FALSE; - } return TRUE; } @@ -339,10 +331,6 @@ static void i915_unmap_xvmc_buffers(ScrnInfoPtr pScrn, I915XvMCContextPriv *ctxp ctxpriv->corrdata_handle = 0; } - if (xvmc_driver->batch_handle) { - drmRmMap(pI830->drmSubFD, xvmc_driver->batch_handle); - xvmc_driver->batch_handle = 0; - } } static Bool i915_allocate_xvmc_buffers(ScrnInfoPtr pScrn, I915XvMCContextPriv *ctxpriv) @@ -390,11 +378,6 @@ static Bool i915_allocate_xvmc_buffers(ScrnInfoPtr pScrn, I915XvMCContextPriv *c return FALSE; } - if (!i830_allocate_xvmc_buffer(pScrn, "[XvMC]batch buffer", - &(xvmc_driver->batch), 8 * 1024, - ALIGN_BOTH_ENDS)) { - return FALSE; - } i830_describe_allocations(pScrn, 1, ""); return TRUE; @@ -432,10 +415,6 @@ static void i915_free_xvmc_buffers(ScrnInfoPtr pScrn, I915XvMCContextPriv *ctxpr ctxpriv->mcCorrdata = NULL; } - if (xvmc_driver->batch) { - i830_free_memory(pScrn, xvmc_driver->batch); - xvmc_driver->batch = NULL; - } } /************************************************************************** @@ -859,6 +838,40 @@ static int i915_xvmc_putimage_size(ScrnInfoPtr pScrn) return sizeof(I915XvMCCommandBuffer); } +static Bool i915_xvmc_init_batch(ScrnInfoPtr pScrn) +{ + I830Ptr pI830 = I830PTR(pScrn); + + if (!i830_allocate_xvmc_buffer(pScrn, "[XvMC] batch buffer", + &(xvmc_driver->batch), 8 * 1024, + ALIGN_BOTH_ENDS)) + return FALSE; + + if (drmAddMap(pI830->drmSubFD, + (drm_handle_t)(xvmc_driver->batch->offset+pI830->LinearAddr), + xvmc_driver->batch->size, DRM_AGP, 0, + &xvmc_driver->batch_handle) < 0) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[drm] drmAddMap(batchbuffer_handle) failed!\n"); + return FALSE; + } + return TRUE; +} + +static void i915_xvmc_fini_batch(ScrnInfoPtr pScrn) +{ + I830Ptr pI830 = I830PTR(pScrn); + + if (xvmc_driver->batch_handle) { + drmRmMap(pI830->drmSubFD, xvmc_driver->batch_handle); + xvmc_driver->batch_handle = 0; + } + if (xvmc_driver->batch) { + i830_free_memory(pScrn, xvmc_driver->batch); + xvmc_driver->batch = NULL; + } +} + static Bool i915_xvmc_init(ScrnInfoPtr pScrn, XF86VideoAdaptorPtr XvAdapt) { I915XvMCPtr pXvMC; @@ -870,6 +883,12 @@ static Bool i915_xvmc_init(ScrnInfoPtr pScrn, XF86VideoAdaptorPtr XvAdapt) return FALSE; } xvmc_driver->devPrivate = (void*)pXvMC; + if (!i915_xvmc_init_batch(pScrn)) { + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "[XvMC] fail to init batch buffer\n"); + xfree(pXvMC); + return FALSE; + } initI915XvMC(pXvMC); /* set up wrappers */ @@ -883,6 +902,7 @@ static void i915_xvmc_fini(ScrnInfoPtr pScrn) I915XvMCPtr pXvMC = (I915XvMCPtr)xvmc_driver->devPrivate; cleanupI915XvMC(pXvMC); + i915_xvmc_fini_batch(pScrn); xfree(xvmc_driver->devPrivate); }