Skip to content

Commit

Permalink
ui/egl: query ANGLE d3d device
Browse files Browse the repository at this point in the history
Check if ANGLE is being used with D3D backend.

Signed-off-by: Marc-André Lureau <[email protected]>
Message-Id: <[email protected]>
  • Loading branch information
elmarco committed Jun 27, 2023
1 parent e8a2db9 commit 06c63a3
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 1 deletion.
1 change: 1 addition & 0 deletions include/ui/egl-helpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
extern EGLDisplay *qemu_egl_display;
extern EGLConfig qemu_egl_config;
extern DisplayGLMode qemu_egl_mode;
extern bool qemu_egl_angle_d3d;

typedef struct egl_fb {
int width;
Expand Down
32 changes: 31 additions & 1 deletion ui/egl-helpers.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,19 @@
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
#include "qemu/osdep.h"

#include "qemu/drm.h"
#include "qemu/error-report.h"
#include "ui/console.h"
#include "ui/egl-helpers.h"
#include "sysemu/sysemu.h"
#include "qapi/error.h"
#include "trace.h"

EGLDisplay *qemu_egl_display;
EGLConfig qemu_egl_config;
DisplayGLMode qemu_egl_mode;
bool qemu_egl_angle_d3d;

/* ------------------------------------------------------------------ */

Expand Down Expand Up @@ -553,7 +556,34 @@ int qemu_egl_init_dpy_win32(EGLNativeDisplayType dpy, DisplayGLMode mode)
if (mode == DISPLAYGL_MODE_ON) {
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

Expand Down
3 changes: 3 additions & 0 deletions ui/trace-events
Original file line number Diff line number Diff line change
Expand Up @@ -162,3 +162,6 @@ dbus_clipboard_register(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_gl_gfx_switch(void *p) "surf: %p"

# egl-helpers.c
egl_init_d3d11_device(void *p) "d3d device: %p"

0 comments on commit 06c63a3

Please sign in to comment.