compositortest: Decouple platform from API
This allows us to select platform (e.g. glx, x11_egl, null)
independently of API (e.g. OpenGL or OpenGL ES). It also simplifies the
addition of another EGL-based waffle backend in the next patch.
BUG=none
TEST=none
Change-Id: I670f823a0f38565668f3e4bb24f6b33813420ba7
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/glbench/+/5416277
Tested-by: Matt Turner <[email protected]>
Reviewed-by: Ilja Friedel <[email protected]>
Auto-Submit: Matt Turner <[email protected]>
Commit-Queue: ChromeOS Auto Retry <[email protected]>
diff --git a/src/compositortest.cc b/src/compositortest.cc
index 7453f07..0cdf703 100644
--- a/src/compositortest.cc
+++ b/src/compositortest.cc
@@ -12,31 +12,29 @@
#include <thread>
#include <vector>
#include <waffle.h>
+
+#include "platform.h"
+#include "workload.h"
+
+#if THIS_IS(PLATFORM_GLX)
#include <X11/Xatom.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
-#include "workload.h"
-
-#if defined(USE_OPENGLES)
-#include <epoxy/gl.h>
-#include <epoxy/egl.h>
-#include "waffle_null.h"
-
-#elif defined(USE_OPENGL)
-#include <epoxy/gl.h>
-#include <epoxy/glx.h>
#include "waffle_glx.h"
-
-#else
-#error bad graphics backend
+#define PLATFORM_TYPE WAFFLE_PLATFORM_GLX
+#elif THIS_IS(PLATFORM_NULL)
+#include "waffle_null.h"
+#define PLATFORM_TYPE WAFFLE_PLATFORM_NULL
+#elif THIS_IS(PLATFORM_X11_EGL)
+#include "waffle_x11_egl.h"
+#define PLATFORM_TYPE WAFFLE_PLATFORM_X11_EGL
#endif
using namespace std::chrono;
#if defined(USE_OPENGLES)
#define PLATFORM_API WAFFLE_CONTEXT_OPENGL_ES2
-#define PLATFORM_TYPE WAFFLE_PLATFORM_NULL
const std::string kVertexHeader = R"STRING(
#version 320 es
@@ -53,7 +51,6 @@
#define _NET_WM_STATE_TOGGLE 2
#define PLATFORM_API WAFFLE_CONTEXT_OPENGL
-#define PLATFORM_TYPE WAFFLE_PLATFORM_GLX
const std::string kVertexHeader = R"STRING(
#version 430 core
@@ -188,7 +185,7 @@
const intptr_t attrib[] = {WAFFLE_WINDOW_FULLSCREEN, 1, 0};
*window = waffle_window_create2(*config, attrib);
-#if defined(USE_OPENGL)
+#if THIS_IS(PLATFORM_GLX)
struct waffle_glx_window *window_glx =
waffle_window_get_native(*window)->glx;
Display *display_x11 = window_glx->xlib_display;
@@ -218,12 +215,15 @@
*ctx = waffle_context_create(*config, NULL);
waffle_make_current(*display, *window, *ctx);
-#if defined (USE_OPENGLES)
- eglSwapInterval(waffle_display_get_native(*display)->null->egl_display,
- swap_interval);
-#elif defined (USE_OPENGL)
- glXSwapIntervalEXT(waffle_display_get_native(*display)->glx->xlib_display,
+ union waffle_native_display *native_display =
+ waffle_display_get_native(*display);
+#if THIS_IS(PLATFORM_GLX)
+ glXSwapIntervalEXT(native_display->glx->xlib_display,
glXGetCurrentDrawable(), swap_interval);
+#elif THIS_IS(PLATFORM_NULL)
+ eglSwapInterval(native_display->null->egl_display, swap_interval);
+#elif THIS_IS(PLATFORM_X11_EGL)
+ eglSwapInterval(native_display->x11_egl->egl_display, swap_interval);
#endif
}
diff --git a/src/workload.h b/src/workload.h
index d6d2cbc..dd20de5 100644
--- a/src/workload.h
+++ b/src/workload.h
@@ -5,18 +5,14 @@
#ifndef COMPOSITOR_GL_WORKLOAD_H_
#define COMPOSITOR_GL_WORKLOAD_H_
-#if defined(USE_OPENGLES)
-#include <epoxy/gl.h>
-#include <epoxy/egl.h>
-#include "waffle_null.h"
+#include "platform.h"
-#elif defined(USE_OPENGL)
#include <epoxy/gl.h>
+
+#if THIS_IS(PLATFORM_GLX)
#include <epoxy/glx.h>
-#include "waffle_glx.h"
-
-#else
-#error bad graphics backend
+#else // EGL platforms
+#include <epoxy/egl.h>
#endif
#define NS_TO_MS(x) x / 1000000.0