From: Ville Syrjälä Date: Thu, 21 Nov 2013 17:05:17 +0000 (+0200) Subject: rendercopy: Pass context to rendercopy functions X-Git-Tag: intel-gpu-tools-1.6~294 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=725da6ee7458c5227a2bc9a1b686dad8f3c6d854;p=platform%2Fupstream%2Fintel-gpu-tools.git rendercopy: Pass context to rendercopy functions rendercopy does the batch buffer flush internally, so if we want to use it with multiple contexts, we need to pass the context in from caller. v2: Modify rendercopy_gen8 as well Signed-off-by: Ville Syrjälä --- diff --git a/lib/rendercopy.h b/lib/rendercopy.h index f726df6..6312cc3 100644 --- a/lib/rendercopy.h +++ b/lib/rendercopy.h @@ -62,6 +62,7 @@ static inline unsigned buf_height(struct scratch_buf *buf) } typedef void (*render_copyfunc_t)(struct intel_batchbuffer *batch, + drm_intel_context *context, struct scratch_buf *src, unsigned src_x, unsigned src_y, unsigned width, unsigned height, struct scratch_buf *dst, unsigned dst_x, unsigned dst_y); @@ -69,22 +70,27 @@ typedef void (*render_copyfunc_t)(struct intel_batchbuffer *batch, render_copyfunc_t get_render_copyfunc(int devid); void gen8_render_copyfunc(struct intel_batchbuffer *batch, + drm_intel_context *context, struct scratch_buf *src, unsigned src_x, unsigned src_y, unsigned width, unsigned height, struct scratch_buf *dst, unsigned dst_x, unsigned dst_y); void gen7_render_copyfunc(struct intel_batchbuffer *batch, + drm_intel_context *context, struct scratch_buf *src, unsigned src_x, unsigned src_y, unsigned width, unsigned height, struct scratch_buf *dst, unsigned dst_x, unsigned dst_y); void gen6_render_copyfunc(struct intel_batchbuffer *batch, + drm_intel_context *context, struct scratch_buf *src, unsigned src_x, unsigned src_y, unsigned width, unsigned height, struct scratch_buf *dst, unsigned dst_x, unsigned dst_y); void gen3_render_copyfunc(struct intel_batchbuffer *batch, + drm_intel_context *context, struct scratch_buf *src, unsigned src_x, unsigned src_y, unsigned width, unsigned height, struct scratch_buf *dst, unsigned dst_x, unsigned dst_y); void gen2_render_copyfunc(struct intel_batchbuffer *batch, + drm_intel_context *context, struct scratch_buf *src, unsigned src_x, unsigned src_y, unsigned width, unsigned height, struct scratch_buf *dst, unsigned dst_x, unsigned dst_y); diff --git a/lib/rendercopy_gen6.c b/lib/rendercopy_gen6.c index dafee88..457cb35 100644 --- a/lib/rendercopy_gen6.c +++ b/lib/rendercopy_gen6.c @@ -78,14 +78,15 @@ batch_copy(struct intel_batchbuffer *batch, const void *ptr, uint32_t size, uint } static void -gen6_render_flush(struct intel_batchbuffer *batch, uint32_t batch_end) +gen6_render_flush(struct intel_batchbuffer *batch, + drm_intel_context *context, uint32_t batch_end) { int ret; ret = drm_intel_bo_subdata(batch->bo, 0, 4096, batch->buffer); if (ret == 0) - ret = drm_intel_bo_mrb_exec(batch->bo, batch_end, - NULL, 0, 0, 0); + ret = drm_intel_gem_bo_context_exec(batch->bo, context, + batch_end, 0); assert(ret == 0); } @@ -529,6 +530,7 @@ static uint32_t gen6_emit_primitive(struct intel_batchbuffer *batch) } void gen6_render_copyfunc(struct intel_batchbuffer *batch, + drm_intel_context *context, struct scratch_buf *src, unsigned src_x, unsigned src_y, unsigned width, unsigned height, struct scratch_buf *dst, unsigned dst_x, unsigned dst_y) @@ -537,7 +539,7 @@ void gen6_render_copyfunc(struct intel_batchbuffer *batch, uint32_t cc_vp, cc_blend, offset; uint32_t batch_end; - intel_batchbuffer_flush(batch); + intel_batchbuffer_flush_with_context(batch, context); batch->ptr = batch->buffer + 1024; batch_alloc(batch, 64, 64); @@ -594,6 +596,6 @@ void gen6_render_copyfunc(struct intel_batchbuffer *batch, emit_vertex_normalized(batch, src_x, buf_width(src)); emit_vertex_normalized(batch, src_y, buf_height(src)); - gen6_render_flush(batch, batch_end); + gen6_render_flush(batch, context, batch_end); intel_batchbuffer_reset(batch); } diff --git a/lib/rendercopy_gen7.c b/lib/rendercopy_gen7.c index fdf741f..f6981c7 100644 --- a/lib/rendercopy_gen7.c +++ b/lib/rendercopy_gen7.c @@ -52,14 +52,15 @@ batch_copy(struct intel_batchbuffer *batch, const void *ptr, uint32_t size, uint } static void -gen7_render_flush(struct intel_batchbuffer *batch, uint32_t batch_end) +gen7_render_flush(struct intel_batchbuffer *batch, + drm_intel_context *context, uint32_t batch_end) { int ret; ret = drm_intel_bo_subdata(batch->bo, 0, 4096, batch->buffer); if (ret == 0) - ret = drm_intel_bo_mrb_exec(batch->bo, batch_end, - NULL, 0, 0, 0); + ret = drm_intel_gem_bo_context_exec(batch->bo, context, + batch_end, 0); assert(ret == 0); } @@ -513,13 +514,14 @@ gen7_emit_null_depth_buffer(struct intel_batchbuffer *batch) #define BATCH_STATE_SPLIT 2048 void gen7_render_copyfunc(struct intel_batchbuffer *batch, + drm_intel_context *context, struct scratch_buf *src, unsigned src_x, unsigned src_y, unsigned width, unsigned height, struct scratch_buf *dst, unsigned dst_x, unsigned dst_y) { uint32_t batch_end; - intel_batchbuffer_flush(batch); + intel_batchbuffer_flush_with_context(batch, context); batch->state = &batch->buffer[BATCH_STATE_SPLIT]; @@ -563,6 +565,6 @@ void gen7_render_copyfunc(struct intel_batchbuffer *batch, batch_end = ALIGN(batch_end, 8); assert(batch_end < BATCH_STATE_SPLIT); - gen7_render_flush(batch, batch_end); + gen7_render_flush(batch, context, batch_end); intel_batchbuffer_reset(batch); } diff --git a/lib/rendercopy_gen8.c b/lib/rendercopy_gen8.c index 660ff03..7089676 100644 --- a/lib/rendercopy_gen8.c +++ b/lib/rendercopy_gen8.c @@ -147,14 +147,15 @@ batch_copy(struct intel_batchbuffer *batch, const void *ptr, uint32_t size, uint } static void -gen6_render_flush(struct intel_batchbuffer *batch, uint32_t batch_end) +gen6_render_flush(struct intel_batchbuffer *batch, + drm_intel_context *context, uint32_t batch_end) { int ret; ret = drm_intel_bo_subdata(batch->bo, 0, 4096, batch->buffer); if (ret == 0) - ret = drm_intel_bo_mrb_exec(batch->bo, batch_end, - NULL, 0, 0, 0); + ret = drm_intel_gem_bo_context_exec(batch->bo, context, + batch_end, 0); assert(ret == 0); } @@ -848,6 +849,7 @@ static void gen8_emit_primitive(struct intel_batchbuffer *batch, uint32_t offset #define BATCH_STATE_SPLIT 2048 void gen8_render_copyfunc(struct intel_batchbuffer *batch, + drm_intel_context *context, struct scratch_buf *src, unsigned src_x, unsigned src_y, unsigned width, unsigned height, struct scratch_buf *dst, unsigned dst_x, unsigned dst_y) @@ -857,7 +859,7 @@ void gen8_render_copyfunc(struct intel_batchbuffer *batch, uint32_t vertex_buffer; uint32_t batch_end; - intel_batchbuffer_flush(batch); + intel_batchbuffer_flush_with_context(batch, context); batch_align(batch, 8); @@ -947,6 +949,6 @@ void gen8_render_copyfunc(struct intel_batchbuffer *batch, annotation_flush(&aub_annotations, batch); - gen6_render_flush(batch, batch_end); + gen6_render_flush(batch, context, batch_end); intel_batchbuffer_reset(batch); } diff --git a/lib/rendercopy_i830.c b/lib/rendercopy_i830.c index 0347597..73edcfa 100644 --- a/lib/rendercopy_i830.c +++ b/lib/rendercopy_i830.c @@ -191,6 +191,7 @@ static void gen2_emit_copy_pipeline(struct intel_batchbuffer *batch) } void gen2_render_copyfunc(struct intel_batchbuffer *batch, + drm_intel_context *context, struct scratch_buf *src, unsigned src_x, unsigned src_y, unsigned width, unsigned height, struct scratch_buf *dst, unsigned dst_x, unsigned dst_y) diff --git a/lib/rendercopy_i915.c b/lib/rendercopy_i915.c index 4b15dfe..33e027e 100644 --- a/lib/rendercopy_i915.c +++ b/lib/rendercopy_i915.c @@ -3,6 +3,7 @@ #include "rendercopy.h" void gen3_render_copyfunc(struct intel_batchbuffer *batch, + drm_intel_context *context, struct scratch_buf *src, unsigned src_x, unsigned src_y, unsigned width, unsigned height, struct scratch_buf *dst, unsigned dst_x, unsigned dst_y) diff --git a/tests/gem_ctx_basic.c b/tests/gem_ctx_basic.c index bc21a8a..a2b83df 100644 --- a/tests/gem_ctx_basic.c +++ b/tests/gem_ctx_basic.c @@ -84,7 +84,7 @@ static void *work(void *arg) if (uncontexted) { igt_assert(rendercopy); - rendercopy(batch, &src, 0, 0, 0, 0, &dst, 0, 0); + rendercopy(batch, NULL, &src, 0, 0, 0, 0, &dst, 0, 0); } else { int ret; ret = drm_intel_bo_subdata(batch->bo, 0, 4096, batch->buffer); diff --git a/tests/gem_render_copy.c b/tests/gem_render_copy.c index ed49622..6228595 100644 --- a/tests/gem_render_copy.c +++ b/tests/gem_render_copy.c @@ -156,7 +156,7 @@ int main(int argc, char **argv) drm_intel_bufmgr_gem_set_aub_dump(data.bufmgr, true); } - render_copy(batch, + render_copy(batch, NULL, &src, 0, 0, WIDTH, HEIGHT, &dst, WIDTH / 2, HEIGHT / 2); diff --git a/tests/gem_render_linear_blits.c b/tests/gem_render_linear_blits.c index f110753..4ae2103 100644 --- a/tests/gem_render_linear_blits.c +++ b/tests/gem_render_linear_blits.c @@ -128,7 +128,7 @@ int main(int argc, char **argv) dst.tiling = I915_TILING_NONE; dst.size = SIZE; - render_copy(batch, &src, 0, 0, WIDTH, HEIGHT, &dst, 0, 0); + render_copy(batch, NULL, &src, 0, 0, WIDTH, HEIGHT, &dst, 0, 0); start_val[(i + 1) % count] = start_val[i % count]; } for (i = 0; i < count; i++) @@ -151,7 +151,7 @@ int main(int argc, char **argv) dst.tiling = I915_TILING_NONE; dst.size = SIZE; - render_copy(batch, &src, 0, 0, WIDTH, HEIGHT, &dst, 0, 0); + render_copy(batch, NULL, &src, 0, 0, WIDTH, HEIGHT, &dst, 0, 0); start_val[i % count] = start_val[(i + 1) % count]; } for (i = 0; i < count; i++) @@ -176,7 +176,7 @@ int main(int argc, char **argv) dst.tiling = I915_TILING_NONE; dst.size = SIZE; - render_copy(batch, &src, 0, 0, WIDTH, HEIGHT, &dst, 0, 0); + render_copy(batch, NULL, &src, 0, 0, WIDTH, HEIGHT, &dst, 0, 0); start_val[d] = start_val[s]; } for (i = 0; i < count; i++) diff --git a/tests/gem_render_tiled_blits.c b/tests/gem_render_tiled_blits.c index d2af1e3..f8af236 100644 --- a/tests/gem_render_tiled_blits.c +++ b/tests/gem_render_tiled_blits.c @@ -130,7 +130,7 @@ int main(int argc, char **argv) int src = i % count; int dst = (i + 1) % count; - render_copy(batch, buf+src, 0, 0, WIDTH, HEIGHT, buf+dst, 0, 0); + render_copy(batch, NULL, buf+src, 0, 0, WIDTH, HEIGHT, buf+dst, 0, 0); start_val[dst] = start_val[src]; } for (i = 0; i < count; i++) @@ -141,7 +141,7 @@ int main(int argc, char **argv) int src = (i + 1) % count; int dst = i % count; - render_copy(batch, buf+src, 0, 0, WIDTH, HEIGHT, buf+dst, 0, 0); + render_copy(batch, NULL, buf+src, 0, 0, WIDTH, HEIGHT, buf+dst, 0, 0); start_val[dst] = start_val[src]; } for (i = 0; i < count; i++) @@ -155,7 +155,7 @@ int main(int argc, char **argv) if (src == dst) continue; - render_copy(batch, buf+src, 0, 0, WIDTH, HEIGHT, buf+dst, 0, 0); + render_copy(batch, NULL, buf+src, 0, 0, WIDTH, HEIGHT, buf+dst, 0, 0); start_val[dst] = start_val[src]; } for (i = 0; i < count; i++) diff --git a/tests/gem_ringfill.c b/tests/gem_ringfill.c index ba91001..31a21cb 100644 --- a/tests/gem_ringfill.c +++ b/tests/gem_ringfill.c @@ -159,9 +159,9 @@ static int check_ring(drm_intel_bufmgr *bufmgr, igt_assert(y < height); /* Dummy load to fill the ring */ - copy(batch, &src, 0, 0, width, height, &tmp, 0, 0); + copy(batch, NULL, &src, 0, 0, width, height, &tmp, 0, 0); /* And copy the src into dst, pixel by pixel */ - copy(batch, &src, x, y, 1, 1, &dst, x, y); + copy(batch, NULL, &src, x, y, 1, 1, &dst, x, y); } /* verify */ @@ -173,6 +173,7 @@ static int check_ring(drm_intel_bufmgr *bufmgr, } static void blt_copy(struct intel_batchbuffer *batch, + drm_intel_context *context, struct scratch_buf *src, unsigned src_x, unsigned src_y, unsigned w, unsigned h, struct scratch_buf *dst, unsigned dst_x, unsigned dst_y) diff --git a/tests/gem_seqno_wrap.c b/tests/gem_seqno_wrap.c index 8417008..2c6ffbe 100644 --- a/tests/gem_seqno_wrap.c +++ b/tests/gem_seqno_wrap.c @@ -148,7 +148,7 @@ static void render_copyfunc(struct scratch_buf *src, static int warned = 0; if (rendercopy) { - rendercopy(batch_3d, + rendercopy(batch_3d, NULL, src, src_x, src_y, width, height, dst, dst_x, dst_y); diff --git a/tests/gem_stress.c b/tests/gem_stress.c index b7fd87e..c01e92e 100644 --- a/tests/gem_stress.c +++ b/tests/gem_stress.c @@ -328,7 +328,7 @@ static void render_copyfunc(struct scratch_buf *src, unsigned src_x, unsigned sr keep_gpu_busy(); if (rendercopy) - rendercopy(batch, src, src_x, src_y, + rendercopy(batch, NULL, src, src_x, src_y, options.tile_size, options.tile_size, dst, dst_x, dst_y); else diff --git a/tests/kms_flip.c b/tests/kms_flip.c index daaed8e..e1a2e93 100644 --- a/tests/kms_flip.c +++ b/tests/kms_flip.c @@ -234,7 +234,7 @@ static void emit_dummy_load__rcs(struct test_output *o) for (i = 0; i < limit; i++) { struct scratch_buf *tmp; - copyfunc(batch, + copyfunc(batch, NULL, src, 0, 0, o->fb_width, o->fb_height, dst, 0, 0);