diff options
Diffstat (limited to 'server_egl.c')
-rw-r--r-- | server_egl.c | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/server_egl.c b/server_egl.c index c272fee..bd52888 100644 --- a/server_egl.c +++ b/server_egl.c @@ -48,6 +48,7 @@ struct server { int stride; int width, height; int sock_fd; + int fourcc; }; static int rnode_open(void) @@ -191,7 +192,7 @@ static int server_init_texture(struct server *server) EGLint name, handle, stride; int r; int fd; - + EGLint nplanes; server->width = 640; server->height = 480; /* create some textures */ @@ -213,6 +214,21 @@ static int server_init_texture(struct server *server) fprintf(stderr,"got image %p\n", server->image); +#ifdef EGL_MESA_image_dma_buf_export + b = eglExportDMABUFImageQueryMESA(server->d->rnode.egl_display, + server->image, + &server->fourcc, + &nplanes); + + if (!b) + error(1, errno, "failed to export query image\n"); + + b = eglExportDMABUFImageMESA(server->d->rnode.egl_display, + server->image, + &fd, + &server->stride); + fprintf(stderr,"image exported fd %d %d\n", server->fourcc, server->stride); +#else b = eglExportDRMImageMESA(server->d->rnode.egl_display, server->image, NULL, &handle, @@ -220,12 +236,14 @@ static int server_init_texture(struct server *server) if (!b) error(1, errno, "failed to export image\n"); - fprintf(stderr,"image exported %d %d\n", handle, server->stride); - r = drmPrimeHandleToFD(server->d->rnode.fd, handle, DRM_CLOEXEC, &fd); if (r < 0) error(1, errno, "cannot get prime-fd for handle"); + +#endif + + return fd; } @@ -259,7 +277,7 @@ struct server *server_create(int sock_fd) buf.u.buf.stride = server->stride; buf.u.buf.width = server->width; buf.u.buf.height = server->height; - buf.u.buf.format = DRM_FORMAT_XRGB8888; + buf.u.buf.format = server->fourcc ? server->fourcc : DRM_FORMAT_XRGB8888; size = sock_fd_write(server->sock_fd, &buf, sizeof(buf), fd); buf.type = CMD_TYPE_DIRT; |