[Piglit] [v5 08/12] tests: spec: EXT_image_dma_buf_import planar with multiple fds
Chad Versace
chad.versace at linux.intel.com
Tue May 7 15:13:12 PDT 2013
On 05/03/2013 04:26 AM, Topi Pohjolainen wrote:
> Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
> ---
> .../ext_image_dma_buf_import/CMakeLists.gles1.txt | 1 +
> .../spec/ext_image_dma_buf_import/create_yuv420.c | 154 +++++++++++++++++++++
> .../ext_image_dma_buf_fourcc.h | 1 +
> 3 files changed, 156 insertions(+)
> create mode 100644 tests/spec/ext_image_dma_buf_import/create_yuv420.c
>
[snip]
> +static bool
> +test_create_and_destroy(unsigned w, unsigned h,
> + void *buf0, void *buf1, void *buf2,
> + int fd0, int fd1, int fd2,
> + unsigned stride0, unsigned stride1, unsigned stride2,
> + unsigned offset0, unsigned offset1, unsigned offset2)
> +{
> + EGLImageKHR img;
> + EGLint attr[] = {
> + EGL_WIDTH, w,
> + EGL_HEIGHT, h,
> + EGL_LINUX_DRM_FOURCC_EXT, DRM_FORMAT_YUV420,
> + EGL_DMA_BUF_PLANE0_FD_EXT, fd0,
> + EGL_DMA_BUF_PLANE0_OFFSET_EXT, offset0,
> + EGL_DMA_BUF_PLANE0_PITCH_EXT, stride0,
> + EGL_DMA_BUF_PLANE1_FD_EXT, fd1,
> + EGL_DMA_BUF_PLANE1_OFFSET_EXT, offset1,
> + EGL_DMA_BUF_PLANE1_PITCH_EXT, stride1,
> + EGL_DMA_BUF_PLANE2_FD_EXT, fd2,
> + EGL_DMA_BUF_PLANE2_OFFSET_EXT, offset2,
> + EGL_DMA_BUF_PLANE2_PITCH_EXT, stride2,
> + EGL_NONE
> + };
> +
> + /**
> + * The spec says:
> + *
> + * "If <target> is EGL_LINUX_DMA_BUF_EXT, <dpy> must be a valid
> + * display, <ctx> must be EGL_NO_CONTEXT, and <buffer> must be
> + * NULL, cast into the type EGLClientBuffer."
> + */
> + img = eglCreateImageKHR(eglGetCurrentDisplay(), EGL_NO_CONTEXT,
> + EGL_LINUX_DMA_BUF_EXT, (EGLClientBuffer)0, attr);
> +
> + /**
> + * Release the creator side of the buffers, EGL should have the
> + * ownership now.
> + */
> + piglit_destroy_dma_buf(buf0);
> + piglit_destroy_dma_buf(buf1);
> + piglit_destroy_dma_buf(buf2);
> +
> + /**
> + * Upon failure EGL does _not_ take the ownership, and needs to close
> + * the file descriptors here.
> + */
> + if (!piglit_check_egl_error(EGL_SUCCESS)) {
> + close(fd0);
> + close(fd1);
> + close(fd2);
> + return false;
> + }
> +
> + if (!img) {
> + fprintf(stderr, "image creation succeed but returned NULL\n");
> + return false;
> + }
> +
> + eglDestroyImageKHR(eglGetCurrentDisplay(), img);
Here, I think we need to check again that close() returns EBADF for each
fd. We need to know that eglDestroyImageKHR closes things properly when
the image contains multiple dma_bufs.
Other than that, this test looks good.
[snip]
More information about the Piglit
mailing list