diff options
author | Veluri Mithun <[email protected]> | 2019-01-23 22:45:42 +0530 |
---|---|---|
committer | Eric Engestrom <[email protected]> | 2019-01-24 14:37:52 +0000 |
commit | 85edfc04b8dde4dd7ba6a2c102a6e5971ee343ce (patch) | |
tree | f165435cc79e508ce91fe8520cb45279a7a02b3c | |
parent | 98984b7cdd79c15cc7331c791f8be61e873b8bbd (diff) |
egl: Implementation of egl dri2 drivers for MESA_query_driver
Signed-off-by: Veluri Mithun <[email protected]>
Acked-by: Eric Engestrom <[email protected]>
Reviewed-by: Emil Velikov <[email protected]>
-rw-r--r-- | src/egl/drivers/dri2/egl_dri2.c | 37 | ||||
-rw-r--r-- | src/egl/drivers/dri2/egl_dri2.h | 1 |
2 files changed, 38 insertions, 0 deletions
diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index bce9ecb274f..892e32dd4e3 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -426,6 +426,11 @@ static const struct dri2_extension_match swrast_core_extensions[] = { { NULL, 0, 0 } }; +static const struct dri2_extension_match optional_driver_extensions[] = { + { __DRI_CONFIG_OPTIONS, 1, offsetof(struct dri2_egl_display, configOptions) }, + { NULL, 0, 0 } +}; + static const struct dri2_extension_match optional_core_extensions[] = { { __DRI2_ROBUSTNESS, 1, offsetof(struct dri2_egl_display, robustness) }, { __DRI2_NO_ERROR, 1, offsetof(struct dri2_egl_display, no_error) }, @@ -510,6 +515,8 @@ dri2_load_driver_dri3(_EGLDisplay *disp) } dri2_dpy->driver_extensions = extensions; + dri2_bind_extensions(dri2_dpy, optional_driver_extensions, extensions, true); + return EGL_TRUE; } @@ -529,6 +536,8 @@ dri2_load_driver(_EGLDisplay *disp) } dri2_dpy->driver_extensions = extensions; + dri2_bind_extensions(dri2_dpy, optional_driver_extensions, extensions, true); + return EGL_TRUE; } @@ -548,6 +557,8 @@ dri2_load_driver_swrast(_EGLDisplay *disp) } dri2_dpy->driver_extensions = extensions; + dri2_bind_extensions(dri2_dpy, optional_driver_extensions, extensions, true); + return EGL_TRUE; } @@ -564,6 +575,26 @@ dri2_renderer_query_integer(struct dri2_egl_display *dri2_dpy, int param) return value; } +static const char * +dri2_query_driver_name(_EGLDisplay *disp) +{ + struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); + return dri2_dpy->driver_name; +} + +static char * +dri2_query_driver_config(_EGLDisplay *disp) +{ + struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); + const __DRIconfigOptionsExtension *ext = dri2_dpy->configOptions; + + if (ext->base.version >= 2) + return ext->getXml(dri2_dpy->driver_name); + + return strdup(ext->xml); +} + + void dri2_setup_screen(_EGLDisplay *disp) { @@ -608,6 +639,10 @@ dri2_setup_screen(_EGLDisplay *disp) disp->Extensions.KHR_no_config_context = EGL_TRUE; disp->Extensions.KHR_surfaceless_context = EGL_TRUE; + if (dri2_dpy->configOptions) { + disp->Extensions.MESA_query_driver = EGL_TRUE; + } + /* Report back to EGL the bitmask of priorities supported */ disp->Extensions.IMG_context_priority = dri2_renderer_query_integer(dri2_dpy, @@ -3229,6 +3264,8 @@ _eglInitDriver(_EGLDriver *dri2_drv) dri2_drv->API.DestroyImageKHR = dri2_destroy_image_khr; dri2_drv->API.CreateWaylandBufferFromImageWL = dri2_create_wayland_buffer_from_image; dri2_drv->API.QuerySurface = dri2_query_surface; + dri2_drv->API.QueryDriverName = dri2_query_driver_name; + dri2_drv->API.QueryDriverConfig = dri2_query_driver_config; #ifdef HAVE_LIBDRM dri2_drv->API.CreateDRMImageMESA = dri2_create_drm_image_mesa; dri2_drv->API.ExportDRMImageMESA = dri2_export_drm_image_mesa; diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h index 4abe1ba1952..726ba16ae61 100644 --- a/src/egl/drivers/dri2/egl_dri2.h +++ b/src/egl/drivers/dri2/egl_dri2.h @@ -185,6 +185,7 @@ struct dri2_egl_display const __DRI2blobExtension *blob; const __DRI2rendererQueryExtension *rendererQuery; const __DRI2interopExtension *interop; + const __DRIconfigOptionsExtension *configOptions; const __DRImutableRenderBufferDriverExtension *mutable_render_buffer; int fd; |