Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • mesa/piglit
  • gfxstrand/piglit
  • nchery/piglit
  • gerddie/piglit
  • dbaker/piglit
  • sagarghuge/piglit
  • kusma/piglit
  • tpohjola/piglit
  • mvicomoya/piglit
  • rantogno/piglit
  • sima/piglit
  • ajax/piglit
  • anholt/piglit
  • GL/piglit
  • jvesely/piglit
  • jljusten/piglit
  • samuelig/piglit
  • daniels/piglit
  • velurimithun/piglit
  • jameshogan/piglit
  • elongbug/piglit
  • harishkrupo/piglit
  • tpalli/piglit
  • pmoreau/piglit
  • tanty/piglit
  • apinheiro/piglit
  • kwg/piglit
  • andrii-krv/piglit
  • cmarcelo/piglit
  • pepp/piglit
  • austriancoder/piglit
  • pzanoni/piglit
  • idr/piglit
  • y2kenny-amd/piglit
  • apesch/piglit
  • skirk/piglit
  • agoldmints/piglit
  • tarceri/piglit
  • nroberts/piglit
  • abelbriggs1/piglit
  • vlee/piglit
  • itoral/piglit
  • dlehman25/piglit
  • llandwerlin/piglit
  • krzysztof.raszkowski/piglit
  • frkoenig/piglit
  • GyrosGeier/piglit
  • currojerez/piglit
  • pendingchaos/piglit
  • baldurk/piglit
  • rellla/piglit
  • sanguinariojoe/piglit
  • rhyskidd/piglit
  • aphogat/piglit
  • mareko/piglit
  • daenzer/piglit
  • airlied/piglit
  • ruanc/piglit
  • idas/piglit
  • zfigura/piglit
  • chema/piglit
  • zhangjie/piglit
  • arsenm/piglit
  • lskrejci/piglit
  • jasuarez/piglit
  • jzielins/piglit
  • imirkin/piglit
  • antonovitch/piglit
  • edb/piglit
  • jrfonseca/piglit
  • slinder1/piglit
  • zmike/piglit
  • craftyguy/piglit
  • chturne/piglit
  • yogeshmohan/piglit
  • majanes/piglit
  • shadeslayer/piglit
  • bnieuwenhuizen/piglit
  • manu/piglit
  • zhaosl1988/piglit
  • mjkrol/piglit
  • kettenis/piglit
  • Danil/piglit
  • olv/piglit
  • jenatali/piglit
  • mtmkls/piglit
  • cheyang/piglit
  • lcong/piglit
  • marex/piglit
  • ichernev/piglit
  • tomeu/piglit
  • tantan/piglit
  • Fahien/piglit
  • hikiko/piglit
  • tintou/piglit
  • italove/piglit
  • zzyiwei/piglit
  • mrisaacb/piglit
  • bl4ckb0ne/piglit
  • thochstein/piglit
  • jzhums/piglit
  • shannonliu011/piglit
  • rivaldosetiawan135/piglit
  • ffontaine/piglit
  • yuq825/piglit
  • sameer.lattannavar/piglit
  • xexaxo/piglit
  • cristicc/piglit
  • sofiapidlyjna1997/piglit
  • gallo/piglit
  • vliaskov/piglit
  • alex.kanavin/piglit
  • svenny/piglit
  • ilario/piglit
  • mattst88/piglit
  • robclark/piglit
  • preda/piglit
  • dh/piglit
  • sergi/piglit
  • ondracka/piglit
  • gawin/piglit
  • andrescj-chromium/piglit
  • anarsoul/piglit
  • JoniSt/piglit
  • bentiss/piglit
  • Joe_Nash/piglit
  • jxzgithub/piglit-public
  • noblock/piglit
  • Samsuper/piglit
  • kraj/piglit
  • EricGuo/piglit
  • marysaka/piglit
  • vigneshraman/piglit
  • robertfoss/piglit
  • Hazematman/piglit
  • lynxeye/piglit
  • eerii/piglit
  • bhenden/piglit-latest
  • i509VCB/piglit
  • vhorinek/piglit
  • Lurie97/piglit
  • KonstantinSeurer/piglit
  • sarthakbhatt/piglit
  • ericsmith/piglit
  • nanokatze/piglit
  • ibriano/piglit
  • lfrb/piglit
  • dbrouwer/piglit
  • GKraats/piglit
  • ngcortes/piglit
  • hakzsam/piglit
  • lumag/piglit
  • jxzgithub/piglit
153 results
Show changes
Commits on Source (9)
Showing
with 736 additions and 7 deletions
......@@ -2,12 +2,15 @@ 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_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)
add_subdirectory (egl_khr_gl_image)
add_subdirectory (egl_khr_fence_sync)
add_subdirectory (egl_khr_surfaceless_context)
add_subdirectory (egl_mesa_device_software)
add_subdirectory (egl_mesa_platform_surfaceless)
if (PIGLIT_HAS_X11)
......
link_libraries(
piglitutil
)
piglit_add_executable(egl_ext_device_drm egl_ext_device_drm.c)
# vim: ft=cmake:
piglit_include_target_api()
/*
* Copyright © 2016 Red Hat, Inc.
* Copyright 2015 Intel Corporation
* Copyright 2018 Collabora, Ltd.
*
* 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 <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include "piglit-util.h"
#include "piglit-util-egl.h"
#define NDEVS 1024
int
main(void)
{
EGLDisplay dpy1, dpy2, dpy3;
enum piglit_result result = PIGLIT_PASS;
EGLDeviceEXT devs[NDEVS];
EGLint i, numdevs, drmdevs;
EGLDeviceEXT device = EGL_NO_DEVICE_EXT;
EGLAttrib attr;
const char *devstring = NULL;
PFNEGLQUERYDEVICESEXTPROC queryDevices;
PFNEGLQUERYDISPLAYATTRIBEXTPROC queryDisplayAttrib;
PFNEGLQUERYDEVICESTRINGEXTPROC queryDeviceString;
PFNEGLQUERYDEVICEATTRIBEXTPROC queryDeviceAttrib;
PFNEGLGETPLATFORMDISPLAYEXTPROC getPlatformDisplay;
const char *client_exts = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
bool has_client_ext =
client_exts &&
((piglit_is_extension_in_string(client_exts,
"EGL_EXT_device_query") &&
piglit_is_extension_in_string(client_exts,
"EGL_EXT_device_enumeration")) ||
piglit_is_extension_in_string(client_exts,
"EGL_EXT_device_base"));
if (!has_client_ext) {
printf("EGL_EXT_device_query not supported\n");
piglit_report_result(PIGLIT_SKIP);
}
queryDevices = (void *)eglGetProcAddress("eglQueryDevicesEXT");
queryDisplayAttrib =
(void *)eglGetProcAddress("eglQueryDisplayAttribEXT");
queryDeviceString =
(void *)eglGetProcAddress("eglQueryDeviceStringEXT");
queryDeviceAttrib =
(void *)eglGetProcAddress("eglQueryDeviceAttribEXT");
if (!queryDevices||
!queryDisplayAttrib || !queryDeviceString || !queryDeviceAttrib) {
printf("No device query/enumeration entrypoints\n");
piglit_report_result(PIGLIT_SKIP);
}
bool has_platform_dev_ext =
client_exts &&
(piglit_is_extension_in_string(client_exts,
"EGL_EXT_platform_device"));
if (has_platform_dev_ext) {
getPlatformDisplay = (void *)eglGetProcAddress("eglGetPlatformDisplayEXT");
if (!getPlatformDisplay) {
has_platform_dev_ext = false;
printf("No platform display entrypoint\n");
result = PIGLIT_WARN;
}
}
if (!queryDevices(0, NULL, &numdevs)) {
printf("Failed to get device count\n");
piglit_report_result(PIGLIT_FAIL);
}
if (numdevs > NDEVS) {
printf("More than %d devices, please fix this test\n", NDEVS);
result = PIGLIT_WARN;
numdevs = NDEVS;
}
memset(devs, 0, sizeof devs);
if (!queryDevices(numdevs, devs, &numdevs)) {
printf("Failed to enumerate devices\n");
piglit_report_result(PIGLIT_FAIL);
}
if (!numdevs) {
printf("Zero devices enumerated\n");
piglit_report_result(PIGLIT_FAIL);
}
for (i = 0; i < numdevs; i++) {
device = devs[i];
devstring = queryDeviceString(device, EGL_EXTENSIONS);
if (devstring == NULL) {
printf("Empty device extension string\n");
result = PIGLIT_WARN;
continue;
}
if (!piglit_is_extension_in_string(devstring,
"EGL_EXT_device_drm")) {
printf("Device is not a DRM one\n");
continue;
}
drmdevs++;
/* Extension defines only a single string token. */
queryDeviceAttrib(device, 0xbad1dea, &attr);
if (!piglit_check_egl_error(EGL_BAD_ATTRIBUTE))
piglit_report_result(PIGLIT_FAIL);
#ifndef EGL_DRM_DEVICE_FILE_EXT
#define EGL_DRM_DEVICE_FILE_EXT 0x3233
#endif
devstring = queryDeviceString(device, EGL_DRM_DEVICE_FILE_EXT);
if (devstring == NULL)
piglit_report_result(PIGLIT_FAIL);
if (!has_platform_dev_ext)
continue;
dpy1 = getPlatformDisplay(EGL_PLATFORM_DEVICE_EXT,
device, NULL);
if (!dpy1) {
printf("failed to get EGLDisplay\n");
piglit_report_result(PIGLIT_FAIL);
}
if (!eglInitialize(dpy1, NULL, NULL)) {
printf("eglInitialize failed\n");
piglit_report_result(PIGLIT_FAIL);
}
int fd = open(devstring, O_RDWR | O_CLOEXEC);
if (fd < 0) {
printf("Failed to open drm device file %s: %s\n",
devstring, strerror(errno));
piglit_report_result(PIGLIT_FAIL);
}
#ifndef EGL_DRM_MASTER_FD_EXT
#define EGL_DRM_MASTER_FD_EXT 0x333C
#endif
const EGLint attr[] = { EGL_DRM_MASTER_FD_EXT, fd, EGL_NONE};
dpy2 = getPlatformDisplay(EGL_PLATFORM_DEVICE_EXT,
device, attr);
if (!dpy2) {
printf("failed to get EGLDisplay\n");
piglit_report_result(PIGLIT_FAIL);
}
/* From the spec.
*
* Calls to eglGetPlatformDeviceEXT() with the same values
* for <platform> and <native_display> but distinct
* EGL_DRM_MASTER_FD_EXT values will return separate EGLDisplays.
*/
if (dpy1 == dpy2) {
printf("failed to provide separate displays\n");
piglit_report_result(PIGLIT_FAIL);
}
dpy3 = getPlatformDisplay(EGL_PLATFORM_DEVICE_EXT,
device, attr);
if (!dpy3) {
printf("failed to get EGLDisplay\n");
piglit_report_result(PIGLIT_FAIL);
}
/* Do the inverse as well - identical EGLdisplay should be
* returned when the FD is the same.
*/
if (dpy2 != dpy3) {
printf("failed to provide identical displays\n");
piglit_report_result(PIGLIT_FAIL);
}
/* From the spec.
*
* If EGL requires the use of the DRM file descriptor
* beyond the duration of the call to eglGetPlatformDispay(),
* it will duplicate it.
*
* Close the fd for now, if needed by eglInitialize/others, the
* driver will dup it.
*/
close(fd);
if (!eglInitialize(dpy2, NULL, NULL)) {
printf("eglInitialize failed\n");
piglit_report_result(PIGLIT_FAIL);
}
device = EGL_NO_DEVICE_EXT;
if (!queryDisplayAttrib(dpy1, EGL_DEVICE_EXT, (EGLAttrib *)&device)) {
printf("Failed to query display\n");
piglit_report_result(PIGLIT_FAIL);
}
if (device != devs[i]) {
printf("Query display returns incorrect device\n");
piglit_report_result(PIGLIT_FAIL);
}
device = EGL_NO_DEVICE_EXT;
if (!queryDisplayAttrib(dpy2, EGL_DEVICE_EXT, (EGLAttrib *)&device)) {
printf("Failed to query display\n");
piglit_report_result(PIGLIT_FAIL);
}
if (device != devs[i]) {
printf("Query display returns incorrect device\n");
piglit_report_result(PIGLIT_FAIL);
}
eglTerminate(dpy2);
eglTerminate(dpy1);
}
/* SKIP if we fetched all devices with none supporting the extension */
if (result == PIGLIT_PASS && !drmdevs)
result = PIGLIT_SKIP;
piglit_report_result(result);
}
......@@ -79,6 +79,11 @@ main(void)
piglit_report_result(PIGLIT_FAIL);
}
if (!numdevs) {
printf("Zero devices enumerated\n");
piglit_report_result(PIGLIT_FAIL);
}
for (i = 0; i < numdevs; i++)
if (devs[i] == NULL) {
printf("Enumerated device slot not initialized\n");
......
......@@ -29,7 +29,6 @@ int
main(void)
{
EGLDisplay dpy;
EGLint egl_major, egl_minor;
EGLDeviceEXT device = EGL_NO_DEVICE_EXT;
EGLAttrib attr;
const char *devstring = NULL;
......@@ -65,46 +64,62 @@ main(void)
dpy = eglGetDisplay(NULL);
if (!dpy) {
printf("failed to get EGLDisplay\n");
piglit_report_result(PIGLIT_SKIP);
piglit_report_result(PIGLIT_WARN);
}
queryDisplayAttrib(dpy, EGL_DEVICE_EXT, (EGLAttrib *)&device);
if (!piglit_check_egl_error(EGL_NOT_INITIALIZED))
piglit_report_result(PIGLIT_FAIL);
if (!eglInitialize(dpy, &egl_major, &egl_minor)) {
if (!eglInitialize(dpy, NULL, NULL)) {
printf("eglInitialize failed\n");
piglit_report_result(PIGLIT_FAIL);
}
queryDisplayAttrib(dpy, 0xbad1dea, (EGLAttrib *)&device);
if (!piglit_check_egl_error(EGL_BAD_ATTRIBUTE))
if (!piglit_check_egl_error(EGL_BAD_ATTRIBUTE)) {
eglTerminate(dpy);
piglit_report_result(PIGLIT_FAIL);
}
if (!queryDisplayAttrib(dpy, EGL_DEVICE_EXT, (EGLAttrib *)&device)) {
printf("Failed to query display\n");
eglTerminate(dpy);
piglit_report_result(PIGLIT_FAIL);
}
if (device == EGL_NO_DEVICE_EXT) {
printf("Got no device handle\n");
eglTerminate(dpy);
piglit_report_result(PIGLIT_FAIL);
}
queryDeviceAttrib(device, 0xbad1dea, &attr);
if (!piglit_check_egl_error(EGL_BAD_ATTRIBUTE))
if (!piglit_check_egl_error(EGL_BAD_ATTRIBUTE)) {
eglTerminate(dpy);
piglit_report_result(PIGLIT_FAIL);
}
devstring = queryDeviceString(device, 0xbad1dea);
if (!piglit_check_egl_error(EGL_BAD_PARAMETER))
if (!piglit_check_egl_error(EGL_BAD_PARAMETER)) {
eglTerminate(dpy);
piglit_report_result(PIGLIT_FAIL);
}
devstring = queryDeviceString(EGL_NO_DEVICE_EXT, EGL_EXTENSIONS);
if (!piglit_check_egl_error(EGL_BAD_DEVICE_EXT)) {
eglTerminate(dpy);
piglit_report_result(PIGLIT_FAIL);
}
devstring = queryDeviceString(device, EGL_EXTENSIONS);
if (devstring == NULL) {
printf("Empty device extension string\n");
eglTerminate(dpy);
piglit_report_result(PIGLIT_WARN);
}
eglTerminate(dpy);
printf("Device extension string: %s\n", devstring);
piglit_report_result(PIGLIT_PASS);
}
link_libraries(
piglitutil
)
piglit_add_executable(egl_ext_platform_device egl_ext_platform_device.c)
# vim: ft=cmake:
piglit_include_target_api()
/*
* 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_SKIP);
}
static void
test_setup(EGLDisplay *dpy)
{
EGLint egl_major, egl_minor;
piglit_require_egl_extension(EGL_NO_DISPLAY, "EGL_EXT_platform_device");
*dpy = get_device_display();
if (*dpy == EGL_NO_DISPLAY) {
printf("failed to get EGLDisplay\n");
piglit_report_result(PIGLIT_FAIL);
}
if (!eglInitialize(*dpy, &egl_major, &egl_minor)) {
printf("eglInitialize failed\n");
piglit_report_result(PIGLIT_FAIL);
}
}
static enum piglit_result
test_initialize_display(void *test_data)
{
EGLDisplay dpy;
test_setup(&dpy);
eglTerminate(dpy);
return PIGLIT_PASS;
}
/* Test that eglCreatePlatformWindowSurface fails with EGL_BAD_NATIVE_WINDOW.
*
* From the EGL_MESA_platform_surfaceless spec (v1):
*
* eglCreatePlatformWindowSurface fails when called with a <display>
* that belongs to the surfaceless platform. It returns
* EGL_NO_SURFACE and generates EGL_BAD_NATIVE_WINDOW. The
* justification for this unconditional failure is that the
* surfaceless platform has no native windows, and therefore the
* <native_window> parameter is always invalid.
*/
static enum piglit_result
test_create_window(void *test_data)
{
EGLDisplay dpy;
EGLSurface surf;
test_setup(&dpy);
surf = peglCreatePlatformWindowSurfaceEXT(dpy, EGL_NO_CONFIG_KHR,
/*native_window*/ NULL,
/*attrib_list*/ NULL);
if (surf) {
printf("eglCreatePlatformWindowSurface incorrectly succeeded\n");
return PIGLIT_FAIL;
}
if (!piglit_check_egl_error(EGL_BAD_NATIVE_WINDOW))
return PIGLIT_FAIL;
eglTerminate(dpy);
return PIGLIT_PASS;
}
/* Test that eglCreatePlatformPixmapSurface fails with EGL_BAD_NATIVE_PIXMAP.
*
* From the EGL_MESA_platform_surfaceless spec (v1):
*
* [Like eglCreatePlatformWindowSurface,] eglCreatePlatformPixmapSurface
* also fails when called with a <display> that belongs to the surfaceless
* platform. It returns EGL_NO_SURFACE and generates
* EGL_BAD_NATIVE_PIXMAP.
*/
static enum piglit_result
test_create_pixmap(void *test_data)
{
EGLDisplay dpy;
EGLSurface surf;
test_setup(&dpy);
surf = peglCreatePlatformPixmapSurfaceEXT(dpy, EGL_NO_CONFIG_KHR,
/*native_pixmap*/ NULL,
/*attrib_list*/ NULL);
if (surf) {
printf("eglCreatePlatformPixmapSurface incorrectly succeeded\n");
return PIGLIT_FAIL;
}
if (!piglit_check_egl_error(EGL_BAD_NATIVE_PIXMAP))
return PIGLIT_FAIL;
eglTerminate(dpy);
return PIGLIT_PASS;
}
/* Test that eglCreatePbufferSurface succeeds if given an EGLConfig with
* EGL_PBUFFER_BIT.
*
* From the EGL_MESA_platform_surfaceless spec (v1):
*
* The surfaceless platform imposes no platform-specific restrictions on the
* creation of pbuffers, as eglCreatePbufferSurface has no native surface
* parameter. [...] Specifically, if the EGLDisplay advertises an EGLConfig
* whose EGL_SURFACE_TYPE attribute contains EGL_PBUFFER_BIT, then the
* EGLDisplay permits the creation of pbuffers.
*/
static enum piglit_result
test_create_pbuffer(void *test_data)
{
EGLDisplay dpy = EGL_NO_DISPLAY;
EGLConfig config = EGL_NO_CONFIG_KHR;
EGLint num_configs = 9999;
EGLSurface surf;
const EGLint config_attrs[] = {
EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
EGL_RED_SIZE, EGL_DONT_CARE,
EGL_GREEN_SIZE, EGL_DONT_CARE,
EGL_BLUE_SIZE, EGL_DONT_CARE,
EGL_ALPHA_SIZE, EGL_DONT_CARE,
EGL_DEPTH_SIZE, EGL_DONT_CARE,
EGL_STENCIL_SIZE, EGL_DONT_CARE,
/* This is a bitmask that selects the rendering API (such as
* EGL_OPENGL_BIT and EGL_OPENGL_ES2_BIT). Accept any API,
* because we don't care.
*/
EGL_RENDERABLE_TYPE, ~0,
EGL_NONE,
};
test_setup(&dpy);
if (!eglChooseConfig(dpy, config_attrs, &config, 1, &num_configs)) {
printf("eglChooseConfig failed\n");
return PIGLIT_FAIL;
}
if (num_configs == 0) {
printf("found no EGLConfig with EGL_PBUFFER_BIT\n");
return PIGLIT_FAIL;
}
surf = eglCreatePbufferSurface(dpy, config, /*attribs*/ NULL);
if (!surf) {
printf("eglCreatePbufferSurface failed\n");
return PIGLIT_FAIL;
}
eglDestroySurface(dpy, surf);
eglTerminate(dpy);
return PIGLIT_PASS;
}
static const struct piglit_subtest subtests[] = {
{ "initialize_display", "initialize_display", test_initialize_display },
{ "create_window", "create_window", test_create_window },
{ "create_pixmap", "create_pixmap", test_create_pixmap },
{ "create_pbuffer", "create_pbuffer", test_create_pbuffer },
{ 0 },
};
int
main(int argc, char **argv)
{
enum piglit_result result = PIGLIT_SKIP;
const char **selected_names = NULL;
size_t num_selected = 0;
/* Strip common piglit args. */
piglit_strip_arg(&argc, argv, "-fbo");
piglit_strip_arg(&argc, argv, "-auto");
piglit_parse_subtest_args(&argc, argv, subtests, &selected_names,
&num_selected);
if (argc > 1) {
fprintf(stderr, "usage error\n");
piglit_report_result(PIGLIT_FAIL);
}
init_egl_extension_funcs();
result = piglit_run_selected_subtests(subtests, selected_names,
num_selected, result);
piglit_report_result(result);
}
link_libraries(
piglitutil
)
piglit_add_executable(egl_mesa_device_software egl_mesa_device_software.c)
# vim: ft=cmake:
piglit_include_target_api()
/*
* Copyright © 2016 Red Hat, Inc.
* Copyright 2015 Intel Corporation
* Copyright 2018 Collabora, Ltd.
*
* 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"
#define NDEVS 1024
int
main(void)
{
enum piglit_result result = PIGLIT_PASS;
EGLDeviceEXT devs[NDEVS];
EGLint i, numdevs, swdevs;
EGLDeviceEXT device = EGL_NO_DEVICE_EXT;
EGLAttrib attr;
const char *devstring = NULL;
PFNEGLQUERYDEVICESEXTPROC queryDevices;
PFNEGLQUERYDEVICESTRINGEXTPROC queryDeviceString;
PFNEGLQUERYDEVICEATTRIBEXTPROC queryDeviceAttrib;
const char *client_exts = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
bool has_client_ext =
client_exts &&
((piglit_is_extension_in_string(client_exts,
"EGL_EXT_device_query") &&
piglit_is_extension_in_string(client_exts,
"EGL_EXT_device_enumeration")) ||
piglit_is_extension_in_string(client_exts,
"EGL_EXT_device_base"));
if (!has_client_ext) {
printf("EGL_EXT_device_query not supported\n");
piglit_report_result(PIGLIT_SKIP);
}
queryDevices = (void *)eglGetProcAddress("eglQueryDevicesEXT");
queryDeviceString =
(void *)eglGetProcAddress("eglQueryDeviceStringEXT");
queryDeviceAttrib =
(void *)eglGetProcAddress("eglQueryDeviceAttribEXT");
if (!queryDevices|| !queryDeviceString || !queryDeviceAttrib) {
printf("No device query/enumeration entrypoints\n");
piglit_report_result(PIGLIT_SKIP);
}
if (!queryDevices(0, NULL, &numdevs)) {
printf("Failed to get device count\n");
piglit_report_result(PIGLIT_FAIL);
}
if (numdevs > NDEVS) {
printf("More than %d devices, please fix this test\n", NDEVS);
result = PIGLIT_WARN;
numdevs = NDEVS;
}
memset(devs, 0, sizeof devs);
if (!queryDevices(numdevs, devs, &numdevs)) {
printf("Failed to enumerate devices\n");
piglit_report_result(PIGLIT_FAIL);
}
if (!numdevs) {
printf("Zero devices enumerated\n");
piglit_report_result(PIGLIT_FAIL);
}
for (i = 0; i < numdevs; i++) {
device = devs[i];
devstring = queryDeviceString(device, EGL_EXTENSIONS);
if (devstring == NULL) {
printf("Empty device extension string\n");
continue;
}
if (!piglit_is_extension_in_string(devstring,
"EGL_MESA_device_software")) {
printf("Device is not a software one\n");
continue;
}
swdevs++;
/* Extension does not define any attrib/string tokens.
*
* Double-check we don't expose claim to support other
* extension's tokens
*/
queryDeviceAttrib(device, 0xbad1dea, &attr);
if (!piglit_check_egl_error(EGL_BAD_ATTRIBUTE))
piglit_report_result(PIGLIT_FAIL);
#ifndef EGL_DRM_DEVICE_FILE_EXT
#define EGL_DRM_DEVICE_FILE_EXT 0x3233
#endif
devstring = queryDeviceString(device, EGL_DRM_DEVICE_FILE_EXT);
if (!piglit_check_egl_error(EGL_BAD_PARAMETER))
piglit_report_result(PIGLIT_FAIL);
}
/* SKIP if we fetched all devices with none supporting the extension */
if (result == PIGLIT_PASS && !swdevs)
result = PIGLIT_SKIP;
piglit_report_result(result);
}
......@@ -68,6 +68,7 @@ test_initialize_display(void *test_data)
test_setup(&dpy);
eglTerminate(dpy);
return PIGLIT_PASS;
}
......@@ -101,6 +102,7 @@ test_create_window(void *test_data)
if (!piglit_check_egl_error(EGL_BAD_NATIVE_WINDOW))
return PIGLIT_FAIL;
eglTerminate(dpy);
return PIGLIT_PASS;
}
......@@ -132,6 +134,7 @@ test_create_pixmap(void *test_data)
if (!piglit_check_egl_error(EGL_BAD_NATIVE_PIXMAP))
return PIGLIT_FAIL;
eglTerminate(dpy);
return PIGLIT_PASS;
}
......@@ -192,7 +195,7 @@ test_create_pbuffer(void *test_data)
}
eglDestroySurface(dpy, surf);
eglTerminate(dpy);
return PIGLIT_PASS;
}
......
......@@ -4583,6 +4583,24 @@ with profile.test_list.group_manager(
exclude_platforms=['glx']) as g:
g(['egl_ext_device_enumeration'], 'conformance')
with profile.test_list.group_manager(
PiglitGLTest,
grouptools.join('spec', 'egl_ext_device_drm'),
exclude_platforms=['glx']) as g:
g(['egl_ext_device_drm'], 'conformance')
with profile.test_list.group_manager(
PiglitGLTest,
grouptools.join('spec', 'egl_ext_platform_device'),
exclude_platforms=['glx']) as g:
g(['egl_ext_platform_device'], 'conformance')
with profile.test_list.group_manager(
PiglitGLTest,
grouptools.join('spec', 'egl_mesa_device_software'),
exclude_platforms=['glx']) as g:
g(['egl_mesa_device_software'], 'conformance')
with profile.test_list.group_manager(
PiglitGLTest,
grouptools.join('spec', 'egl_mesa_platform_surfaceless'),
......