diff --git a/src/gallium/drivers/iris/iris_screen.c b/src/gallium/drivers/iris/iris_screen.c index 7351b1d0027..ae486adc945 100644 --- a/src/gallium/drivers/iris/iris_screen.c +++ b/src/gallium/drivers/iris/iris_screen.c @@ -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); diff --git a/src/gallium/drivers/iris/iris_screen.h b/src/gallium/drivers/iris/iris_screen.h index 76d726fd9a4..6d5d1c58074 100644 --- a/src/gallium/drivers/iris/iris_screen.h +++ b/src/gallium/drivers/iris/iris_screen.h @@ -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;