[Piglit] [v9 10/13] tests/spec: EXT_image_dma_buf_import sample argb

Chad Versace chad.versace at linux.intel.com
Mon Aug 19 11:38:49 PDT 2013


On 08/09/2013 03:43 AM, Topi Pohjolainen wrote:
> Tests that one can sample the given buffer without other mipmap
> levels by setting texture filtering accordingly.
>
> v2:
>     - compile only on platforms that have drm (Eric)
>     - use standard drm definitions for fourcc instead of duplicated
>       local (Daniel, Eric)
>     - removed irrelevant quote of the spec (Eric)
>     - use helper variables for width, height and cpp instead
>       of repeating the magic numbers over and over again (Eric)
>     - used the same refactored common logic as the mipmap ARGB test
>
> v3 (Eric):
>     - use properly linked egl-extension calls
>
> v4 (Eric):
>     - add to 'all.tests'
>     - removed inclusion of standard EGL entrypoints as there is the
>       special dispatcher for the test cases to use
>
> v5 (Eric, Chad):
>     - sample using image-external extension
>     - fix inclusion in all.tests
>
> v6 (Chad):
>     - check for GL error instead of EGL when invoking
>       glEGLImageTargetTexture2DOES()
>     - allow the test to be skipped if external textures or the
>       chosen format are not supported
>     - fix the scope of the comment describing the need for closing
>       file descriptors in case image creation fails
>     - introduce format as command line argument and merge the XRGB
>       test here
>     - don't invoke glReadPixels() for each pixel separately
>
> Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
> ---
>   tests/all.tests                                    |   2 +
>   .../ext_image_dma_buf_import/CMakeLists.gles2.txt  |  23 +++
>   .../spec/ext_image_dma_buf_import/sample_common.c  | 164 +++++++++++++++++++++
>   .../spec/ext_image_dma_buf_import/sample_common.h  |  37 +++++
>   tests/spec/ext_image_dma_buf_import/sample_rgb.c   | 112 ++++++++++++++
>   5 files changed, 338 insertions(+)
>   create mode 100644 tests/spec/ext_image_dma_buf_import/CMakeLists.gles2.txt
>   create mode 100644 tests/spec/ext_image_dma_buf_import/sample_common.c
>   create mode 100644 tests/spec/ext_image_dma_buf_import/sample_common.h
>   create mode 100644 tests/spec/ext_image_dma_buf_import/sample_rgb.c



> +static enum piglit_result
> +sample_and_destroy_img(unsigned w, unsigned h, EGLImageKHR img)
> +{

...

> +	/* Set the image as level zero */
> +	glEGLImageTargetTexture2DOES(GL_TEXTURE_EXTERNAL_OES,
> +			(GLeglImageOES)img);
> +	error = glGetError();
> +
> +	/**
> +	 * EGL may not support binding of external textures, this is not an
> +	 * error.
> +	 */
> +	if (error == GL_INVALID_OPERATION)
> +		return PIGLIT_SKIP;
> +
> +	if (!piglit_check_gl_error(GL_NO_ERROR))
> +		return PIGLIT_FAIL;

The same problem with error codes occurs here as I described in patch 9. The error
in patch 9 involved eglGetError; patch 10 involves glGetError().

Just like eglGetError(), glGetError() resets the error code to GL_NO_ERROR. So,
the call to piglit_check_gl_error() here will always succeed.

To fix this, don't call piglit_check_gl_error(). Instead, just use the comparison
   if (error != GL_NO_ERROR)


> +static enum piglit_result
> +sample_buffer(void *buf, int fd, int fourcc, unsigned w, unsigned h,
> +	unsigned stride, unsigned offset)
> +{

...

> +	img = eglCreateImageKHR(eglGetCurrentDisplay(), EGL_NO_CONTEXT,
> +			EGL_LINUX_DMA_BUF_EXT, (EGLClientBuffer)0, attr);
> +
> +	/* Release the creator side of the buffer. */
> +	piglit_destroy_dma_buf(buf);
> +
> +	/* EGL may not support the format, this is not an error. */
> +	if (!img && piglit_check_egl_error(EGL_BAD_MATCH))
> +		return PIGLIT_SKIP;
> +
> +	if (!piglit_check_egl_error(EGL_SUCCESS)) {
> +		/* Close the descriptor also, EGL does not have ownership */
> +		close(fd);
> +		return PIGLIT_FAIL;
> +	}
> +
> +	if (!img) {
> +		fprintf(stderr, "image creation succeeded but returned NULL\n");
> +		return PIGLIT_FAIL;
> +	}

Same problem with eglGetError that I described in patch 9.


Other than the misuse of egl/glGetError, the patch looks good.



More information about the Piglit mailing list