iris: Detect DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT kernel support
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 29 Apr 2020 20:53:50 +0000 (13:53 -0700)
committerMarge Bot <eric+marge@anholt.net>
Fri, 1 May 2020 19:00:02 +0000 (19:00 +0000)
We will use this for implementing deferred flushes in the next commit.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3802>

src/gallium/drivers/iris/iris_screen.c
src/gallium/drivers/iris/iris_screen.h

index 7351b1d0027097f0c8fe7c8a13be05cc4a6c0b21..ae486adc9451159a1f453e7aedadf9a50aa1c5cd 100644 (file)
@@ -635,6 +635,14 @@ iris_shader_perf_log(void *data, const char *fmt, ...)
    va_end(args);
 }
 
+static void
+iris_detect_kernel_features(struct iris_screen *screen)
+{
+   /* Kernel 5.2+ */
+   if (gen_gem_supports_syncobj_wait(screen->fd))
+      screen->kernel_features |= KERNEL_HAS_WAIT_FOR_SUBMIT;
+}
+
 struct pipe_screen *
 iris_screen_create(int fd, const struct pipe_screen_config *config)
 {
@@ -724,6 +732,8 @@ iris_screen_create(int fd, const struct pipe_screen_config *config)
       iris_getparam_integer(screen->fd, I915_PARAM_SUBSLICE_TOTAL);
    assert(screen->subslice_total >= 1);
 
+   iris_detect_kernel_features(screen);
+
    struct pipe_screen *pscreen = &screen->base;
 
    iris_init_screen_fence_functions(pscreen);
index 76d726fd9a464b3efd9019613b9cf897f1c14576..6d5d1c58074d2067bc3e2c0a007fc25a03a47047 100644 (file)
@@ -168,6 +168,10 @@ struct iris_screen {
       bool always_flush_cache;
    } driconf;
 
+   /** Does the kernel support various features (KERNEL_HAS_* bitfield)? */
+   unsigned kernel_features;
+#define KERNEL_HAS_WAIT_FOR_SUBMIT (1<<0)
+
    unsigned subslice_total;
 
    uint64_t aperture_bytes;