i965: Report supported context priorities to EGL/DRI
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 11 Apr 2017 15:17:36 +0000 (16:17 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Fri, 20 Oct 2017 10:28:17 +0000 (11:28 +0100)
Hook up the RendererQuery for __DRI2_RENDERER_HAS_CONTEXT_PRIORITY to
report the available DRM_I915_GEM_CONTEXT_SETPARAM options based on the
per-client default context. The kernel will validate the request to change
the property, so we get an accurate reflection of available support
(based on kernel version and privilege) and we should only have to do it
once during screen setup -- although the SETPARAM should be fast, they
are still an ioctl each.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/intel_screen.c

index 28e83cf9b21aadf60b0bba2afde49a77d8b8b6db..5975b91a7662a976b45c474b9cbcac40ad3583f1 100644 (file)
@@ -1371,6 +1371,19 @@ brw_query_renderer_integer(__DRIscreen *dri_screen,
    case __DRI2_RENDERER_HAS_TEXTURE_3D:
       value[0] = 1;
       return 0;
+   case __DRI2_RENDERER_HAS_CONTEXT_PRIORITY:
+      value[0] = 0;
+      if (brw_hw_context_set_priority(screen->bufmgr,
+                                     0, BRW_CONTEXT_HIGH_PRIORITY) == 0)
+         value[0] |= __DRI2_RENDERER_HAS_CONTEXT_PRIORITY_HIGH;
+      if (brw_hw_context_set_priority(screen->bufmgr,
+                                     0, BRW_CONTEXT_LOW_PRIORITY) == 0)
+         value[0] |= __DRI2_RENDERER_HAS_CONTEXT_PRIORITY_LOW;
+      /* reset to default last, just in case */
+      if (brw_hw_context_set_priority(screen->bufmgr,
+                                     0, BRW_CONTEXT_MEDIUM_PRIORITY) == 0)
+         value[0] |= __DRI2_RENDERER_HAS_CONTEXT_PRIORITY_MEDIUM;
+      return 0;
    default:
       return driQueryRendererIntegerCommon(dri_screen, param, value);
    }