summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2011-11-01 12:10:35 +0100
committerDaniel Vetter <daniel.vetter@ffwll.ch>2011-11-01 12:10:35 +0100
commit37c64007345d4cf949746dd64b150162053de7cf (patch)
tree5d3d98d9d22a1423166821e950699d51cf8cf4f3
parent6b4f5c7ad84cac32151e9acd0c1692b74cf33fb2 (diff)
tests/gem_tiled_pread: fixup detiler for gen2
Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--tests/gem_tiled_pread.c34
1 files changed, 26 insertions, 8 deletions
diff --git a/tests/gem_tiled_pread.c b/tests/gem_tiled_pread.c
index c3c6ed746..e2b2b64c2 100644
--- a/tests/gem_tiled_pread.c
+++ b/tests/gem_tiled_pread.c
@@ -49,6 +49,7 @@
#include "drm.h"
#include "i915_drm.h"
#include "drmtest.h"
+#include "intel_gpu_tools.h"
#define WIDTH 512
#define HEIGHT 512
@@ -56,6 +57,10 @@ static uint32_t linear[WIDTH * HEIGHT];
#define PAGE_SIZE 4096
+static int tile_width;
+static int tile_height;
+static int tile_size;
+
static uint32_t
gem_create(int fd, int size)
{
@@ -160,18 +165,18 @@ swizzle_bit(int bit, int offset)
static uint32_t
calculate_expected(int offset)
{
- int tile_off = offset & (PAGE_SIZE - 1);
- int tile_base = offset & -PAGE_SIZE;
- int tile_index = tile_base / PAGE_SIZE;
- int tiles_per_row = 4*WIDTH / 512; /* X tiled = 512b rows */
+ int tile_off = offset & (tile_size - 1);
+ int tile_base = offset & -tile_size;
+ int tile_index = tile_base / tile_size;
+ 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 * 8;
- int base_x = tile_index % tiles_per_row * 128;
+ int base_y = tile_index / tiles_per_row * tile_height;
+ int base_x = tile_index % tiles_per_row * (tile_width/4);
/* x, y offsets within the tile */
- int tile_y = tile_off / 512;
- int tile_x = (tile_off % 512) / 4;
+ int tile_y = tile_off / tile_width;
+ int tile_x = (tile_off % tile_width) / 4;
/* printf("%3d, %3d, %3d,%3d\n", base_x, base_y, tile_x, tile_y); */
return (base_y + tile_y) * WIDTH + base_x + tile_x;
@@ -184,12 +189,25 @@ main(int argc, char **argv)
int i, iter = 100;
uint32_t tiling, swizzle;
uint32_t handle;
+ uint32_t devid;
fd = drm_open_any();
handle = create_bo(fd);
gem_get_tiling(fd, handle, &tiling, &swizzle);
+ devid = intel_get_drm_devid(fd);
+
+ if (IS_GEN2(devid)) {
+ tile_height = 16;
+ tile_width = 128;
+ tile_size = 2048;
+ } else {
+ tile_height = 8;
+ tile_width = 512;
+ tile_size = PAGE_SIZE;
+ }
+
/* Read a bunch of random subsets of the data and check that they come
* out right.
*/