[waffle] [PATCH 10/12] egl: implement platform-specific information
Frank Henigman
fjhenigman at google.com
Wed Jan 6 11:56:39 PST 2016
Implement the platform hook of waffle_display_info_json() so it can
pick up egl-specific information.
Signed-off-by: Frank Henigman <fjhenigman at google.com>
---
src/waffle/egl/wegl_display.c | 32 ++++++++++++++++++++++++++++++--
src/waffle/egl/wegl_display.h | 4 ++++
src/waffle/egl/wegl_platform.h | 3 +++
3 files changed, 37 insertions(+), 2 deletions(-)
diff --git a/src/waffle/egl/wegl_display.c b/src/waffle/egl/wegl_display.c
index 88fce7a..dcfe934 100644
--- a/src/waffle/egl/wegl_display.c
+++ b/src/waffle/egl/wegl_display.c
@@ -25,6 +25,8 @@
#include <assert.h>
+#include "json.h"
+
#include "wcore_error.h"
#include "wcore_platform.h"
@@ -63,7 +65,6 @@ wegl_display_init(struct wegl_display *dpy,
{
struct wegl_platform *plat = wegl_platform(wc_plat);
bool ok;
- EGLint major, minor;
ok = wcore_display_init(&dpy->wcore, wc_plat);
if (!ok)
@@ -75,7 +76,7 @@ wegl_display_init(struct wegl_display *dpy,
goto fail;
}
- ok = plat->eglInitialize(dpy->egl, &major, &minor);
+ ok = plat->eglInitialize(dpy->egl, &plat->major, &plat->minor);
if (!ok) {
wegl_emit_error(plat, "eglInitialize");
goto fail;
@@ -139,3 +140,30 @@ wegl_display_supports_context_api(struct wcore_display *wc_dpy,
return wc_plat->vtbl->dl_can_open(wc_plat, waffle_dl);
}
+
+void
+wegl_display_info_json(struct wcore_display *wc_dpy, struct json *jj)
+{
+ struct wegl_display *dpy = wegl_display(wc_dpy);
+ struct wegl_platform *plat = wegl_platform(dpy->wcore.platform);
+
+ const char *version = plat->eglQueryString(dpy->egl, EGL_VERSION);
+ const char *vendor = plat->eglQueryString(dpy->egl, EGL_VENDOR);
+#ifdef EGL_VERSION_1_2
+ const char *apis = plat->eglQueryString(dpy->egl, EGL_CLIENT_APIS);
+#endif
+ const char *ext = plat->eglQueryString(dpy->egl, EGL_EXTENSIONS);
+
+ json_appendv(jj,
+ "version", "{",
+ "major", json_num(plat->major),
+ "minor", json_num(plat->minor),
+ "string", json_str(version),
+ "}",
+ "vendor", json_str(vendor),
+#ifdef EGL_VERSION_1_2
+ "client_apis", "[", json_split(apis, " "), "]",
+#endif
+ "extensions", "[", json_split(ext, " "), "]",
+ "");
+}
diff --git a/src/waffle/egl/wegl_display.h b/src/waffle/egl/wegl_display.h
index 43b83ef..20a3de8 100644
--- a/src/waffle/egl/wegl_display.h
+++ b/src/waffle/egl/wegl_display.h
@@ -32,6 +32,7 @@
#include "wcore_display.h"
+struct json;
struct wcore_display;
struct wegl_display {
@@ -56,3 +57,6 @@ wegl_display_teardown(struct wegl_display *dpy);
bool
wegl_display_supports_context_api(struct wcore_display *wc_dpy,
int32_t waffle_context_api);
+
+void
+wegl_display_info_json(struct wcore_display *wc_self, struct json *);
diff --git a/src/waffle/egl/wegl_platform.h b/src/waffle/egl/wegl_platform.h
index 7ae0490..c171b0a 100644
--- a/src/waffle/egl/wegl_platform.h
+++ b/src/waffle/egl/wegl_platform.h
@@ -34,6 +34,9 @@
struct wegl_platform {
struct wcore_platform wcore;
+ // EGL version from eglInitialize
+ EGLint major, minor;
+
// EGL function pointers
void *eglHandle;
--
2.6.0.rc2.230.g3dd15c0
More information about the waffle
mailing list