[Piglit] [PATCH] tests/egl: add query test for egl_ext_image_dma_buf_import_modifiers

Lionel Landwerlin lionel.g.landwerlin at intel.com
Thu Jun 7 16:56:24 UTC 2018


On 07/06/18 17:22, Jason Ekstrand wrote:
> On Thu, Jun 7, 2018 at 7:16 AM, Lionel Landwerlin 
> <lionel.g.landwerlin at intel.com <mailto:lionel.g.landwerlin at intel.com>> 
> wrote:
>
>     We've been running into crashes in i965 because of a number of issue
>     throughout the driver stack. This is a really basic tests that list
>     the formats and their associated modifiers to just catch any
>     regressions.
>
>     Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com
>     <mailto:lionel.g.landwerlin at intel.com>>
>     Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106642
>     <https://bugs.freedesktop.org/show_bug.cgi?id=106642>
>     ---
>      tests/egl/spec/CMakeLists.txt                 |   1 +
>      .../CMakeLists.no_api.txt                     |   7 +
>      .../CMakeLists.txt                            |   1 +
>      .../query_format_modifiers.c                  | 148
>     ++++++++++++++++++
>      tests/opengl.py                               |   6 +
>      5 files changed, 163 insertions(+)
>      create mode 100644
>     tests/egl/spec/egl_ext_image_dma_buf_import_modifiers/CMakeLists.no_api.txt
>      create mode 100644
>     tests/egl/spec/egl_ext_image_dma_buf_import_modifiers/CMakeLists.txt
>      create mode 100644
>     tests/egl/spec/egl_ext_image_dma_buf_import_modifiers/query_format_modifiers.c
>
>     diff --git a/tests/egl/spec/CMakeLists.txt
>     b/tests/egl/spec/CMakeLists.txt
>     index 66d76db60..772f8258a 100644
>     --- a/tests/egl/spec/CMakeLists.txt
>     +++ b/tests/egl/spec/CMakeLists.txt
>     @@ -2,6 +2,7 @@ add_subdirectory (egl-1.4)
>      add_subdirectory (egl_ext_client_extensions)
>      add_subdirectory (egl_ext_device_query)
>      add_subdirectory (egl_ext_device_enumeration)
>     +add_subdirectory (egl_ext_image_dma_buf_import_modifiers)
>      add_subdirectory (egl_khr_create_context)
>      add_subdirectory (egl_khr_get_all_proc_addresses)
>      add_subdirectory (egl_khr_gl_image)
>     diff --git
>     a/tests/egl/spec/egl_ext_image_dma_buf_import_modifiers/CMakeLists.no_api.txt
>     b/tests/egl/spec/egl_ext_image_dma_buf_import_modifiers/CMakeLists.no_api.txt
>     new file mode 100644
>     index 000000000..f6b672e44
>     --- /dev/null
>     +++
>     b/tests/egl/spec/egl_ext_image_dma_buf_import_modifiers/CMakeLists.no_api.txt
>     @@ -0,0 +1,7 @@
>     +link_libraries(
>     +       piglitutil
>     +)
>     +
>     +piglit_add_executable(egl_ext_image_dma_buf_import_modifiers-query
>     query_format_modifiers.c)
>     +
>     +# vim: ft=cmake:
>     diff --git
>     a/tests/egl/spec/egl_ext_image_dma_buf_import_modifiers/CMakeLists.txt
>     b/tests/egl/spec/egl_ext_image_dma_buf_import_modifiers/CMakeLists.txt
>     new file mode 100644
>     index 000000000..144a306f4
>     --- /dev/null
>     +++
>     b/tests/egl/spec/egl_ext_image_dma_buf_import_modifiers/CMakeLists.txt
>     @@ -0,0 +1 @@
>     +piglit_include_target_api()
>     diff --git
>     a/tests/egl/spec/egl_ext_image_dma_buf_import_modifiers/query_format_modifiers.c
>     b/tests/egl/spec/egl_ext_image_dma_buf_import_modifiers/query_format_modifiers.c
>     new file mode 100644
>     index 000000000..d58886654
>     --- /dev/null
>     +++
>     b/tests/egl/spec/egl_ext_image_dma_buf_import_modifiers/query_format_modifiers.c
>     @@ -0,0 +1,148 @@
>     +/*
>     + * Copyright 2018 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.h"
>     +#include "piglit-util-egl.h"
>     +
>     +int
>     +main(int argc, char *argv[])
>     +{
>     +       EGLDisplay dpy;
>     +       EGLBoolean (*peglQueryDmaBufFormatsEXT)(EGLDisplay dpy,
>     +                                               EGLint max_formats,
>     +                                               EGLint *formats,
>     +                                               EGLint *num_formats);
>     +       EGLBoolean (*peglQueryDmaBufModifiersEXT)(EGLDisplay dpy,
>     +  EGLint format,
>     +  EGLint max_modifiers,
>     +  EGLuint64KHR *modifiers,
>     +  EGLBoolean *external_only,
>     +  EGLint *num_modifiers);
>     +       EGLint f, n_formats, *formats, rand_format, n_modifiers;
>     +       EGLint egl_major, egl_minor;
>     +       EGLBoolean ret;
>     +       bool in_list;
>     +
>     +       /* Strip common piglit args. */
>     +       piglit_strip_arg(&argc, argv, "-fbo");
>     +       piglit_strip_arg(&argc, argv, "-auto");
>     +
>     +       dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
>
>
> There's a piglit_egl_get_default_display helper.  Any particular 
> reason you didn't use it?

Thanks, didn't know about it.

>     +       if (!dpy) {
>     +               piglit_loge("failed to get EGLDisplay\n");
>     +               piglit_report_result(PIGLIT_SKIP);
>     +       }
>     +
>     +       ret = eglInitialize(dpy, &egl_major, &egl_minor);
>     +       if (!ret) {
>     +               EGLint egl_error = eglGetError();
>     +               piglit_loge("failed to get EGLConfig: %s(0x%x)",
>     +  piglit_get_egl_error_name(egl_error), egl_error);
>     +               piglit_report_result(PIGLIT_FAIL);
>     +       }
>     +
>     +       if (egl_major < 1 && egl_minor < 2) {
>
>
> This does not do what you want.  It needs to be
>
> if (egl_major < 1 || (egl_major == 1 && egl_minor < 2)) {

Duh!

>     +               piglit_logi("EGL 1.2 required");
>     +               piglit_report_result(PIGLIT_SKIP);
>     +       }
>     +
>     +       piglit_require_egl_extension(dpy,
>     "EGL_EXT_image_dma_buf_import_modifiers");
>     +
>     +       peglQueryDmaBufFormatsEXT =
>     +               (void *)eglGetProcAddress("eglQueryDmaBufFormatsEXT");
>     +       peglQueryDmaBufModifiersEXT =
>     +               (void
>     *)eglGetProcAddress("eglQueryDmaBufModifiersEXT");
>     +
>     +       if (!peglQueryDmaBufFormatsEXT ||
>     !peglQueryDmaBufModifiersEXT) {
>     +               printf("No display query entrypoint\n");
>
>
> piglit_loge?  At the very least, it should go to stderr.

Oops, forgot to convert that one.

>     +               piglit_report_result(PIGLIT_FAIL);
>     +       }
>     +
>     +       ret = peglQueryDmaBufFormatsEXT(dpy, 0, NULL, &n_formats);
>     +       if (!ret)
>     +               piglit_report_result(PIGLIT_FAIL);
>     +       piglit_logd("Found %i format(s):", n_formats);
>     +
>     +       formats = calloc(n_formats, sizeof(*formats));
>     +       peglQueryDmaBufFormatsEXT(dpy, n_formats, formats,
>     &n_formats);
>     +
>     +       for (f = 0; f < n_formats; f++) {
>     +               EGLBoolean *external;
>     +               EGLuint64KHR *modifiers;
>     +               EGLint m;
>     +
>     +               piglit_logd("Format 0x%x (%c%c%c%c):",
>     +                           formats[f],
>     +                           formats[f] & 0xff,
>     +                           (formats[f] >> 8) & 0xff,
>     +                           (formats[f] >> 16) & 0xff,
>     +                           (formats[f] >> 24) & 0xff);
>     +
>     +               ret = peglQueryDmaBufModifiersEXT(dpy, formats[f],
>     0, NULL,
>     +  NULL, &n_modifiers);
>     +               if (!ret)
>     +                       piglit_report_result(PIGLIT_FAIL);
>     +
>     +               piglit_logd("\t%i modifiers:", n_modifiers);
>     +
>     +               modifiers = calloc(n_modifiers, sizeof(*modifiers));
>     +               external = calloc(n_modifiers, sizeof(*external));
>     +               ret = peglQueryDmaBufModifiersEXT(dpy, formats[f],
>     +  n_modifiers, modifiers,
>     +  external, &n_modifiers);
>     +               if (!ret)
>     +                       piglit_report_result(PIGLIT_FAIL);
>     +
>     +               for (m = 0; m < n_modifiers; m++) {
>     +                       piglit_logd("\t0x%016lx external=%i",
>     modifiers[m], external[m]);
>     +               }
>     +
>     +               free(modifiers);
>     +               free(external);
>     +       }
>     +
>     +       /* Try to query an invalid format. */
>     +       do {
>     +               in_list = false;
>     +               rand_format = rand();
>     +
>     +               for (f = 0; f < n_formats; f++) {
>     +                       if (formats[f] == rand_format) {
>     +                               in_list = true;
>     +                               break;
>     +                       }
>     +               }
>     +       } while (in_list);
>     +
>     +       piglit_logd("Trying to query random format 0x%x",
>     rand_format);
>     +       ret = peglQueryDmaBufModifiersEXT(dpy, rand_format,
>     +                                         0, NULL, NULL,
>     &n_modifiers);
>     +       if (ret)
>     +               piglit_report_result(PIGLIT_FAIL);
>     +       if (eglGetError() != EGL_BAD_PARAMETER)
>     +               piglit_report_result(PIGLIT_FAIL);
>     +
>     +       free(formats);
>     +
>     +       piglit_report_result(PIGLIT_PASS);
>     +}
>     diff --git a/tests/opengl.py b/tests/opengl.py
>     index 6a6d71fb4..751391451 100644
>     --- a/tests/opengl.py
>     +++ b/tests/opengl.py
>     @@ -4534,6 +4534,12 @@ with profile.test_list.group_manager(
>              exclude_platforms=['glx']) as g:
>          g(['egl_mesa_platform_surfaceless'], 'conformance')
>
>     +with profile.test_list.group_manager(
>     +        PiglitGLTest,
>     +        grouptools.join('spec',
>     'egl_ext_image_dma_buf_import_modifiers'),
>     +        exclude_platforms=['glx']) as g:
>     +    g(['egl_ext_image_dma_buf_import_modifiers-query'],
>     'conformance')
>     +
>      with profile.test_list.group_manager(
>              PiglitGLTest, grouptools.join('spec', '!opengl ES 2.0'))
>     as g:
>          g(['glsl-fs-pointcoord_gles2'], 'glsl-fs-pointcoord')
>     -- 
>     2.17.1
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/piglit/attachments/20180607/1f92806b/attachment-0001.html>


More information about the Piglit mailing list