[Piglit] [v9 09/13] tests/spec: EXT_image_dma_buf_import fd ownership transfer
Chad Versace
chad.versace at linux.intel.com
Mon Aug 19 11:38:15 PDT 2013
On 08/19/2013 10:45 AM, Chad Versace wrote:
> On 08/09/2013 03:43 AM, Topi Pohjolainen wrote:
>> Simple test checking that EGL closes the export file handle and
>> the creator can in turn drop its reference.
>>
>> v2:
>> - compile only on platforms that have drm (Eric)
>> - use standard drm definitions for fourcc instead of duplicated
>> local (Daniel, Eric)
>> - use helper variables for width, height and cpp instead of
>> repeating the magic numbers over and over again (Eric)
>> - try to close the export file descriptor and check that it is
>> already closed by the EGL stack (Eric, Chad)
>> - fix typo in the description (and commit) (Chad)
>> - renamed from "close_buffer" to "ownership_transfer"
>> - removed irrelevant quote of the spec (Eric)
>>
>> v3:
>> - use properly linked egl-extension calls (Eric)
>> - check for EBADF and not just for close()-failure (Daniel)
>>
>> v4 (Eric):
>> - add to 'all.tests'
>> - removed inclusion of standard EGL entrypoints as there is the
>> special dispatcher for the test cases to use
>> - close the egl-display before checking if the file descriptor
>> is closed
>>
>> v5 (Chad):
>> - skip the test if EGL does not support the chosen format
>> - report possible failure of 'eglTerminate()' in the console
>>
>
>> +static enum piglit_result
>> +test_create_and_destroy(unsigned w, unsigned h, void *buf, int fd,
>> + 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))
>> + return PIGLIT_FAIL;
>> +
>> + if (!img) {
>> + fprintf(stderr, "image creation succeed but returned NULL\n");
>> + return PIGLIT_FAIL;
>> + }
>
> Regarding this error checking, the code's intent is correct, but the details are not.
> piglit_check_egl_error() calls eglGetError(), and eglGetError() *resets* EGL's error
> state to EGL_SUCCESS. So, if !img, then the second call to piglit_check_egl_error() always succeeds!
>
> Either (1) get the error code by calling eglGetError() exactly once, and then handle it manually yourself without
> piglit_check_egl_error(), or (2) restructure the control flow to ensure that piglit_check_egl_error() is called
> no more than once.
>
> Other than that, this patch looks good.
>
More information about the Piglit
mailing list