[Piglit] [PATCH v2] egl Add new test of EGL_EXT_platform_device

Emil Velikov emil.l.velikov at gmail.com
Sat Aug 18 11:04:45 UTC 2018


On 17 August 2018 at 19:57, Mathias Fröhlich <Mathias.Froehlich at gmx.net> wrote:
> Hi,
>
> Sorry for the late replay.
> I can also take a look at the mesa side but not before next week.
>
No worries. I'm grateful for any feedback - positive or negative,
immediate or not.

> Nevertheless, I still have one more comment inline below:
>
> On Tuesday, 14 August 2018 15:44:09 CEST Emil Velikov wrote:
>> From: Emil Velikov <emil.velikov at collabora.com>
>>
>> Since the functionality is more or less identical to
>> EGL_MESA_platform_surfaceless, the test with a copy of it.
>>
>> Changes, as listed in the test itself, include:
>>  - s/MESA_platform_surfaceless/EXT_platform_device/g
>>  - entrypoint handling - eglQueryDeviceStringEXT, eglQueryDevicesEXT and eglGetPlatformDisplayEXT
>>  - custom GetDisplay, based on eglQueryDevicesEXT
>>  - couple of s/PIGLIT_SKIP/PIGLIT_FAIL/
>>
>> v2: Use eglQueryDeviceStringEXT to get a DRM backed device (Mathias)
>> Cc: Mathias Fröhlich <Mathias.Froehlich at gmx.net>
>> Signed-off-by: Emil Velikov <emil.velikov at collabora.com>
>> ---
>> Thanks for the help Mathias. The updated patch should work as you
>> suggested.
>> ---
>>  tests/egl/spec/CMakeLists.txt                 |   1 +
>>  .../CMakeLists.no_api.txt                     |   7 +
>>  .../egl_ext_platform_device/CMakeLists.txt    |   1 +
>>  .../egl_ext_platform_device.c                 | 279 ++++++++++++++++++
>>  tests/opengl.py                               |   6 +
>>  5 files changed, 294 insertions(+)
>>  create mode 100644 tests/egl/spec/egl_ext_platform_device/CMakeLists.no_api.txt
>>  create mode 100644 tests/egl/spec/egl_ext_platform_device/CMakeLists.txt
>>  create mode 100644 tests/egl/spec/egl_ext_platform_device/egl_ext_platform_device.c
>>
>> diff --git a/tests/egl/spec/CMakeLists.txt b/tests/egl/spec/CMakeLists.txt
>> index 9324efcaf..f38a4f62b 100644
>> --- a/tests/egl/spec/CMakeLists.txt
>> +++ b/tests/egl/spec/CMakeLists.txt
>> @@ -3,6 +3,7 @@ add_subdirectory (egl_ext_client_extensions)
>>  add_subdirectory (egl_ext_device_query)
>>  add_subdirectory (egl_ext_device_enumeration)
>>  add_subdirectory (egl_ext_device_drm)
>> +add_subdirectory (egl_ext_platform_device)
>>  add_subdirectory (egl_ext_image_dma_buf_import_modifiers)
>>  add_subdirectory (egl_khr_create_context)
>>  add_subdirectory (egl_khr_get_all_proc_addresses)
>> diff --git a/tests/egl/spec/egl_ext_platform_device/CMakeLists.no_api.txt b/tests/egl/spec/egl_ext_platform_device/CMakeLists.no_api.txt
>> new file mode 100644
>> index 000000000..6c1bbd2a1
>> --- /dev/null
>> +++ b/tests/egl/spec/egl_ext_platform_device/CMakeLists.no_api.txt
>> @@ -0,0 +1,7 @@
>> +link_libraries(
>> +     piglitutil
>> +)
>> +
>> +piglit_add_executable(egl_ext_platform_device egl_ext_platform_device.c)
>> +
>> +# vim: ft=cmake:
>> diff --git a/tests/egl/spec/egl_ext_platform_device/CMakeLists.txt b/tests/egl/spec/egl_ext_platform_device/CMakeLists.txt
>> new file mode 100644
>> index 000000000..144a306f4
>> --- /dev/null
>> +++ b/tests/egl/spec/egl_ext_platform_device/CMakeLists.txt
>> @@ -0,0 +1 @@
>> +piglit_include_target_api()
>> diff --git a/tests/egl/spec/egl_ext_platform_device/egl_ext_platform_device.c b/tests/egl/spec/egl_ext_platform_device/egl_ext_platform_device.c
>> new file mode 100644
>> index 000000000..8d2db2381
>> --- /dev/null
>> +++ b/tests/egl/spec/egl_ext_platform_device/egl_ext_platform_device.c
>> @@ -0,0 +1,279 @@
>> +/*
>> + * Copyright 2018 Collabora, Ltd.
>> + *
>> + * Based on ext_mesa_platform_surfaceless.c which has
>> + * Copyright 2016 Google
>> + *
>> + * 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.
>> + */
>> +
>> +
>> +/* Note that this test is a mere copy with the following changes:
>> + *  - s/MESA_platform_surfaceless/EXT_platform_device/g
>> + *  - entrypoint handling - eglQueryDeviceStringEXT, eglQueryDevicesEXT and eglGetPlatformDisplayEXT
>> + *  - custom GetDisplay, based on eglQueryDevicesEXT
>> + *  - couple of s/PIGLIT_SKIP/PIGLIT_FAIL/
>> + */
>> +
>> +#include "piglit-util.h"
>> +#include "piglit-util-egl.h"
>> +
>> +/* Extension function pointers.
>> + *
>> + * Use prefix 'pegl' (piglit egl) instead of 'egl' to avoid collisions with
>> + * prototypes in eglext.h. */
>> +EGLSurface (*peglCreatePlatformPixmapSurfaceEXT)(EGLDisplay display, EGLConfig config,
>> +         void *native_pixmap, const EGLint *attrib_list);
>> +EGLSurface (*peglCreatePlatformWindowSurfaceEXT)(EGLDisplay display, EGLConfig config,
>> +         void *native_window, const EGLint *attrib_list);
>> +
>> +const char *(*peglQueryDeviceStringEXT)(EGLDeviceEXT device, EGLint name);
>> +EGLBoolean (*peglQueryDevicesEXT)(EGLint max_devices, EGLDeviceEXT *devices,
>> +         EGLint *num_devices);
>> +EGLDisplay (*peglGetPlatformDisplayEXT)(EGLenum platform, void *native_display,
>> +         const EGLint *attrib_list);
>> +
>> +static void
>> +init_egl_extension_funcs(void)
>> +{
>> +     peglCreatePlatformPixmapSurfaceEXT = (void*)
>> +             eglGetProcAddress("eglCreatePlatformPixmapSurfaceEXT");
>> +     peglCreatePlatformWindowSurfaceEXT = (void*)
>> +             eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT");
>> +
>> +     peglQueryDeviceStringEXT = (void *)eglGetProcAddress("eglQueryDeviceStringEXT");
>> +     peglQueryDevicesEXT = (void *)eglGetProcAddress("eglQueryDevicesEXT");
>> +     peglGetPlatformDisplayEXT = (void *)eglGetProcAddress("eglGetPlatformDisplayEXT");
>> +}
>> +
>> +static EGLDisplay *
>> +get_device_display(void)
>> +{
>> +#define NDEVS 1024
>> +     EGLDeviceEXT devices[NDEVS];
>> +     EGLint i, num_devices;
>> +     const char *devstring;
>> +
>> +     if (!peglQueryDevicesEXT(NDEVS, devices, &num_devices)) {
>> +             printf("Failed to get egl device\n");
>> +             piglit_report_result(PIGLIT_FAIL);
>> +     }
>> +     /* Use a DRM device, as the software one has some issues. */
>> +     for (i = 0; i < num_devices; i++) {
>> +             devstring = peglQueryDeviceStringEXT(devices[i], EGL_EXTENSIONS);
>> +             if (piglit_is_extension_in_string(devstring,
>> +                                     "EGL_EXT_device_drm")) {
>> +                     return peglGetPlatformDisplayEXT(EGL_PLATFORM_DEVICE_EXT,
>> +                                                     devices[i], NULL);
>> +             }
>> +     }
>> +     printf("Failed to get a drm backed, egl device\n");
>> +     piglit_report_result(PIGLIT_FAIL);
>
>
> I would prefer to get a PIGLIT_SKIP if there is no device offering
> EGL_EXT_device_drm is present.
> I think its legal for a driver not to offer any device with this extension.
>
>
> With that changed:
> Reviewed-by: Mathias Fröhlich <mathias.froehlich at web.de>
>
Agreed, squashed locally. Will give it a few days and push the series
~mid next week.

Thanks again, for the help.
Emil


More information about the Piglit mailing list