From 239bca3cbd3d3c6194d42edf2acd5761f05ba75a Mon Sep 17 00:00:00 2001 From: Maarten Lankhorst Date: Fri, 16 Nov 2018 16:33:25 +0100 Subject: lib/rendercopy: Implement support for 8/16 bpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To handle drawing 16 bpp formats correctly with odd x/w, we need to use the correct bpp to rendercopy. Now that everything sets bpp in igt_buf, fix the rendercopy support to use it and set the correct format. Signed-off-by: Maarten Lankhorst Reviewed-by: Ville Syrjälä [mlankhorst: Add assert(src->bpp == dst->bpp)] --- lib/rendercopy_gen7.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'lib/rendercopy_gen7.c') diff --git a/lib/rendercopy_gen7.c b/lib/rendercopy_gen7.c index 9ad619d8..a790217c 100644 --- a/lib/rendercopy_gen7.c +++ b/lib/rendercopy_gen7.c @@ -59,13 +59,19 @@ gen7_tiling_bits(uint32_t tiling) static uint32_t gen7_bind_buf(struct intel_batchbuffer *batch, const struct igt_buf *buf, - uint32_t format, int is_dst) { - uint32_t *ss; + uint32_t format, *ss; uint32_t write_domain, read_domain; int ret; + switch (buf->bpp) { + case 8: format = SURFACEFORMAT_R8_UNORM; break; + case 16: format = SURFACEFORMAT_R8G8_UNORM; break; + case 32: format = SURFACEFORMAT_B8G8R8A8_UNORM; break; + default: igt_assert(0); + } + if (is_dst) { write_domain = read_domain = I915_GEM_DOMAIN_RENDER; } else { @@ -186,10 +192,8 @@ gen7_bind_surfaces(struct intel_batchbuffer *batch, binding_table = intel_batchbuffer_subdata_alloc(batch, 8, 32); - binding_table[0] = - gen7_bind_buf(batch, dst, SURFACEFORMAT_B8G8R8A8_UNORM, 1); - binding_table[1] = - gen7_bind_buf(batch, src, SURFACEFORMAT_B8G8R8A8_UNORM, 0); + binding_table[0] = gen7_bind_buf(batch, dst, 1); + binding_table[1] = gen7_bind_buf(batch, src, 0); return intel_batchbuffer_subdata_offset(batch, binding_table); } @@ -501,6 +505,7 @@ void gen7_render_copyfunc(struct intel_batchbuffer *batch, uint32_t vertex_buffer; uint32_t batch_end; + igt_assert(src->bpp == dst->bpp); intel_batchbuffer_flush_with_context(batch, context); batch->ptr = &batch->buffer[BATCH_STATE_SPLIT]; -- cgit v1.2.3