i-g-t: gem_dummy_reloc_loop.c: add vebox test case
authorZhong Li <zhong.li@intel.com>
Fri, 3 May 2013 07:55:34 +0000 (15:55 +0800)
committerBen Widawsky <ben@bwidawsk.net>
Sat, 4 May 2013 00:53:57 +0000 (17:53 -0700)
Aside from adding VEBOX support, this test allows allows the "mixed"
test case variant to work on platforms that have 2 rings which was
previously not the case. To the best of my memory, this might therefore
impact G45, and Ironlake.

Signed-off-by: Zhong Li <zhong.li@intel.com>
[Ben: added commit message, remove num_rings = 1, s/LOCACL/LOCAL]
Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
tests/gem_dummy_reloc_loop.c

index b67c7d3..1347d40 100644 (file)
@@ -42,6 +42,8 @@
 #include "intel_gpu_tools.h"
 #include "i830_reg.h"
 
+#define LOCAL_I915_EXEC_VEBOX (4<<0)
+
 static drm_intel_bufmgr *bufmgr;
 struct intel_batchbuffer *batch;
 static drm_intel_bo *target_buffer;
@@ -88,14 +90,14 @@ dummy_reloc_loop(int ring)
 }
 
 static void
-dummy_reloc_loop_random_ring(void)
+dummy_reloc_loop_random_ring(int num_rings)
 {
        int i;
 
        srandom(0xdeadbeef);
 
        for (i = 0; i < 0x100000; i++) {
-               int ring = random() % 3 + 1;
+               int ring = random() % num_rings + 1;
 
                if (ring == I915_EXEC_RENDER) {
                        BEGIN_BATCH(4);
@@ -126,11 +128,13 @@ int main(int argc, char **argv)
 {
        int fd;
        int devid;
+       int num_rings;
 
        drmtest_subtest_init(argc, argv);
 
        fd = drm_open_any();
        devid = intel_get_drm_devid(fd);
+       num_rings = gem_get_num_rings(fd);
        if (!HAS_BLT_RING(devid)) {
                fprintf(stderr, "not (yet) implemented for pre-snb\n");
                return 77;
@@ -179,11 +183,20 @@ int main(int argc, char **argv)
                }
        }
 
+       if (drmtest_run_subtest("vebox")) {
+               if (gem_has_vebox(fd)) {
+                       sleep(2);
+                       printf("running dummy loop on vebox\n");
+                       dummy_reloc_loop(LOCAL_I915_EXEC_VEBOX);
+                       printf("dummy loop run on vebox completed\n");
+               }
+       }
+
        if (drmtest_run_subtest("mixed")) {
-               if (HAS_BLT_RING(devid) && HAS_BSD_RING(devid)) {
+               if (num_rings > 1) {
                        sleep(2);
                        printf("running dummy loop on random rings\n");
-                       dummy_reloc_loop_random_ring();
+                       dummy_reloc_loop_random_ring(num_rings);
                        printf("dummy loop run on random rings completed\n");
                }
        }