Reject GL devices that don't support rendering to f16 and f32

Change-Id: Ib1d81aa2e69ef33e5cbabfd851ab2e7860772f53
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/175340
Reviewed-by: Stephen White <senorblanco@chromium.org>
Commit-Queue: Gregg Tavares <gman@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/src/dawn/native/opengl/PhysicalDeviceGL.cpp b/src/dawn/native/opengl/PhysicalDeviceGL.cpp
index 3af5174..699ad03 100644
--- a/src/dawn/native/opengl/PhysicalDeviceGL.cpp
+++ b/src/dawn/native/opengl/PhysicalDeviceGL.cpp
@@ -144,6 +144,15 @@
 MaybeError PhysicalDevice::InitializeImpl() {
     if (mFunctions.GetVersion().IsES()) {
         DAWN_ASSERT(GetBackendType() == wgpu::BackendType::OpenGLES);
+
+        // WebGPU requires being able to render to f16 and being able to blend f16
+        // which EXT_color_buffer_half_float provides.
+        DAWN_INVALID_IF(!mFunctions.IsGLExtensionSupported("GL_EXT_color_buffer_half_float"),
+                        "GL_EXT_color_buffer_half_float is required");
+
+        // WebGPU requires being able to render to f32 but does not require being able to blend f32
+        DAWN_INVALID_IF(!mFunctions.IsGLExtensionSupported("GL_EXT_color_buffer_float"),
+                        "GL_EXT_color_buffer_float is required");
     } else {
         DAWN_ASSERT(GetBackendType() == wgpu::BackendType::OpenGL);
     }