attached patch adds the test that GLX works before intializing the TMU model.
Prevents QEMU from crashing if the system has no OpenGL support whatsoever.
S.
diff --git a/hw/milkymist-hw.h b/hw/milkymist-hw.h
index 80cfed7..9ae76fc 100644
--- a/hw/milkymist-hw.h
+++ b/hw/milkymist-hw.h
@@ -99,6 +99,13 @@ milkymist_pfpu_create(target_phys_addr_t base, qemu_irq irq)
#ifdef CONFIG_OPENGL
#include <X11/Xlib.h>
+#include <GL/glx.h>
+static const int glx_fbconfig_attr[] = {
+ GLX_GREEN_SIZE, 5,
+ GLX_GREEN_SIZE, 6,
+ GLX_BLUE_SIZE, 5,
+ None
+};
#endif
static inline DeviceState *
milkymist_tmu2_create(target_phys_addr_t base, qemu_irq irq)
@@ -106,15 +113,22 @@ milkymist_tmu2_create(target_phys_addr_t base, qemu_irq irq)
#ifdef CONFIG_OPENGL
DeviceState *dev;
Display *d;
+ GLXFBConfig *configs;
+ int nelements;
if (display_type == DT_NOGRAPHIC)
- return NULL;
+ return NULL;
- /* check if we can access the X server */
+ /* check if we can access the X server and get a GLX config */
d = XOpenDisplay(NULL);
- if (d == NULL)
- return NULL;
-
+ if (d == NULL)
+ return NULL;
+ configs = glXChooseFBConfig(d, 0, glx_fbconfig_attr, &nelements);
+ if (configs == NULL) {
+ XCloseDisplay(d);
+ return NULL;
+ }
+ XFree(configs);
XCloseDisplay(d);
dev = qdev_create(NULL, "milkymist,tmu2");
_______________________________________________
http://lists.milkymist.org/listinfo.cgi/devel-milkymist.org
IRC: #milkym...@freenode
Webchat: www.milkymist.org/irc.html
Wiki: www.milkymist.org/wiki