diff options
author | Dave Airlie <airlied@redhat.com> | 2020-07-20 09:21:06 +1000 |
---|---|---|
committer | Marge Bot <eric+marge@anholt.net> | 2020-07-23 00:04:49 +0000 |
commit | 80f7b58d901859be216e17aaad21d6a9b34ac9ea (patch) | |
tree | d4e650959b6c50f3377fff91ad93adfa9e884ca6 | |
parent | 12c06a0deb632728f76ceb480e86151b8f96100e (diff) |
drisw: add robustness extension support.
Port the code from dri2 so that drisw drivers can support the
robustness extension
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5971>
-rw-r--r-- | src/gallium/frontends/dri/drisw.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/gallium/frontends/dri/drisw.c b/src/gallium/frontends/dri/drisw.c index fcdc59ceec8..8d7148ef6dc 100644 --- a/src/gallium/frontends/dri/drisw.c +++ b/src/gallium/frontends/dri/drisw.c @@ -449,6 +449,10 @@ static __DRIimageExtension driSWImageExtension = { .destroyImage = dri2_destroy_image, }; +static const __DRIrobustnessExtension dri2Robustness = { + .base = { __DRI2_ROBUSTNESS, 1 } +}; + /* * Backend function for init_screen. */ @@ -464,6 +468,18 @@ static const __DRIextension *drisw_screen_extensions[] = { NULL }; +static const __DRIextension *drisw_robust_screen_extensions[] = { + &driTexBufferExtension.base, + &dri2RendererQueryExtension.base, + &dri2ConfigQueryExtension.base, + &dri2FenceExtension.base, + &dri2NoErrorExtension.base, + &dri2Robustness.base, + &driSWImageExtension.base, + &dri2FlushControlExtension.base, + NULL +}; + static const struct drisw_loader_funcs drisw_lf = { .get_image = drisw_get_image, .put_image = drisw_put_image, @@ -496,7 +512,7 @@ drisw_init_screen(__DRIscreen * sPriv) screen->swrast_no_present = debug_get_option_swrast_no_present(); sPriv->driverPrivate = (void *)screen; - sPriv->extensions = drisw_screen_extensions; + if (loader->base.version >= 4) { if (loader->putImageShm) lf = &drisw_shm_lf; @@ -515,6 +531,12 @@ drisw_init_screen(__DRIscreen * sPriv) if (!configs) goto fail; + if (pscreen->get_param(pscreen, PIPE_CAP_DEVICE_RESET_STATUS_QUERY)) { + sPriv->extensions = drisw_robust_screen_extensions; + screen->has_reset_status_query = true; + } + else + sPriv->extensions = drisw_screen_extensions; screen->lookup_egl_image = dri2_lookup_egl_image; return configs; |