From df09efe8df40f39dc791f39fde07b37a48157eea Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Wed, 29 Apr 2020 13:53:50 -0700 Subject: [PATCH] iris: Detect DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT kernel support We will use this for implementing deferred flushes in the next commit. Part-of: --- src/gallium/drivers/iris/iris_screen.c | 10 ++++++++++ src/gallium/drivers/iris/iris_screen.h | 4 ++++ 2 files changed, 14 insertions(+) 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; -- 2.30.2