diff options
author | Rob Clark <rob.clark@linaro.org> | 2012-06-08 14:48:33 -0500 |
---|---|---|
committer | Rob Clark <rob.clark@linaro.org> | 2012-08-23 14:13:00 -0500 |
commit | 3300065fe1940ac4202dfe985149129befc26353 (patch) | |
tree | a17c2f2bed44e0d83ab98c26ba169130a5b0ea3d | |
parent | 12050273504b132c4073d5a025ad5232a19d2b5a (diff) |
Add multi-planar supportdri2video
-rw-r--r-- | test/dri2-nouveau.c | 4 | ||||
-rw-r--r-- | test/dri2-omap.c | 4 | ||||
-rw-r--r-- | test/dri2test.c | 6 | ||||
-rw-r--r-- | test/dri2util.h | 4 | ||||
-rw-r--r-- | test/dri2videotest.c | 28 |
5 files changed, 25 insertions, 21 deletions
diff --git a/test/dri2-nouveau.c b/test/dri2-nouveau.c index 52de35e..bd85dda 100644 --- a/test/dri2-nouveau.c +++ b/test/dri2-nouveau.c @@ -49,10 +49,10 @@ static void setup(int fd) } } -static void * init(DRI2Buffer *dri2buf) +static void * init(DRI2Buffer *dri2buf, int plane) { struct nouveau_bo *bo = NULL; - int ret = nouveau_bo_handle_ref(dev, dri2buf->names[0], &bo); + int ret = nouveau_bo_handle_ref(dev, dri2buf->names[plane], &bo); if (ret) { ERROR_MSG("nouveau_bo_handle_ref failed: %d", ret); return NULL; diff --git a/test/dri2-omap.c b/test/dri2-omap.c index 2bcff28..8bb2bf1 100644 --- a/test/dri2-omap.c +++ b/test/dri2-omap.c @@ -46,9 +46,9 @@ static void setup(int fd) dev = omap_device_new(fd); } -static void * init(DRI2Buffer *dri2buf) +static void * init(DRI2Buffer *dri2buf, int plane) { - return omap_bo_from_name(dev, dri2buf->names[0]); + return omap_bo_from_name(dev, dri2buf->names[plane]); } static char * prep(void *hdl) diff --git a/test/dri2test.c b/test/dri2test.c index ec74e81..7f9a8b0 100644 --- a/test/dri2test.c +++ b/test/dri2test.c @@ -102,15 +102,15 @@ int main(int argc, char **argv) for (i = 0; i < nbufs; i++) { bufs[i].dri2buf = &dri2bufs[i]; - bufs[i].hdl = backend->init(bufs[i].dri2buf); + bufs[i].hdls[0] = backend->init(bufs[i].dri2buf, 0); } for (i = 0; i < NFRAMES; i++) { CARD64 count; - char *buf = backend->prep(bufs[i % nbufs].hdl); + char *buf = backend->prep(bufs[i % nbufs].hdls[0]); fill(buf, i, w, h, bufs[i % nbufs].dri2buf->pitch[0]); - backend->fini(bufs[i % nbufs].hdl); + backend->fini(bufs[i % nbufs].hdls[0]); DRI2SwapBuffers(dpy, win, 0, 0, 0, &count); MSG("DRI2SwapBuffers: count=%lu", count); if (i > 0) { diff --git a/test/dri2util.h b/test/dri2util.h index 39a007d..2e436ba 100644 --- a/test/dri2util.h +++ b/test/dri2util.h @@ -64,12 +64,12 @@ static inline void print_hex(int len, const unsigned char *val) typedef struct { DRI2Buffer *dri2buf; - void *hdl; + void *hdls[3]; } Buffer; typedef struct { void (*setup)(int fd); - void * (*init)(DRI2Buffer *dri2buf); + void * (*init)(DRI2Buffer *dri2buf, int plane); char * (*prep)(void *hdl); void (*fini)(void *hdl); } Backend; diff --git a/test/dri2videotest.c b/test/dri2videotest.c index 20d8459..bcae073 100644 --- a/test/dri2videotest.c +++ b/test/dri2videotest.c @@ -214,7 +214,13 @@ int main(int argc, char **argv) for (i = 0; i < nbufs; i++) { bufs[i].dri2buf = &dri2bufs[i]; - bufs[i].hdl = backend->init(bufs[i].dri2buf); + bufs[i].hdls[0] = backend->init(bufs[i].dri2buf, 0); + if (format == FOURCC_STR("I420")) { + bufs[i].hdls[1] = backend->init(bufs[i].dri2buf, 1); + bufs[i].hdls[2] = backend->init(bufs[i].dri2buf, 2); + } else if (format == FOURCC_STR("NV12")) { + bufs[i].hdls[1] = backend->init(bufs[i].dri2buf, 1); + } } for (i = 0; i < NFRAMES; i++) { @@ -231,28 +237,26 @@ int main(int argc, char **argv) Buffer *buf = &bufs[i % nbufs]; int pitch = buf->dri2buf->pitch[0]; - unsigned char *ptr = backend->prep(buf->hdl); + unsigned char *ptr = backend->prep(buf->hdls[0]); if (format == FOURCC_STR("I420")) { -#if 0 unsigned char *y = ptr; - // XXX deal with multiple bo case - unsigned char *u = y + (VID_HEIGHT * pitch); - unsigned char *v = u + (VID_HEIGHT * pitch) / 4; + unsigned char *u = backend->prep(buf->hdls[1]); + unsigned char *v = backend->prep(buf->hdls[2]); fill420(y, u, v, 1, i, VID_WIDTH, VID_HEIGHT, pitch); -#else - /* I think the nouveau shader actually expects NV12... */ + backend->fini(buf->hdls[2]); + backend->fini(buf->hdls[1]); + } else if (format == FOURCC_STR("NV12")) { unsigned char *y = ptr; - // XXX deal with multiple bo case - unsigned char *u = y + (VID_HEIGHT * pitch); + unsigned char *u = backend->prep(buf->hdls[1]); unsigned char *v = u + 1; fill420(y, u, v, 2, i, VID_WIDTH, VID_HEIGHT, pitch); -#endif + backend->fini(buf->hdls[1]); } else if (format == FOURCC_STR("YUY2")) { fill422(ptr, i, VID_WIDTH, VID_HEIGHT, pitch); } else if (format == FOURCC_STR("RGB4")) { fill(ptr, i, VID_WIDTH, VID_HEIGHT, pitch); } - backend->fini(buf->hdl); + backend->fini(buf->hdls[0]); DRI2SwapBuffersVid(dpy, win, 0, 0, 0, &count, (i % nbufs) + 1, &b); MSG("DRI2SwapBuffersVid: count=%lu", count); if (i > 0) { |