diff --git a/src/util/gl/context_egl.cpp b/src/util/gl/context_egl.cpp
index fccf7fc67..f7c92a072 100644
--- a/src/util/gl/context_egl.cpp
+++ b/src/util/gl/context_egl.cpp
@@ -212,6 +212,8 @@ bool ContextEGL::CreateSurface()
     Log_ErrorPrintf("eglQuerySurface() failed: %d", eglGetError());
   }
 
+  m_wi.surface_format = GetSurfaceTextureFormat();
+
   return true;
 }
 
@@ -232,6 +234,8 @@ bool ContextEGL::CreatePBufferSurface()
     return false;
   }
 
+  m_wi.surface_format = GetSurfaceTextureFormat();
+
   Log_DevPrintf("Created %ux%u pbuffer surface", width, height);
   return true;
 }
@@ -249,29 +253,6 @@ bool ContextEGL::CheckConfigSurfaceFormat(EGLConfig config, GPUTexture::Format f
 
   switch (format)
   {
-    case GPUTexture::Format::Unknown:
-    {
-      if (red_size == 5 && green_size == 6 && red_size == 5)
-      {
-        m_wi.surface_format = GPUTexture::Format::RGB565;
-      }
-      else if (red_size == 5 && green_size == 5 && red_size == 5 && alpha_size == 1)
-      {
-        m_wi.surface_format = GPUTexture::Format::RGBA5551;
-      }
-      else if (red_size == 8 && green_size == 8 && blue_size == 8 && alpha_size == 8)
-      {
-        m_wi.surface_format = GPUTexture::Format::RGBA8;
-      }
-      else
-      {
-        Log_ErrorPrintf("Unknown surface format: R=%u, G=%u, B=%u, A=%u", red_size, green_size, blue_size, alpha_size);
-        m_wi.surface_format = GPUTexture::Format::RGBA8;
-      }
-
-      return true;
-    }
-
     case GPUTexture::Format::RGBA8:
       return (red_size == 8 && green_size == 8 && blue_size == 8 && alpha_size == 8);
 
@@ -281,11 +262,41 @@ bool ContextEGL::CheckConfigSurfaceFormat(EGLConfig config, GPUTexture::Format f
     case GPUTexture::Format::RGBA5551:
       return (red_size == 5 && green_size == 5 && blue_size == 5 && alpha_size == 1);
 
+    case GPUTexture::Format::Unknown:
+      return true;
+
     default:
       return false;
   }
 }
 
+GPUTexture::Format ContextEGL::GetSurfaceTextureFormat() const
+{
+  int red_size = 0, green_size = 0, blue_size = 0, alpha_size = 0;
+  eglGetConfigAttrib(m_display, m_config, EGL_RED_SIZE, &red_size);
+  eglGetConfigAttrib(m_display, m_config, EGL_GREEN_SIZE, &green_size);
+  eglGetConfigAttrib(m_display, m_config, EGL_BLUE_SIZE, &blue_size);
+  eglGetConfigAttrib(m_display, m_config, EGL_ALPHA_SIZE, &alpha_size);
+
+  if (red_size == 5 && green_size == 6 && red_size == 5)
+  {
+    return GPUTexture::Format::RGB565;
+  }
+  else if (red_size == 5 && green_size == 5 && red_size == 5 && alpha_size == 1)
+  {
+    return GPUTexture::Format::RGBA5551;
+  }
+  else if (red_size == 8 && green_size == 8 && blue_size == 8 && alpha_size == 8)
+  {
+    return GPUTexture::Format::RGBA8;
+  }
+  else
+  {
+    Log_ErrorPrintf("Unknown surface format: R=%u, G=%u, B=%u, A=%u", red_size, green_size, blue_size, alpha_size);
+    return GPUTexture::Format::RGBA8;
+  }
+}
+
 void ContextEGL::DestroyContext()
 {
   if (eglGetCurrentContext() == m_context)
diff --git a/src/util/gl/context_egl.h b/src/util/gl/context_egl.h
index 123aaefb8..5125e4269 100644
--- a/src/util/gl/context_egl.h
+++ b/src/util/gl/context_egl.h
@@ -39,6 +39,7 @@ protected:
   bool CreateSurface();
   bool CreatePBufferSurface();
   bool CheckConfigSurfaceFormat(EGLConfig config, GPUTexture::Format format);
+  GPUTexture::Format GetSurfaceTextureFormat() const;
   void DestroyContext();
   void DestroySurface();