Fix Wayland build
- mark variables [[maybe_unused]] in SwapChainEGL
- move surface creation internals into a lambda to avoid
warnings about the early return creating unreachable code
Bug: 349881710
Change-Id: Ic5b6526e9f33e1d75d9303ff9f401a2e0363acd7
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/196195
Reviewed-by: Loko Kung <lokokung@google.com>
Commit-Queue: Austin Eng <enga@chromium.org>
diff --git a/src/dawn/native/opengl/SwapChainEGL.cpp b/src/dawn/native/opengl/SwapChainEGL.cpp
index b9b3a66..05d98e7 100644
--- a/src/dawn/native/opengl/SwapChainEGL.cpp
+++ b/src/dawn/native/opengl/SwapChainEGL.cpp
@@ -181,45 +181,44 @@
GetSurface());
}
- const EGLFunctions& egl = display->egl;
- EGLDisplay eglDisplay = display->GetDisplay();
+ // [[maybe_unused]] to prevent unused variable warnings when platform code is disabled.
+ [[maybe_unused]] const EGLFunctions& egl = display->egl;
+ [[maybe_unused]] EGLDisplay eglDisplay = display->GetDisplay();
Surface* surface = GetSurface();
- switch (surface->GetType()) {
+ auto TryCreateSurface = [&]() -> ResultOrError<EGLSurface> {
+ switch (surface->GetType()) {
#if DAWN_PLATFORM_IS(ANDROID)
- case Surface::Type::AndroidWindow:
- mEGLSurface = egl.CreateWindowSurface(
- eglDisplay, config, static_cast<ANativeWindow*>(surface->GetAndroidNativeWindow()),
- nullptr);
- break;
+ case Surface::Type::AndroidWindow:
+ return egl.CreateWindowSurface(
+ eglDisplay, config,
+ static_cast<ANativeWindow*>(surface->GetAndroidNativeWindow()), nullptr);
#endif // DAWN_PLATFORM_IS(ANDROID)
#if defined(DAWN_ENABLE_BACKEND_METAL)
- case Surface::Type::MetalLayer:
- mEGLSurface =
- egl.CreateWindowSurface(eglDisplay, config, surface->GetMetalLayer(), nullptr);
- break;
+ case Surface::Type::MetalLayer:
+ return egl.CreateWindowSurface(eglDisplay, config, surface->GetMetalLayer(),
+ nullptr);
#endif // defined(DAWN_ENABLE_BACKEND_METAL)
#if DAWN_PLATFORM_IS(WIN32)
- case Surface::Type::WindowsHWND:
- mEGLSurface = egl.CreateWindowSurface(eglDisplay, config,
- static_cast<HWND>(surface->GetHWND()), nullptr);
- break;
+ case Surface::Type::WindowsHWND:
+ return egl.CreateWindowSurface(eglDisplay, config,
+ static_cast<HWND>(surface->GetHWND()), nullptr);
#endif // DAWN_PLATFORM_IS(WIN32)
#if defined(DAWN_USE_X11)
- case Surface::Type::XlibWindow:
- mEGLSurface =
- egl.CreateWindowSurface(eglDisplay, config, surface->GetXWindow(), nullptr);
- break;
+ case Surface::Type::XlibWindow:
+ return egl.CreateWindowSurface(eglDisplay, config, surface->GetXWindow(), nullptr);
#endif // defined(DAWN_USE_X11)
- // TODO(344814083): Add support for creating surfaces using EGL_KHR_platform_base and
- // friends.
- case Surface::Type::WaylandSurface:
+ // TODO(344814083): Add support for creating surfaces using EGL_KHR_platform_base and
+ // friends.
+ case Surface::Type::WaylandSurface:
- default:
- return DAWN_FORMAT_INTERNAL_ERROR("%s cannot be supported on EGL.", surface);
- }
+ default:
+ return DAWN_FORMAT_INTERNAL_ERROR("%s cannot be supported on EGL.", surface);
+ }
+ };
+ DAWN_TRY_ASSIGN(mEGLSurface, TryCreateSurface());
if (mEGLSurface == EGL_NO_SURFACE) {
return DAWN_FORMAT_INTERNAL_ERROR("Couldn't create an EGLSurface for %s.", surface);
}