From 725da6ee7458c5227a2bc9a1b686dad8f3c6d854 Mon Sep 17 00:00:00 2001 From: Ville Syrjälä Date: Thu, 21 Nov 2013 19:05:17 +0200 Subject: rendercopy: Pass context to rendercopy functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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ä --- lib/rendercopy.h | 6 ++++++ lib/rendercopy_gen6.c | 12 +++++++----- lib/rendercopy_gen7.c | 12 +++++++----- lib/rendercopy_gen8.c | 12 +++++++----- lib/rendercopy_i830.c | 1 + lib/rendercopy_i915.c | 1 + tests/gem_ctx_basic.c | 2 +- tests/gem_render_copy.c | 2 +- tests/gem_render_linear_blits.c | 6 +++--- tests/gem_render_tiled_blits.c | 6 +++--- tests/gem_ringfill.c | 5 +++-- tests/gem_seqno_wrap.c | 2 +- tests/gem_stress.c | 2 +- tests/kms_flip.c | 2 +- 14 files changed, 43 insertions(+), 28 deletions(-) diff --git a/lib/rendercopy.h b/lib/rendercopy.h index f726df6f..6312cc32 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 dafee88a..457cb354 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 fdf741ff..f6981c7d 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 660ff030..70896760 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 0347597f..73edcfa5 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 4b15dfe3..33e027e0 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 bc21a8a3..a2b83dfd 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 ed496226..62285956 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 f1107535..4ae2103b 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 d2af1e33..f8af2368 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 ba910014..31a21cbb 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 84170089..2c6ffbe3 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 b7fd87ed..c01e92eb 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 daaed8ea..e1a2e937 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); -- cgit v1.2.3