Add an egl_platform.h to undef xlib/windows.h macros

Bug: None
Change-Id: I12e9457d7be679170e5376be6aac755349abcc49
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/191441
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
diff --git a/src/dawn/common/BUILD.gn b/src/dawn/common/BUILD.gn
index 723fbc4..cc150f7 100644
--- a/src/dawn/common/BUILD.gn
+++ b/src/dawn/common/BUILD.gn
@@ -308,6 +308,7 @@
       "WeakRef.h",
       "WeakRefSupport.cpp",
       "WeakRefSupport.h",
+      "egl_platform.h",
       "ityp_array.h",
       "ityp_bitset.h",
       "ityp_span.h",
diff --git a/src/dawn/common/CMakeLists.txt b/src/dawn/common/CMakeLists.txt
index db206920..74b3399 100644
--- a/src/dawn/common/CMakeLists.txt
+++ b/src/dawn/common/CMakeLists.txt
@@ -104,6 +104,7 @@
     "WeakRef.h"
     "WeakRefSupport.cpp"
     "WeakRefSupport.h"
+    "egl_platform.h"
     "ityp_array.h"
     "ityp_bitset.h"
     "ityp_span.h"
diff --git a/src/dawn/common/egl_platform.h b/src/dawn/common/egl_platform.h
new file mode 100644
index 0000000..86c1a13
--- /dev/null
+++ b/src/dawn/common/egl_platform.h
@@ -0,0 +1,54 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+//    list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+//    this list of conditions and the following disclaimer in the documentation
+//    and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+//    contributors may be used to endorse or promote products derived from
+//    this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef SRC_DAWN_COMMON_EGL_PLATFORM_H_
+#define SRC_DAWN_COMMON_EGL_PLATFORM_H_
+
+#if !defined(DAWN_ENABLE_BACKEND_OPENGL)
+#error "egl_platform.h included without the OpenGL backend enabled"
+#endif
+#if defined(__egl_platform_h)
+#error "EGL/egl.h included before egl_platform.h"
+#endif
+
+#include "dawn/common/Platform.h"
+
+// Import headers with undefs prior to importing EGL on configurations where it is needed.
+#if DAWN_PLATFORM_IS(WINDOWS)
+#include "dawn/common/windows_with_undefs.h"
+#endif  // DAWN_PLATFORM_IS(WINDOWS)
+
+#if defined(DAWN_USE_X11)
+#include "dawn/common/xlib_with_undefs.h"
+#endif  // defined(DAWN_USE_X11)
+
+// The actual inclusion of EGL.h!
+#define VK_NO_PROTOTYPES
+#include <EGL/egl.h>
+#include <EGL/eglext.h>
+
+#endif  // SRC_DAWN_COMMON_EGL_PLATFORM_H_
diff --git a/src/dawn/native/opengl/ContextEGL.h b/src/dawn/native/opengl/ContextEGL.h
index 076af05..8252fa1 100644
--- a/src/dawn/native/opengl/ContextEGL.h
+++ b/src/dawn/native/opengl/ContextEGL.h
@@ -28,10 +28,9 @@
 #ifndef SRC_DAWN_NATIVE_OPENGL_CONTEXTEGL_H_
 #define SRC_DAWN_NATIVE_OPENGL_CONTEXTEGL_H_
 
-#include <EGL/egl.h>
-
 #include <memory>
 
+#include "dawn/common/egl_platform.h"
 #include "dawn/native/opengl/DeviceGL.h"
 #include "dawn/native/opengl/EGLFunctions.h"
 
diff --git a/src/dawn/native/opengl/EGLFunctions.h b/src/dawn/native/opengl/EGLFunctions.h
index e1bedb0..e42df8f8 100644
--- a/src/dawn/native/opengl/EGLFunctions.h
+++ b/src/dawn/native/opengl/EGLFunctions.h
@@ -28,8 +28,7 @@
 #ifndef SRC_DAWN_NATIVE_OPENGL_EGLFUNCTIONS_H_
 #define SRC_DAWN_NATIVE_OPENGL_EGLFUNCTIONS_H_
 
-#include <EGL/egl.h>
-#include <EGL/eglext.h>
+#include "dawn/common/egl_platform.h"
 
 namespace dawn::native::opengl {
 
diff --git a/src/dawn/native/opengl/UtilsEGL.h b/src/dawn/native/opengl/UtilsEGL.h
index 4c55b2f..b699feb 100644
--- a/src/dawn/native/opengl/UtilsEGL.h
+++ b/src/dawn/native/opengl/UtilsEGL.h
@@ -28,8 +28,7 @@
 #ifndef SRC_DAWN_NATIVE_OPENGL_UTILSEGL_H_
 #define SRC_DAWN_NATIVE_OPENGL_UTILSEGL_H_
 
-#include <EGL/egl.h>
-
+#include "dawn/common/egl_platform.h"
 #include "dawn/native/Error.h"
 
 namespace dawn::native::opengl {
diff --git a/src/dawn/tests/white_box/EGLImageWrappingTests.cpp b/src/dawn/tests/white_box/EGLImageWrappingTests.cpp
index ba41b30..04eb449 100644
--- a/src/dawn/tests/white_box/EGLImageWrappingTests.cpp
+++ b/src/dawn/tests/white_box/EGLImageWrappingTests.cpp
@@ -25,13 +25,12 @@
 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-#include <EGL/egl.h>
-
 #include <string>
 #include <utility>
 #include <vector>
 
 #include "dawn/common/DynamicLib.h"
+#include "dawn/common/egl_platform.h"
 #include "dawn/native/OpenGLBackend.h"
 #include "dawn/native/opengl/DeviceGL.h"
 #include "dawn/tests/DawnTest.h"