[Piglit] [PATCH v2] tests/egl: add query test for egl_ext_image_dma_buf_import_modifiers
Jason Ekstrand
jason at jlekstrand.net
Thu Jun 7 23:10:53 UTC 2018
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
Thanks for writing this!
On Thu, Jun 7, 2018 at 11:58 AM, Lionel Landwerlin <
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.
>
> v2: by Jason
> Use piglit_egl_get_default_display
> Drop printf
> Properly check the required EGL version
>
> Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
> Bugzilla: 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..0d4b0e2b4
> --- /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 = piglit_egl_get_default_display(EGL_NONE);
> + 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_major == 1 && egl_minor < 2)) {
> + 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) {
> + piglit_loge("No display query entrypoint\n");
> + 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/5cb78530/attachment-0001.html>
More information about the Piglit
mailing list