tests/bdw: Port storedw_loop_blt to gen8
authorZhao Yakui <yakui.zhao@intel.com>
Tue, 9 Apr 2013 01:29:19 +0000 (09:29 +0800)
committerBen Widawsky <benjamin.widawsky@intel.com>
Wed, 6 Nov 2013 17:34:35 +0000 (09:34 -0800)
The code is from the storedw_loop_render.

v2 (by Ben): Flush on the correct ring

Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
tests/gem_storedw_loop_blt.c

index 84f9e28..9c1ee08 100644 (file)
@@ -51,26 +51,42 @@ static int has_ppgtt = 0;
  */
 
 static void
-store_dword_loop(int divider)
+emit_store_dword_imm(int devid, drm_intel_bo *dest, uint32_t val)
 {
-       int cmd, i, val = 0;
-       uint32_t *buf;
-
-       printf("running storedw loop on blt with stall every %i batch\n", divider);
-
+       int cmd;
        cmd = MI_STORE_DWORD_IMM;
        if (!has_ppgtt)
                cmd |= MI_MEM_VIRTUAL;
 
-       for (i = 0; i < SLOW_QUICK(0x100000, 0x10); i++) {
+       if (intel_gen(devid) >= 8) {
+               BEGIN_BATCH(4);
+               OUT_BATCH(cmd);
+               OUT_RELOC(dest, I915_GEM_DOMAIN_INSTRUCTION,
+                         I915_GEM_DOMAIN_INSTRUCTION, 0);
+               OUT_BATCH(0);
+               OUT_BATCH(val);
+               ADVANCE_BATCH();
+       } else {
                BEGIN_BATCH(4);
                OUT_BATCH(cmd);
                OUT_BATCH(0); /* reserved */
-               OUT_RELOC(target_buffer, I915_GEM_DOMAIN_INSTRUCTION,
+               OUT_RELOC(dest, I915_GEM_DOMAIN_INSTRUCTION,
                          I915_GEM_DOMAIN_INSTRUCTION, 0);
                OUT_BATCH(val);
                ADVANCE_BATCH();
+       }
+}
+
+static void
+store_dword_loop(int devid, int divider)
+{
+       int i, val = 0;
+       uint32_t *buf;
 
+       printf("running storedw loop on render with stall every %i batch\n", divider);
+
+       for (i = 0; i < SLOW_QUICK(0x100000, 0x10); i++) {
+               emit_store_dword_imm(devid, target_buffer, val);
                intel_batchbuffer_flush_on_ring(batch, I915_EXEC_BLT);
 
                if (i % divider != 0)
@@ -124,11 +140,11 @@ int main(int argc, char **argv)
        target_buffer = drm_intel_bo_alloc(bufmgr, "target bo", 4096, 4096);
        igt_assert(target_buffer);
 
-       store_dword_loop(1);
-       store_dword_loop(2);
+       store_dword_loop(devid, 1);
+       store_dword_loop(devid, 2);
        if (!igt_run_in_simulation()) {
-               store_dword_loop(3);
-               store_dword_loop(5);
+               store_dword_loop(devid, 3);
+               store_dword_loop(devid, 5);
        }
 
        drm_intel_bo_unreference(target_buffer);