Topi Pohjolainen <[email protected]> writes: > diff --git a/tests/spec/ext_image_dma_buf_import/missing_attributes.c > b/tests/spec/ext_image_dma_buf_import/missing_attributes.c > new file mode 100644 > index 0000000..626b450 > --- /dev/null > +++ b/tests/spec/ext_image_dma_buf_import/missing_attributes.c > @@ -0,0 +1,183 @@ > +/* > + * Copyright © 2013 Intel Corporation > + * > + * Permission is hereby granted, free of charge, to any person obtaining a > + * copy of this software and associated documentation files (the "Software"), > + * to deal in the Software without restriction, including without limitation > + * the rights to use, copy, modify, merge, publish, distribute, sublicense, > + * and/or sell copies of the Software, and to permit persons to whom the > + * Software is furnished to do so, subject to the following conditions: > + * > + * The above copyright notice and this permission notice (including the next > + * paragraph) shall be included in all copies or substantial portions of the > + * Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING > + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER > DEALINGS > + * IN THE SOFTWARE. > + */ > + > +#include "piglit-util-egl.h" > +#define EGL_EGLEXT_PROTOTYPES 1 > +#include <EGL/eglext.h> > +#include <unistd.h> > +#include "ext_image_dma_buf_fourcc.h" > + > +/** > + * @file missing_attributes.c > + * > + * From the EXT_image_dma_buf_import spec: > + * > + * "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. The details of the image is specified by the attributes > + * passed into eglCreateImageKHR. Required attributes and their values are > as > + * follows: > + * > + * * EGL_WIDTH & EGL_HEIGHT: The logical dimensions of the buffer in > pixels > + * > + * * EGL_LINUX_DRM_FOURCC_EXT: The pixel format of the buffer, as > specified > + * by drm_fourcc.h and used as the pixel_format parameter of the > + * drm_mode_fb_cmd2 ioctl. > + * > + * * EGL_DMA_BUF_PLANE0_FD_EXT: The dma_buf file descriptor of plane 0 > of > + * the image. > + * > + * * EGL_DMA_BUF_PLANE0_OFFSET_EXT: The offset from the start of the > + * dma_buf of the first sample in plane 0, in bytes. > + * > + * * EGL_DMA_BUF_PLANE0_PITCH_EXT: The number of bytes between the > start of > + * subsequent rows of samples in plane 0. May have special meaning for > + * non-linear formats." > + */
When you cite a giant block of spec text like this, I expect the test to
be testing that block of spec text in particular. But the spec text
you're actually testing is:
/**
* The spec says also that:
*
* "If <target> is EGL_LINUX_DMA_BUF_EXT, and the list of attributes is
* incomplete, EGL_BAD_PARAMETER is generated."
*/
> +static bool
> +test_all(int fd, unsigned w, unsigned h, unsigned stride, unsigned offset)
> +{
> + /**
> + * There are six mandatory attributes, here one creates six attribute
> + * sets each missing one of the mandatory attribute, first missing
> + * the width, second the height, etc.
> + */
I think you could do this more obviously and with less code by having a
stock array with all the attributes, and create a temporary per call
with one of the attributes trimmed out.
> + const EGLint missing_attributes[][2 * 5 + 1] = {
> + { EGL_HEIGHT, h,
> + EGL_LINUX_DRM_FOURCC_EXT, DRM_FORMAT_ARGB8888,
> + EGL_DMA_BUF_PLANE0_FD_EXT, fd,
> + EGL_DMA_BUF_PLANE0_OFFSET_EXT, offset,
> + EGL_DMA_BUF_PLANE0_PITCH_EXT, stride,
> + EGL_NONE },
> + { EGL_WIDTH, w,
> + EGL_LINUX_DRM_FOURCC_EXT, DRM_FORMAT_ARGB8888,
> + EGL_DMA_BUF_PLANE0_FD_EXT, fd,
> + EGL_DMA_BUF_PLANE0_OFFSET_EXT, offset,
> + EGL_DMA_BUF_PLANE0_PITCH_EXT, stride,
> + EGL_NONE },
> + { EGL_WIDTH, w,
> + EGL_HEIGHT, h,
> + EGL_DMA_BUF_PLANE0_FD_EXT, fd,
> + EGL_DMA_BUF_PLANE0_OFFSET_EXT, offset,
> + EGL_DMA_BUF_PLANE0_PITCH_EXT, stride,
> + EGL_NONE },
> + { EGL_WIDTH, w,
> + EGL_HEIGHT, h,
> + EGL_LINUX_DRM_FOURCC_EXT, DRM_FORMAT_ARGB8888,
> + EGL_DMA_BUF_PLANE0_OFFSET_EXT, offset,
> + EGL_DMA_BUF_PLANE0_PITCH_EXT, stride,
> + EGL_NONE },
> + { EGL_WIDTH, w,
> + EGL_HEIGHT, h,
> + EGL_LINUX_DRM_FOURCC_EXT, DRM_FORMAT_ARGB8888,
> + EGL_DMA_BUF_PLANE0_FD_EXT, fd,
> + EGL_DMA_BUF_PLANE0_PITCH_EXT, stride,
> + EGL_NONE },
> + { EGL_WIDTH, w,
> + EGL_HEIGHT, h,
> + EGL_LINUX_DRM_FOURCC_EXT, DRM_FORMAT_ARGB8888,
> + EGL_DMA_BUF_PLANE0_FD_EXT, fd,
> + EGL_DMA_BUF_PLANE0_OFFSET_EXT, offset,
> + EGL_NONE },
> + };
> + bool pass = true;
> + unsigned i;
> +
> + for (i = 0; i < ARRAY_SIZE(missing_attributes); ++i) {
> + pass &= test_missing(fd, missing_attributes[i]);
> + }
> +
> + return pass;
> +}
> +
> +/**
> + * One re-uses the buffer for all the tests. Each test is expected to fail
> + * meaning that the ownership is not transferred to the EGL in any point.
> + */
> +enum piglit_result
> +piglit_display(void)
> +{
> + const unsigned char pixels[2 * 2 * 4];
> + struct piglit_dma_buf *buf;
> + unsigned stride;
> + unsigned offset;
> + int fd;
> + enum piglit_result res;
> +
> + res = piglit_create_dma_buf(2, 2, 4, pixels, 2 * 4, &buf, &fd, &stride,
> + &offset);
> + if (res != PIGLIT_PASS)
> + return res;
> +
> + res = test_all(fd, 2, 2, stride, offset) ? PIGLIT_PASS : PIGLIT_FAIL;
test_all should be folded into piglit_display() here.
> +
> + piglit_destroy_dma_buf(buf);
> +
> + /* Close the file descriptor also, EGL does not have ownership */
> + close(fd);
> +
> + return res;
> +}
pgpgESHtKKkye.pgp
Description: PGP signature
_______________________________________________ Piglit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/piglit
