1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
From 5898f3e5d22b930a1050a59b61e98ecd07dd6977 Mon Sep 17 00:00:00 2001
From: orbea <orbea@fredslev.dk>
Date: Thu, 6 Dec 2018 08:31:01 -0800
Subject: [PATCH] Fix KMS with OpenGL.
All credit for this patch goes to dtsarr.
Fixes https://github.com/libretro/RetroArch/issues/7119
---
gfx/common/egl_common.c | 41 ++++++++++++++++++++++++++++++++++++++++-
1 file changed, 40 insertions(+), 1 deletion(-)
diff --git a/gfx/common/egl_common.c b/gfx/common/egl_common.c
index f3c579af21..ee7bca84b6 100644
--- a/gfx/common/egl_common.c
+++ b/gfx/common/egl_common.c
@@ -329,8 +329,47 @@ bool egl_init_context(egl_ctx_data_t *egl,
RARCH_LOG("[EGL]: EGL version: %d.%d\n", *major, *minor);
- if (!eglChooseConfig(egl->dpy, attrib_ptr, &egl->config, 1, n) || *n != 1)
+ EGLint count = 0;
+ EGLint matched = 0;
+ EGLConfig *configs;
+ int config_index = -1;
+
+ if (!eglGetConfigs(egl->dpy, NULL, 0, &count) || count < 1)
+ {
+ RARCH_ERR("[EGL]: No cofigs to choose from.\n");
+ return false;
+ }
+
+ configs = malloc(count * sizeof *configs);
+ if (!configs) return false;
+
+ if (!eglChooseConfig(egl->dpy, attrib_ptr, configs, count, &matched) || !matched)
+ {
+ RARCH_ERR("[EGL]: No EGL configs with appropriate attributes.\n");
return false;
+ }
+
+ int i;
+ EGLint id;
+
+ for (i = 0; i < count; ++i)
+ {
+ if (!eglGetConfigAttrib(egl->dpy, configs[i], EGL_NATIVE_VISUAL_ID, &id))
+ continue;
+
+ if (id == GBM_FORMAT_XRGB8888) break;
+ }
+
+ if (id != GBM_FORMAT_XRGB8888)
+ {
+ RARCH_ERR("[EGL]: No EGL configs with format XRGB8888\n");
+ return false;
+ }
+
+ config_index = i;
+ if (config_index != -1) egl->config = configs[config_index];
+
+ free(configs);
egl->major = g_egl_major;
egl->minor = g_egl_minor;
|