diff --git a/tests/gem_ring_sync_copy.c b/tests/gem_ring_sync_copy.c index 4a732d22..72571887 100644 --- a/tests/gem_ring_sync_copy.c +++ b/tests/gem_ring_sync_copy.c @@ -57,6 +57,7 @@ #define WIDTH 512 #define HEIGHT 512 +#define NUM_BUSY_BUFFERS 32 typedef struct { int drm_fd; @@ -163,11 +164,13 @@ static void render_busy(data_t *data) size_t array_size; int i; - array_size = data->n_buffers_load * sizeof(struct igt_buf); + /* allocate 32 buffer objects and re-use them as needed */ + array_size = NUM_BUSY_BUFFERS * sizeof(struct igt_buf); + data->render.srcs = malloc(array_size); data->render.dsts = malloc(array_size); - for (i = 0; i < data->n_buffers_load; i++) { + for (i = 0; i < NUM_BUSY_BUFFERS; i++) { scratch_buf_init(data, &data->render.srcs[i], WIDTH, HEIGHT, 0xdeadbeef); scratch_buf_init(data, &data->render.dsts[i], WIDTH, HEIGHT, @@ -177,10 +180,10 @@ static void render_busy(data_t *data) for (i = 0; i < data->n_buffers_load; i++) { data->render.copy(data->batch, NULL, /* context */ - &data->render.srcs[i], + &data->render.srcs[i % NUM_BUSY_BUFFERS], 0, 0, /* src_x, src_y */ WIDTH, HEIGHT, - &data->render.dsts[i], + &data->render.dsts[i % NUM_BUSY_BUFFERS], 0, 0 /* dst_x, dst_y */); } } @@ -189,7 +192,7 @@ static void render_busy_fini(data_t *data) { int i; - for (i = 0; i < data->n_buffers_load; i++) { + for (i = 0; i < NUM_BUSY_BUFFERS; i++) { drm_intel_bo_unreference(data->render.srcs[i].bo); drm_intel_bo_unreference(data->render.dsts[i].bo); } @@ -225,11 +228,13 @@ static void blitter_busy(data_t *data) size_t array_size; int i; - array_size = data->n_buffers_load * sizeof(drm_intel_bo *); + /* allocate 32 buffer objects and re-use them as needed */ + array_size = NUM_BUSY_BUFFERS * sizeof(drm_intel_bo *); + data->blitter.srcs = malloc(array_size); data->blitter.dsts = malloc(array_size); - for (i = 0; i < data->n_buffers_load; i++) { + for (i = 0; i < NUM_BUSY_BUFFERS; i++) { data->blitter.srcs[i] = bo_create(data, WIDTH, HEIGHT, 0xdeadbeef); @@ -240,8 +245,8 @@ static void blitter_busy(data_t *data) for (i = 0; i < data->n_buffers_load; i++) { intel_copy_bo(data->batch, - data->blitter.srcs[i], - data->blitter.dsts[i], + data->blitter.srcs[i % NUM_BUSY_BUFFERS], + data->blitter.dsts[i % NUM_BUSY_BUFFERS], WIDTH*HEIGHT*4); } } @@ -250,7 +255,7 @@ static void blitter_busy_fini(data_t *data) { int i; - for (i = 0; i < data->n_buffers_load; i++) { + for (i = 0; i < NUM_BUSY_BUFFERS; i++) { drm_intel_bo_unreference(data->blitter.srcs[i]); drm_intel_bo_unreference(data->blitter.dsts[i]); }