From: Kenneth Graunke Date: Mon, 28 Aug 2017 22:57:20 +0000 (-0700) Subject: i965: Add a brw_blorp_copy_buffers() command. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=225425111fee082e3be14c22c256314b85724ef8;p=mesa.git i965: Add a brw_blorp_copy_buffers() command. This exposes the new blorp_copy_buffer() functionality to i965. It should be a drop-in replacement for intel_emit_linear_blit() (other than the arguments being backwards, for consistency with BLORP). Reviewed-by: Jason Ekstrand --- diff --git a/src/mesa/drivers/dri/i965/brw_blorp.c b/src/mesa/drivers/dri/i965/brw_blorp.c index 277ffda4fd5..4c6ae369196 100644 --- a/src/mesa/drivers/dri/i965/brw_blorp.c +++ b/src/mesa/drivers/dri/i965/brw_blorp.c @@ -434,6 +434,27 @@ brw_blorp_copy_miptrees(struct brw_context *brw, dst_aux_usage); } +void +brw_blorp_copy_buffers(struct brw_context *brw, + struct brw_bo *src_bo, + unsigned src_offset, + struct brw_bo *dst_bo, + unsigned dst_offset, + unsigned size) +{ + DBG("%s %d bytes from %p[%d] to %p[%d]", + __func__, size, src_bo, src_offset, dst_bo, dst_offset); + + struct blorp_batch batch; + struct blorp_address src = { .buffer = src_bo, .offset = src_offset }; + struct blorp_address dst = { .buffer = dst_bo, .offset = dst_offset }; + + blorp_batch_init(&brw->blorp, &batch, brw, 0); + blorp_buffer_copy(&batch, src, dst, size); + blorp_batch_finish(&batch); +} + + static struct intel_mipmap_tree * find_miptree(GLbitfield buffer_bit, struct intel_renderbuffer *irb) { diff --git a/src/mesa/drivers/dri/i965/brw_blorp.h b/src/mesa/drivers/dri/i965/brw_blorp.h index c65a68a53d3..cf781ec53cb 100644 --- a/src/mesa/drivers/dri/i965/brw_blorp.h +++ b/src/mesa/drivers/dri/i965/brw_blorp.h @@ -59,6 +59,14 @@ brw_blorp_copy_miptrees(struct brw_context *brw, unsigned dst_x, unsigned dst_y, unsigned src_width, unsigned src_height); +void +brw_blorp_copy_buffers(struct brw_context *brw, + struct brw_bo *src_bo, + unsigned src_offset, + struct brw_bo *dst_bo, + unsigned dst_offset, + unsigned size); + void brw_blorp_clear_color(struct brw_context *brw, struct gl_framebuffer *fb, GLbitfield mask, bool partial_clear, bool encode_srgb);