summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Clark <rob.clark@linaro.org>2012-06-08 14:48:33 -0500
committerRob Clark <rob.clark@linaro.org>2012-08-23 14:13:00 -0500
commit3300065fe1940ac4202dfe985149129befc26353 (patch)
treea17c2f2bed44e0d83ab98c26ba169130a5b0ea3d
parent12050273504b132c4073d5a025ad5232a19d2b5a (diff)
Add multi-planar supportdri2video
-rw-r--r--test/dri2-nouveau.c4
-rw-r--r--test/dri2-omap.c4
-rw-r--r--test/dri2test.c6
-rw-r--r--test/dri2util.h4
-rw-r--r--test/dri2videotest.c28
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) {