186c93d9c46415cf7746351c502a3513f637e77e4root/*
286c93d9c46415cf7746351c502a3513f637e77e4root * Copyright (c) 2007 Intel Corporation. All Rights Reserved.
386c93d9c46415cf7746351c502a3513f637e77e4root *
486c93d9c46415cf7746351c502a3513f637e77e4root * Permission is hereby granted, free of charge, to any person obtaining a
586c93d9c46415cf7746351c502a3513f637e77e4root * copy of this software and associated documentation files (the
686c93d9c46415cf7746351c502a3513f637e77e4root * "Software"), to deal in the Software without restriction, including
786c93d9c46415cf7746351c502a3513f637e77e4root * without limitation the rights to use, copy, modify, merge, publish,
886c93d9c46415cf7746351c502a3513f637e77e4root * distribute, sub license, and/or sell copies of the Software, and to
986c93d9c46415cf7746351c502a3513f637e77e4root * permit persons to whom the Software is furnished to do so, subject to
1086c93d9c46415cf7746351c502a3513f637e77e4root * the following conditions:
1186c93d9c46415cf7746351c502a3513f637e77e4root *
1286c93d9c46415cf7746351c502a3513f637e77e4root * The above copyright notice and this permission notice (including the
1386c93d9c46415cf7746351c502a3513f637e77e4root * next paragraph) shall be included in all copies or substantial portions
1486c93d9c46415cf7746351c502a3513f637e77e4root * of the Software.
1586c93d9c46415cf7746351c502a3513f637e77e4root *
1686c93d9c46415cf7746351c502a3513f637e77e4root * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
1786c93d9c46415cf7746351c502a3513f637e77e4root * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
1886c93d9c46415cf7746351c502a3513f637e77e4root * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
1986c93d9c46415cf7746351c502a3513f637e77e4root * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
2086c93d9c46415cf7746351c502a3513f637e77e4root * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
2186c93d9c46415cf7746351c502a3513f637e77e4root * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
2286c93d9c46415cf7746351c502a3513f637e77e4root * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2386c93d9c46415cf7746351c502a3513f637e77e4root */
2486c93d9c46415cf7746351c502a3513f637e77e4root
2586c93d9c46415cf7746351c502a3513f637e77e4root#define _GNU_SOURCE 1
26cceaa0568f77a7452857559614100b71fb36ee3awangkun#include "sysdeps.h"
2786c93d9c46415cf7746351c502a3513f637e77e4root#include "va.h"
2886c93d9c46415cf7746351c502a3513f637e77e4root#include "va_backend.h"
295b3d55a0433b48477823f81821817a78ef53ac2eShuduo Sang#include "va_trace.h"
305b3d55a0433b48477823f81821817a78ef53ac2eShuduo Sang#include "va_fool.h"
3186c93d9c46415cf7746351c502a3513f637e77e4root#include "va_x11.h"
3286c93d9c46415cf7746351c502a3513f637e77e4root#include "va_dri.h"
3386c93d9c46415cf7746351c502a3513f637e77e4root#include "va_dri2.h"
3486c93d9c46415cf7746351c502a3513f637e77e4root#include "va_dricommon.h"
35b0fac498ca4863166252f1268fda83394db54153Fei Jiang#include "va_nvctrl.h"
36901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang#include "va_fglrx.h"
3786c93d9c46415cf7746351c502a3513f637e77e4root#include <stdio.h>
38b0fac498ca4863166252f1268fda83394db54153Fei Jiang#include <stdlib.h>
3986c93d9c46415cf7746351c502a3513f637e77e4root#include <stdarg.h>
4086c93d9c46415cf7746351c502a3513f637e77e4root#include <string.h>
4186c93d9c46415cf7746351c502a3513f637e77e4root#include <unistd.h>
4286c93d9c46415cf7746351c502a3513f637e77e4root#include <sys/types.h>
4386c93d9c46415cf7746351c502a3513f637e77e4root#include <sys/stat.h>
4486c93d9c46415cf7746351c502a3513f637e77e4root#include <fcntl.h>
4586c93d9c46415cf7746351c502a3513f637e77e4root#include <errno.h>
4686c93d9c46415cf7746351c502a3513f637e77e4root
4786c93d9c46415cf7746351c502a3513f637e77e4rootstatic int va_DisplayContextIsValid (
4886c93d9c46415cf7746351c502a3513f637e77e4root    VADisplayContextP pDisplayContext
4986c93d9c46415cf7746351c502a3513f637e77e4root)
5086c93d9c46415cf7746351c502a3513f637e77e4root{
51a00f54a574bb5a51af428b03577599bcc70a17b2Austin Yuan    return (pDisplayContext != NULL &&
52a00f54a574bb5a51af428b03577599bcc70a17b2Austin Yuan            pDisplayContext->pDriverContext != NULL);
5386c93d9c46415cf7746351c502a3513f637e77e4root}
5486c93d9c46415cf7746351c502a3513f637e77e4root
5586c93d9c46415cf7746351c502a3513f637e77e4rootstatic void va_DisplayContextDestroy (
5686c93d9c46415cf7746351c502a3513f637e77e4root    VADisplayContextP pDisplayContext
5786c93d9c46415cf7746351c502a3513f637e77e4root)
5886c93d9c46415cf7746351c502a3513f637e77e4root{
5936bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sang    VADriverContextP ctx;
6036bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sang    struct dri_state *dri_state;
6136bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sang
62a00f54a574bb5a51af428b03577599bcc70a17b2Austin Yuan    if (pDisplayContext == NULL)
63a00f54a574bb5a51af428b03577599bcc70a17b2Austin Yuan        return;
64a00f54a574bb5a51af428b03577599bcc70a17b2Austin Yuan
6536bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sang    ctx = pDisplayContext->pDriverContext;
66409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan    dri_state = ctx->drm_state;
6736bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sang
6836bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sang    if (dri_state && dri_state->close)
6936bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sang        dri_state->close(ctx);
7036bee3ca78947ad82f87473b5d29b9a7177ebaedShuduo Sang
71409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan    free(pDisplayContext->pDriverContext->drm_state);
7286c93d9c46415cf7746351c502a3513f637e77e4root    free(pDisplayContext->pDriverContext);
7386c93d9c46415cf7746351c502a3513f637e77e4root    free(pDisplayContext);
7486c93d9c46415cf7746351c502a3513f637e77e4root}
7586c93d9c46415cf7746351c502a3513f637e77e4root
7686c93d9c46415cf7746351c502a3513f637e77e4root
7786c93d9c46415cf7746351c502a3513f637e77e4rootstatic VAStatus va_DRI2GetDriverName (
7886c93d9c46415cf7746351c502a3513f637e77e4root    VADisplayContextP pDisplayContext,
7986c93d9c46415cf7746351c502a3513f637e77e4root    char **driver_name
8086c93d9c46415cf7746351c502a3513f637e77e4root)
8186c93d9c46415cf7746351c502a3513f637e77e4root{
8286c93d9c46415cf7746351c502a3513f637e77e4root    VADriverContextP ctx = pDisplayContext->pDriverContext;
8386c93d9c46415cf7746351c502a3513f637e77e4root
8486c93d9c46415cf7746351c502a3513f637e77e4root    if (!isDRI2Connected(ctx, driver_name))
8586c93d9c46415cf7746351c502a3513f637e77e4root        return VA_STATUS_ERROR_UNKNOWN;
8686c93d9c46415cf7746351c502a3513f637e77e4root
8786c93d9c46415cf7746351c502a3513f637e77e4root    return VA_STATUS_SUCCESS;
8886c93d9c46415cf7746351c502a3513f637e77e4root}
8986c93d9c46415cf7746351c502a3513f637e77e4root
9086c93d9c46415cf7746351c502a3513f637e77e4rootstatic VAStatus va_DRIGetDriverName (
9186c93d9c46415cf7746351c502a3513f637e77e4root    VADisplayContextP pDisplayContext,
9286c93d9c46415cf7746351c502a3513f637e77e4root    char **driver_name
9386c93d9c46415cf7746351c502a3513f637e77e4root)
9486c93d9c46415cf7746351c502a3513f637e77e4root{
9586c93d9c46415cf7746351c502a3513f637e77e4root    VADriverContextP ctx = pDisplayContext->pDriverContext;
9686c93d9c46415cf7746351c502a3513f637e77e4root
9786c93d9c46415cf7746351c502a3513f637e77e4root    if (!isDRI1Connected(ctx, driver_name))
9886c93d9c46415cf7746351c502a3513f637e77e4root        return VA_STATUS_ERROR_UNKNOWN;
9986c93d9c46415cf7746351c502a3513f637e77e4root
10086c93d9c46415cf7746351c502a3513f637e77e4root    return VA_STATUS_SUCCESS;
10186c93d9c46415cf7746351c502a3513f637e77e4root}
10286c93d9c46415cf7746351c502a3513f637e77e4root
10386c93d9c46415cf7746351c502a3513f637e77e4rootstatic VAStatus va_NVCTRL_GetDriverName (
10486c93d9c46415cf7746351c502a3513f637e77e4root    VADisplayContextP pDisplayContext,
10586c93d9c46415cf7746351c502a3513f637e77e4root    char **driver_name
10686c93d9c46415cf7746351c502a3513f637e77e4root)
10786c93d9c46415cf7746351c502a3513f637e77e4root{
10886c93d9c46415cf7746351c502a3513f637e77e4root    VADriverContextP ctx = pDisplayContext->pDriverContext;
10986c93d9c46415cf7746351c502a3513f637e77e4root    int direct_capable, driver_major, driver_minor, driver_patch;
11086c93d9c46415cf7746351c502a3513f637e77e4root    Bool result;
11186c93d9c46415cf7746351c502a3513f637e77e4root
1125b3d55a0433b48477823f81821817a78ef53ac2eShuduo Sang    result = VA_NVCTRLQueryDirectRenderingCapable(ctx->native_dpy, ctx->x11_screen,
11386c93d9c46415cf7746351c502a3513f637e77e4root                                                  &direct_capable);
11486c93d9c46415cf7746351c502a3513f637e77e4root    if (!result || !direct_capable)
11586c93d9c46415cf7746351c502a3513f637e77e4root        return VA_STATUS_ERROR_UNKNOWN;
11686c93d9c46415cf7746351c502a3513f637e77e4root
1175b3d55a0433b48477823f81821817a78ef53ac2eShuduo Sang    result = VA_NVCTRLGetClientDriverName(ctx->native_dpy, ctx->x11_screen,
11886c93d9c46415cf7746351c502a3513f637e77e4root                                          &driver_major, &driver_minor,
11986c93d9c46415cf7746351c502a3513f637e77e4root                                          &driver_patch, driver_name);
12086c93d9c46415cf7746351c502a3513f637e77e4root    if (!result)
12186c93d9c46415cf7746351c502a3513f637e77e4root        return VA_STATUS_ERROR_UNKNOWN;
12286c93d9c46415cf7746351c502a3513f637e77e4root
12386c93d9c46415cf7746351c502a3513f637e77e4root    return VA_STATUS_SUCCESS;
12486c93d9c46415cf7746351c502a3513f637e77e4root}
12586c93d9c46415cf7746351c502a3513f637e77e4root
126901c77a7aa491f56b63af7b655b67439481e4177Fei Jiangstatic VAStatus va_FGLRX_GetDriverName (
127901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    VADisplayContextP pDisplayContext,
128901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    char **driver_name
129901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang)
130901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang{
131901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    VADriverContextP ctx = pDisplayContext->pDriverContext;
132901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    int driver_major, driver_minor, driver_patch;
133901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    Bool result;
134901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang
135901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    result = VA_FGLRXGetClientDriverName(ctx->native_dpy, ctx->x11_screen,
136901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang                                         &driver_major, &driver_minor,
137901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang                                         &driver_patch, driver_name);
138901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    if (!result)
139901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang        return VA_STATUS_ERROR_UNKNOWN;
140901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang
141901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    return VA_STATUS_SUCCESS;
142901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang}
143901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang
14486c93d9c46415cf7746351c502a3513f637e77e4rootstatic VAStatus va_DisplayContextGetDriverName (
14586c93d9c46415cf7746351c502a3513f637e77e4root    VADisplayContextP pDisplayContext,
14686c93d9c46415cf7746351c502a3513f637e77e4root    char **driver_name
14786c93d9c46415cf7746351c502a3513f637e77e4root)
14886c93d9c46415cf7746351c502a3513f637e77e4root{
14986c93d9c46415cf7746351c502a3513f637e77e4root    VAStatus vaStatus;
15086c93d9c46415cf7746351c502a3513f637e77e4root
15186c93d9c46415cf7746351c502a3513f637e77e4root    if (driver_name)
15286c93d9c46415cf7746351c502a3513f637e77e4root	*driver_name = NULL;
153409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan    else
154409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan        return VA_STATUS_ERROR_UNKNOWN;
155409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan
15686c93d9c46415cf7746351c502a3513f637e77e4root    vaStatus = va_DRI2GetDriverName(pDisplayContext, driver_name);
15786c93d9c46415cf7746351c502a3513f637e77e4root    if (vaStatus != VA_STATUS_SUCCESS)
15886c93d9c46415cf7746351c502a3513f637e77e4root        vaStatus = va_DRIGetDriverName(pDisplayContext, driver_name);
15986c93d9c46415cf7746351c502a3513f637e77e4root    if (vaStatus != VA_STATUS_SUCCESS)
16086c93d9c46415cf7746351c502a3513f637e77e4root        vaStatus = va_NVCTRL_GetDriverName(pDisplayContext, driver_name);
161901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang    if (vaStatus != VA_STATUS_SUCCESS)
162901c77a7aa491f56b63af7b655b67439481e4177Fei Jiang        vaStatus = va_FGLRX_GetDriverName(pDisplayContext, driver_name);
16386c93d9c46415cf7746351c502a3513f637e77e4root    return vaStatus;
16486c93d9c46415cf7746351c502a3513f637e77e4root}
16586c93d9c46415cf7746351c502a3513f637e77e4root
166b0fac498ca4863166252f1268fda83394db54153Fei Jiang
16786c93d9c46415cf7746351c502a3513f637e77e4rootVADisplay vaGetDisplay (
16886c93d9c46415cf7746351c502a3513f637e77e4root    Display *native_dpy /* implementation specific */
16986c93d9c46415cf7746351c502a3513f637e77e4root)
17086c93d9c46415cf7746351c502a3513f637e77e4root{
17186c93d9c46415cf7746351c502a3513f637e77e4root  VADisplay dpy = NULL;
172a00f54a574bb5a51af428b03577599bcc70a17b2Austin Yuan  VADisplayContextP pDisplayContext;
17386c93d9c46415cf7746351c502a3513f637e77e4root
17486c93d9c46415cf7746351c502a3513f637e77e4root  if (!native_dpy)
17586c93d9c46415cf7746351c502a3513f637e77e4root      return NULL;
17686c93d9c46415cf7746351c502a3513f637e77e4root
17786c93d9c46415cf7746351c502a3513f637e77e4root  if (!dpy)
17886c93d9c46415cf7746351c502a3513f637e77e4root  {
17986c93d9c46415cf7746351c502a3513f637e77e4root      /* create new entry */
18086c93d9c46415cf7746351c502a3513f637e77e4root      VADriverContextP pDriverContext;
18186c93d9c46415cf7746351c502a3513f637e77e4root      struct dri_state *dri_state;
18286c93d9c46415cf7746351c502a3513f637e77e4root      pDisplayContext = calloc(1, sizeof(*pDisplayContext));
18386c93d9c46415cf7746351c502a3513f637e77e4root      pDriverContext  = calloc(1, sizeof(*pDriverContext));
18486c93d9c46415cf7746351c502a3513f637e77e4root      dri_state       = calloc(1, sizeof(*dri_state));
18586c93d9c46415cf7746351c502a3513f637e77e4root      if (pDisplayContext && pDriverContext && dri_state)
18686c93d9c46415cf7746351c502a3513f637e77e4root      {
18786c93d9c46415cf7746351c502a3513f637e77e4root	  pDisplayContext->vadpy_magic = VA_DISPLAY_MAGIC;
18886c93d9c46415cf7746351c502a3513f637e77e4root
189b0fac498ca4863166252f1268fda83394db54153Fei Jiang	  pDriverContext->native_dpy       = (void *)native_dpy;
190409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan          pDriverContext->display_type     = VA_DISPLAY_X11;
19186c93d9c46415cf7746351c502a3513f637e77e4root	  pDisplayContext->pDriverContext  = pDriverContext;
19286c93d9c46415cf7746351c502a3513f637e77e4root	  pDisplayContext->vaIsValid       = va_DisplayContextIsValid;
19386c93d9c46415cf7746351c502a3513f637e77e4root	  pDisplayContext->vaDestroy       = va_DisplayContextDestroy;
19486c93d9c46415cf7746351c502a3513f637e77e4root	  pDisplayContext->vaGetDriverName = va_DisplayContextGetDriverName;
195b0fac498ca4863166252f1268fda83394db54153Fei Jiang          pDisplayContext->opaque          = NULL;
196409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan	  pDriverContext->drm_state 	   = dri_state;
19786c93d9c46415cf7746351c502a3513f637e77e4root	  dpy                              = (VADisplay)pDisplayContext;
19886c93d9c46415cf7746351c502a3513f637e77e4root      }
19986c93d9c46415cf7746351c502a3513f637e77e4root      else
20086c93d9c46415cf7746351c502a3513f637e77e4root      {
20186c93d9c46415cf7746351c502a3513f637e77e4root	  if (pDisplayContext)
20286c93d9c46415cf7746351c502a3513f637e77e4root	      free(pDisplayContext);
20386c93d9c46415cf7746351c502a3513f637e77e4root	  if (pDriverContext)
20486c93d9c46415cf7746351c502a3513f637e77e4root	      free(pDriverContext);
20586c93d9c46415cf7746351c502a3513f637e77e4root          if (dri_state)
20686c93d9c46415cf7746351c502a3513f637e77e4root              free(dri_state);
20786c93d9c46415cf7746351c502a3513f637e77e4root      }
20886c93d9c46415cf7746351c502a3513f637e77e4root  }
20986c93d9c46415cf7746351c502a3513f637e77e4root
21086c93d9c46415cf7746351c502a3513f637e77e4root  return dpy;
21186c93d9c46415cf7746351c502a3513f637e77e4root}
212b0fac498ca4863166252f1268fda83394db54153Fei Jiang
213b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define CTX(dpy) (((VADisplayContextP)dpy)->pDriverContext)
214b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define CHECK_DISPLAY(dpy) if( !vaDisplayIsValid(dpy) ) { return VA_STATUS_ERROR_INVALID_DISPLAY; }
215b0fac498ca4863166252f1268fda83394db54153Fei Jiang
21621e26478769d887b8357289ebb7faa47b8b415aeAustin Yuanvoid va_TracePutSurface (
21721e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan    VADisplay dpy,
21821e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan    VASurfaceID surface,
21921e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan    void *draw, /* the target Drawable */
22021e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan    short srcx,
22121e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan    short srcy,
22221e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan    unsigned short srcw,
22321e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan    unsigned short srch,
22421e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan    short destx,
22521e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan    short desty,
22621e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan    unsigned short destw,
22721e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan    unsigned short desth,
22821e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan    VARectangle *cliprects, /* client supplied clip list */
22921e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan    unsigned int number_cliprects, /* number of clip rects in the clip list */
23021e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan    unsigned int flags /* de-interlacing flags */
23121e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan);
23221e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan
23321e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan
234b0fac498ca4863166252f1268fda83394db54153Fei JiangVAStatus vaPutSurface (
235b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VADisplay dpy,
236b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VASurfaceID surface,
237b0fac498ca4863166252f1268fda83394db54153Fei Jiang    Drawable draw, /* X Drawable */
238b0fac498ca4863166252f1268fda83394db54153Fei Jiang    short srcx,
239b0fac498ca4863166252f1268fda83394db54153Fei Jiang    short srcy,
240b0fac498ca4863166252f1268fda83394db54153Fei Jiang    unsigned short srcw,
241b0fac498ca4863166252f1268fda83394db54153Fei Jiang    unsigned short srch,
242b0fac498ca4863166252f1268fda83394db54153Fei Jiang    short destx,
243b0fac498ca4863166252f1268fda83394db54153Fei Jiang    short desty,
244b0fac498ca4863166252f1268fda83394db54153Fei Jiang    unsigned short destw,
245b0fac498ca4863166252f1268fda83394db54153Fei Jiang    unsigned short desth,
246b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VARectangle *cliprects, /* client supplied clip list */
247b0fac498ca4863166252f1268fda83394db54153Fei Jiang    unsigned int number_cliprects, /* number of clip rects in the clip list */
248b0fac498ca4863166252f1268fda83394db54153Fei Jiang    unsigned int flags /* de-interlacing flags */
249b0fac498ca4863166252f1268fda83394db54153Fei Jiang)
250b0fac498ca4863166252f1268fda83394db54153Fei Jiang{
251b0fac498ca4863166252f1268fda83394db54153Fei Jiang  VADriverContextP ctx;
252b0fac498ca4863166252f1268fda83394db54153Fei Jiang
25321e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan  if (fool_postp)
25421e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan      return VA_STATUS_SUCCESS;
25521e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan
256b0fac498ca4863166252f1268fda83394db54153Fei Jiang  CHECK_DISPLAY(dpy);
257b0fac498ca4863166252f1268fda83394db54153Fei Jiang  ctx = CTX(dpy);
25821e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan
2596044ab9a375eb73b08f45d87966652f98f918668Austin Yuan  VA_TRACE_LOG(va_TracePutSurface, dpy, surface, (void *)draw, srcx, srcy, srcw, srch,
2606044ab9a375eb73b08f45d87966652f98f918668Austin Yuan               destx, desty, destw, desth,
2616044ab9a375eb73b08f45d87966652f98f918668Austin Yuan               cliprects, number_cliprects, flags );
26221e26478769d887b8357289ebb7faa47b8b415aeAustin Yuan
263cceaa0568f77a7452857559614100b71fb36ee3awangkun  return ctx->vtable->vaPutSurface( ctx, surface, (void *)draw, srcx, srcy, srcw, srch,
264b0fac498ca4863166252f1268fda83394db54153Fei Jiang                                   destx, desty, destw, desth,
265b0fac498ca4863166252f1268fda83394db54153Fei Jiang                                   cliprects, number_cliprects, flags );
266b0fac498ca4863166252f1268fda83394db54153Fei Jiang}
267