diff options
author | Maarten Lankhorst <maarten.lankhorst@linux.intel.com> | 2018-11-16 16:33:25 +0100 |
---|---|---|
committer | Maarten Lankhorst <maarten.lankhorst@linux.intel.com> | 2018-11-20 17:37:11 +0100 |
commit | 239bca3cbd3d3c6194d42edf2acd5761f05ba75a (patch) | |
tree | ffe1b0c2bb3fb509e5f7b412c756295cb0423a19 /lib/rendercopy_gen7.c | |
parent | 10c983077a782ff9d02b6e5c47281039830fe6fb (diff) |
lib/rendercopy: Implement support for 8/16 bpp
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 <maarten.lankhorst@linux.intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
[mlankhorst: Add assert(src->bpp == dst->bpp)]
Diffstat (limited to 'lib/rendercopy_gen7.c')
-rw-r--r-- | lib/rendercopy_gen7.c | 17 |
1 files changed, 11 insertions, 6 deletions
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]; |