[Intel-gfx] [PATCH igt] igt/gem_tiled_pread_basic: Only print the erroneous location

Chris Wilson chris at chris-wilson.co.uk
Wed Oct 19 14:32:01 UTC 2016


Emitting a debug message for every pixel tested takes us from 0.4s to 20s
on an old Core2.

Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
---
 tests/gem_tiled_pread_basic.c | 32 ++++++++++++++++++++------------
 1 file changed, 20 insertions(+), 12 deletions(-)

diff --git a/tests/gem_tiled_pread_basic.c b/tests/gem_tiled_pread_basic.c
index bad3650..425bb07 100644
--- a/tests/gem_tiled_pread_basic.c
+++ b/tests/gem_tiled_pread_basic.c
@@ -87,11 +87,16 @@ swizzle_bit(int bit, int offset)
 	return (offset & (1 << bit)) >> (bit - 6);
 }
 
+struct offset {
+	int base_x, base_y;
+	int tile_x, tile_y;
+};
+
 /* Translate from a swizzled offset in the tiled buffer to the corresponding
  * value from the original linear buffer.
  */
 static uint32_t
-calculate_expected(int offset)
+calculate_expected(int offset, struct offset *dbg)
 {
 	int tile_off = offset & (tile_size - 1);
 	int tile_base = offset & -tile_size;
@@ -99,15 +104,14 @@ calculate_expected(int offset)
 	int tiles_per_row = 4*WIDTH / tile_width;
 
 	/* base x,y values from the tile (page) index. */
-	int base_y = tile_index / tiles_per_row * tile_height;
-	int base_x = tile_index % tiles_per_row * (tile_width/4);
+	dbg->base_y = tile_index / tiles_per_row * tile_height;
+	dbg->base_x = tile_index % tiles_per_row * (tile_width/4);
 
 	/* x, y offsets within the tile */
-	int tile_y = tile_off / tile_width;
-	int tile_x = (tile_off % tile_width) / 4;
+	dbg->tile_y = tile_off / tile_width;
+	dbg->tile_x = (tile_off % tile_width) / 4;
 
-	igt_debug("%3d, %3d, %3d,%3d\n", base_x, base_y, tile_x, tile_y);
-	return (base_y + tile_y) * WIDTH + base_x + tile_x;
+	return (dbg->base_y + dbg->tile_y) * WIDTH + dbg->base_x + dbg->tile_x;
 }
 
 igt_simple_main
@@ -163,7 +167,8 @@ igt_simple_main
 		 * offset it's looking for).
 		 */
 		for (j = offset; j < offset + len; j += 4) {
-			uint32_t expected_val, found_val;
+			struct offset dbg;
+			uint32_t expected, found;
 			int swizzled_offset;
 			const char *swizzle_str;
 
@@ -200,12 +205,15 @@ igt_simple_main
 				igt_assert_f(0, "Bad swizzle bits; %d\n",
 					     swizzle);
 			}
-			expected_val = calculate_expected(swizzled_offset);
-			found_val = linear[(j - offset) / 4];
-			igt_assert_f(expected_val == found_val,
+			expected = calculate_expected(swizzled_offset, &dbg);
+			found = linear[(j - offset) / 4];
+			igt_assert_f(expected == found,
 				     "Bad read [%d]: %d instead of %d at 0x%08x "
+				     "[tile (%d, %d) subtile (%d, %d)] "
 				     "for read from 0x%08x to 0x%08x, swizzle=%s\n",
-				     i, found_val, expected_val, j,
+				     i, found, expected, j,
+				     dbg.base_x, dbg.base_y,
+				     dbg.tile_x, dbg.tile_y,
 				     offset, offset + len,
 				     swizzle_str);
 		}
-- 
2.9.3



More information about the Intel-gfx mailing list