drisw: add robustness extension support.
[mesa.git] / src / gallium / frontends / dri / drisw.c
index fcdc59ceec8ffe5a7130a02d7f071f0f13991b0c..8d7148ef6dc229a0637a5e64401aa405faa89a53 100644 (file)
@@ -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;