[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