xvmc: move batch buffer init/fini code into generic

This commit is contained in:
Zhenyu Wang 2007-11-29 22:56:13 +08:00
parent df47b7ba57
commit 6da4b7a80c
3 changed files with 39 additions and 35 deletions

View File

@ -116,3 +116,38 @@ int intel_xvmc_put_image_size(ScrnInfoPtr pScrn)
{
return (*xvmc_driver->put_image_size)(pScrn);
}
Bool intel_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;
}
void intel_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;
}
}

View File

@ -84,6 +84,8 @@ extern Bool intel_xvmc_driver_init(ScreenPtr, XF86VideoAdaptorPtr);
extern Bool intel_xvmc_screen_init(ScreenPtr);
extern void intel_xvmc_finish(ScrnInfoPtr);
extern int intel_xvmc_put_image_size(ScrnInfoPtr);
extern Bool intel_xvmc_init_batch(ScrnInfoPtr);
extern void intel_xvmc_fini_batch(ScrnInfoPtr);
#endif
#endif

View File

@ -805,39 +805,6 @@ static int i915_xvmc_put_image_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)
{
@ -850,7 +817,7 @@ static Bool i915_xvmc_init(ScrnInfoPtr pScrn, XF86VideoAdaptorPtr XvAdapt)
return FALSE;
}
xvmc_driver->devPrivate = (void*)pXvMC;
if (!i915_xvmc_init_batch(pScrn)) {
if (!intel_xvmc_init_batch(pScrn)) {
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
"[XvMC] fail to init batch buffer\n");
xfree(pXvMC);
@ -869,7 +836,7 @@ static void i915_xvmc_fini(ScrnInfoPtr pScrn)
I915XvMCPtr pXvMC = (I915XvMCPtr)xvmc_driver->devPrivate;
cleanupI915XvMC(pXvMC);
i915_xvmc_fini_batch(pScrn);
intel_xvmc_fini_batch(pScrn);
xfree(xvmc_driver->devPrivate);
}