summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathias Fröhlich <mathias.froehlich@web.de>2019-09-26 13:54:41 +0200
committerMathias Fröhlich <mathias.froehlich@web.de>2020-02-19 07:15:43 +0100
commit1973b27fec51f6a13a1012c7c4b2d8237a93fc8d (patch)
treec40f06e5890bc4bb7af06a43aa1737bba9adb821
parent95c1a57cfdd1ef2852c828cba4659a72575c5c5d (diff)
eglinfo: Extend for EGL_EXT_platform_device.
Acked-by: Marek Olšák <marek.olsak@amd.com> Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
-rw-r--r--src/egl/opengl/eglinfo.c122
1 files changed, 98 insertions, 24 deletions
diff --git a/src/egl/opengl/eglinfo.c b/src/egl/opengl/eglinfo.c
index a9991dad..72fe45a9 100644
--- a/src/egl/opengl/eglinfo.c
+++ b/src/egl/opengl/eglinfo.c
@@ -135,27 +135,11 @@ PrintConfigs(EGLDisplay d)
static const char *
-PrintExtensions(EGLDisplay d)
+PrintExtensions(const char *extensions)
{
- const char *extensions, *p, *end, *next;
+ const char *p, *end, *next;
int column;
- extensions = eglQueryString(d, EGL_EXTENSIONS);
- if (!extensions)
- return NULL;
-
-#ifdef EGL_MESA_query_driver
- if (strstr(extensions, "EGL_MESA_query_driver")) {
- PFNEGLGETDISPLAYDRIVERNAMEPROC getDisplayDriverName =
- (PFNEGLGETDISPLAYDRIVERNAMEPROC)
- eglGetProcAddress("eglGetDisplayDriverName");
- printf("EGL driver name: %s\n", getDisplayDriverName(d));
- }
-#endif
-
- puts(d == EGL_NO_DISPLAY ? "EGL client extensions string:" :
- "EGL extensions string:");
-
column = 0;
end = extensions + strlen(extensions);
@@ -185,6 +169,50 @@ PrintExtensions(EGLDisplay d)
return extensions;
}
+
+static const char *
+PrintDisplayExtensions(EGLDisplay d)
+{
+ const char *extensions;
+
+ extensions = eglQueryString(d, EGL_EXTENSIONS);
+ if (!extensions)
+ return NULL;
+
+#ifdef EGL_MESA_query_driver
+ if (strstr(extensions, "EGL_MESA_query_driver")) {
+ PFNEGLGETDISPLAYDRIVERNAMEPROC getDisplayDriverName =
+ (PFNEGLGETDISPLAYDRIVERNAMEPROC)
+ eglGetProcAddress("eglGetDisplayDriverName");
+ printf("EGL driver name: %s\n", getDisplayDriverName(d));
+ }
+#endif
+
+ puts(d == EGL_NO_DISPLAY ? "EGL client extensions string:" :
+ "EGL extensions string:");
+
+ return PrintExtensions(extensions);
+}
+
+
+static const char *
+PrintDeviceExtensions(EGLDeviceEXT d)
+{
+ PFNEGLQUERYDEVICESTRINGEXTPROC queryDeviceString =
+ (PFNEGLQUERYDEVICESTRINGEXTPROC)
+ eglGetProcAddress("eglQueryDeviceStringEXT");
+ const char *extensions;
+
+ puts("EGL device extensions string:");
+
+ extensions = queryDeviceString(d, EGL_EXTENSIONS);
+ if (!extensions)
+ return NULL;
+
+ return PrintExtensions(extensions);
+}
+
+
static int
doOneDisplay(EGLDisplay d, const char *name)
{
@@ -203,7 +231,7 @@ doOneDisplay(EGLDisplay d, const char *name)
printf("EGL client APIs: %s\n", eglQueryString(d, EGL_CLIENT_APIS));
#endif
- PrintExtensions(d);
+ PrintDisplayExtensions(d);
PrintConfigs(d);
eglTerminate(d);
@@ -211,13 +239,60 @@ doOneDisplay(EGLDisplay d, const char *name)
return 0;
}
+
+static int
+doOneDevice(EGLDeviceEXT d, int i)
+{
+ PFNEGLGETPLATFORMDISPLAYEXTPROC getPlatformDisplay =
+ (PFNEGLGETPLATFORMDISPLAYEXTPROC)
+ eglGetProcAddress("eglGetPlatformDisplayEXT");
+
+ printf("Device #%d:\n\n", i);
+
+ PrintDeviceExtensions(d);
+
+ return doOneDisplay(getPlatformDisplay(EGL_PLATFORM_DEVICE_EXT, d, NULL),
+ "Platform Device");
+}
+
+
+static int
+doDevices(const char *name)
+{
+ PFNEGLQUERYDEVICESEXTPROC queryDevices =
+ (PFNEGLQUERYDEVICESEXTPROC) eglGetProcAddress("eglQueryDevicesEXT");
+ EGLDeviceEXT *devices;
+ EGLint max_devices, num_devices;
+ EGLint i;
+ int ret = 0;
+
+ printf("%s:\n", name);
+
+ if (!queryDevices(0, NULL, &max_devices))
+ return 1;
+ devices = calloc(sizeof(EGLDeviceEXT), max_devices);
+ if (!devices)
+ return 1;
+ if (!queryDevices(max_devices, devices, &num_devices))
+ num_devices = 0;
+
+ for (i = 0; i < num_devices; ++i) {
+ ret += doOneDevice(devices[i], i);
+ }
+
+ free(devices);
+
+ return ret;
+}
+
+
int
main(int argc, char *argv[])
{
int ret = 0;
const char *clientext;
- clientext = PrintExtensions(EGL_NO_DISPLAY);
+ clientext = PrintDisplayExtensions(EGL_NO_DISPLAY);
printf("\n");
if (strstr(clientext, "EGL_EXT_platform_base")) {
@@ -247,10 +322,9 @@ main(int argc, char *argv[])
ret += doOneDisplay(getPlatformDisplay(EGL_PLATFORM_SURFACELESS_MESA,
EGL_DEFAULT_DISPLAY,
NULL), "Surfaceless platform");
- if (strstr(clientext, "EGL_EXT_platform_device"))
- ret += doOneDisplay(getPlatformDisplay(EGL_PLATFORM_DEVICE_EXT,
- EGL_DEFAULT_DISPLAY,
- NULL), "Device platform");
+ if (strstr(clientext, "EGL_EXT_device_enumeration") &&
+ strstr(clientext, "EGL_EXT_platform_device"))
+ ret += doDevices("Device platform");
}
else {
ret = doOneDisplay(eglGetDisplay(EGL_DEFAULT_DISPLAY), "Default display");