diff options
-rw-r--r-- | lib/i915/gem_scheduler.c | 21 | ||||
-rw-r--r-- | lib/i915/gem_scheduler.h | 1 |
2 files changed, 22 insertions, 0 deletions
diff --git a/lib/i915/gem_scheduler.c b/lib/i915/gem_scheduler.c index 184da843..6dfa3676 100644 --- a/lib/i915/gem_scheduler.c +++ b/lib/i915/gem_scheduler.c @@ -29,6 +29,7 @@ #include "ioctl_wrappers.h" #include "i915/gem_scheduler.h" +#include "i915/gem_submission.h" /** * SECTION:gem_scheduler @@ -130,6 +131,22 @@ bool gem_scheduler_has_engine_busy_stats(int fd) } /** + * gem_scheduler_has_timeslicing: + * @fd: open i915 drm file descriptor + * + * Feature test macro to query whether the driver supports using HW preemption + * to implement timeslicing of userspace batches. This allows userspace to + * implement micro-level scheduling within their own batches. + */ +bool gem_scheduler_has_timeslicing(int fd) +{ + return ((gem_scheduler_capability(fd) & + (I915_SCHEDULER_CAP_PREEMPTION | + I915_SCHEDULER_CAP_SEMAPHORES)) + || gem_has_guc_submission(fd)); +} + +/** * gem_scheduler_print_capability: * @fd: open i915 drm file descriptor * @@ -151,4 +168,8 @@ void gem_scheduler_print_capability(int fd) igt_info(" - With HW semaphores enabled\n"); if (caps & I915_SCHEDULER_CAP_ENGINE_BUSY_STATS) igt_info(" - With engine busy statistics\n"); + if ((caps & (I915_SCHEDULER_CAP_PREEMPTION + | I915_SCHEDULER_CAP_SEMAPHORES)) + || gem_has_guc_submission(fd)) + igt_info(" - With timeslicing enabled\n"); } diff --git a/lib/i915/gem_scheduler.h b/lib/i915/gem_scheduler.h index 14bd4cac..d43e84bd 100644 --- a/lib/i915/gem_scheduler.h +++ b/lib/i915/gem_scheduler.h @@ -32,6 +32,7 @@ bool gem_scheduler_has_ctx_priority(int fd); bool gem_scheduler_has_preemption(int fd); bool gem_scheduler_has_semaphores(int fd); bool gem_scheduler_has_engine_busy_stats(int fd); +bool gem_scheduler_has_timeslicing(int fd); void gem_scheduler_print_capability(int fd); #endif /* GEM_SCHEDULER_H */ |