mirror of https://github.com/xemu-project/xemu.git
ui/egl: query ANGLE d3d device
Check if ANGLE is being used with D3D backend. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-Id: <20230606115658.677673-19-marcandre.lureau@redhat.com>
This commit is contained in:
parent
e8a2db9479
commit
06c63a34e6
|
@ -12,6 +12,7 @@
|
||||||
extern EGLDisplay *qemu_egl_display;
|
extern EGLDisplay *qemu_egl_display;
|
||||||
extern EGLConfig qemu_egl_config;
|
extern EGLConfig qemu_egl_config;
|
||||||
extern DisplayGLMode qemu_egl_mode;
|
extern DisplayGLMode qemu_egl_mode;
|
||||||
|
extern bool qemu_egl_angle_d3d;
|
||||||
|
|
||||||
typedef struct egl_fb {
|
typedef struct egl_fb {
|
||||||
int width;
|
int width;
|
||||||
|
|
|
@ -15,16 +15,19 @@
|
||||||
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
|
|
||||||
#include "qemu/drm.h"
|
#include "qemu/drm.h"
|
||||||
#include "qemu/error-report.h"
|
#include "qemu/error-report.h"
|
||||||
#include "ui/console.h"
|
#include "ui/console.h"
|
||||||
#include "ui/egl-helpers.h"
|
#include "ui/egl-helpers.h"
|
||||||
#include "sysemu/sysemu.h"
|
#include "sysemu/sysemu.h"
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
|
#include "trace.h"
|
||||||
|
|
||||||
EGLDisplay *qemu_egl_display;
|
EGLDisplay *qemu_egl_display;
|
||||||
EGLConfig qemu_egl_config;
|
EGLConfig qemu_egl_config;
|
||||||
DisplayGLMode qemu_egl_mode;
|
DisplayGLMode qemu_egl_mode;
|
||||||
|
bool qemu_egl_angle_d3d;
|
||||||
|
|
||||||
/* ------------------------------------------------------------------ */
|
/* ------------------------------------------------------------------ */
|
||||||
|
|
||||||
|
@ -553,7 +556,34 @@ int qemu_egl_init_dpy_win32(EGLNativeDisplayType dpy, DisplayGLMode mode)
|
||||||
if (mode == DISPLAYGL_MODE_ON) {
|
if (mode == DISPLAYGL_MODE_ON) {
|
||||||
mode = DISPLAYGL_MODE_ES;
|
mode = DISPLAYGL_MODE_ES;
|
||||||
}
|
}
|
||||||
return qemu_egl_init_dpy(dpy, 0, mode);
|
|
||||||
|
if (qemu_egl_init_dpy(dpy, 0, mode) < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef EGL_D3D11_DEVICE_ANGLE
|
||||||
|
if (epoxy_has_egl_extension(qemu_egl_display, "EGL_EXT_device_query")) {
|
||||||
|
EGLDeviceEXT device;
|
||||||
|
void *d3d11_device;
|
||||||
|
|
||||||
|
if (!eglQueryDisplayAttribEXT(qemu_egl_display,
|
||||||
|
EGL_DEVICE_EXT,
|
||||||
|
(EGLAttrib *)&device)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!eglQueryDeviceAttribEXT(device,
|
||||||
|
EGL_D3D11_DEVICE_ANGLE,
|
||||||
|
(EGLAttrib *)&d3d11_device)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
trace_egl_init_d3d11_device(device);
|
||||||
|
qemu_egl_angle_d3d = device != NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -162,3 +162,6 @@ dbus_clipboard_register(const char *bus_name) "peer %s"
|
||||||
dbus_clipboard_unregister(const char *bus_name) "peer %s"
|
dbus_clipboard_unregister(const char *bus_name) "peer %s"
|
||||||
dbus_scanout_texture(uint32_t tex_id, bool backing_y_0_top, uint32_t backing_width, uint32_t backing_height, uint32_t x, uint32_t y, uint32_t w, uint32_t h) "tex_id:%u y0top:%d back:%ux%u %u+%u-%ux%u"
|
dbus_scanout_texture(uint32_t tex_id, bool backing_y_0_top, uint32_t backing_width, uint32_t backing_height, uint32_t x, uint32_t y, uint32_t w, uint32_t h) "tex_id:%u y0top:%d back:%ux%u %u+%u-%ux%u"
|
||||||
dbus_gl_gfx_switch(void *p) "surf: %p"
|
dbus_gl_gfx_switch(void *p) "surf: %p"
|
||||||
|
|
||||||
|
# egl-helpers.c
|
||||||
|
egl_init_d3d11_device(void *p) "d3d device: %p"
|
||||||
|
|
Loading…
Reference in New Issue