diff options
| -rw-r--r-- | tests/i915/gem_exec_params.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/i915/gem_exec_params.c b/tests/i915/gem_exec_params.c index 83194be7..86d50489 100644 --- a/tests/i915/gem_exec_params.c +++ b/tests/i915/gem_exec_params.c @@ -41,6 +41,7 @@ #include "i915/gem.h" #include "igt.h" #include "igt_device.h" +#include "sw_sync.h" static bool has_ring(int fd, unsigned ring_exec_flags) { @@ -196,6 +197,20 @@ static int has_secure_batches(const int fd) return v > 0; } +static bool has_submit_fence(int fd) +{ + int v = 0; + struct drm_i915_getparam gp = { + .param = I915_PARAM_HAS_EXEC_SUBMIT_FENCE, + .value = &v, + }; + + ioctl(fd, DRM_IOCTL_I915_GETPARAM, &gp, sizeof(gp)); + errno = 0; + + return v > 0; +} + static uint32_t batch_create(int i915) { const uint32_t bbe = MI_BATCH_BUFFER_END; @@ -535,6 +550,28 @@ igt_main RUN_FAIL(EINVAL); } + igt_subtest("invalid-fence-in-submit") { + int timeline; + + igt_require(gem_has_exec_fence(fd)); + igt_require(has_submit_fence(fd)); + + timeline = sw_sync_timeline_create(); + execbuf.rsvd2 = sw_sync_timeline_create_fence(timeline, 1); + + execbuf.flags = I915_EXEC_FENCE_IN; + gem_execbuf(fd, &execbuf); + + execbuf.flags = I915_EXEC_FENCE_SUBMIT; + gem_execbuf(fd, &execbuf); + + execbuf.flags = I915_EXEC_FENCE_IN | I915_EXEC_FENCE_SUBMIT; + RUN_FAIL(EINVAL); + + close(execbuf.rsvd2); + close(timeline); + } + igt_subtest("rsvd2-dirt") { igt_require(!gem_has_exec_fence(fd)); execbuf.flags = 0; |
