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_gen9.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_gen9.c')
-rw-r--r-- | lib/rendercopy_gen9.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/lib/rendercopy_gen9.c b/lib/rendercopy_gen9.c index adbd8124..e3d95a68 100644 --- a/lib/rendercopy_gen9.c +++ b/lib/rendercopy_gen9.c @@ -175,7 +175,7 @@ gen6_render_flush(struct intel_batchbuffer *batch, /* Mostly copy+paste from gen6, except height, width, pitch moved */ static uint32_t gen8_bind_buf(struct intel_batchbuffer *batch, const struct igt_buf *buf, - uint32_t format, int is_dst) { + int is_dst) { struct gen8_surface_state *ss; uint32_t write_domain, read_domain, offset; int ret; @@ -193,7 +193,12 @@ gen8_bind_buf(struct intel_batchbuffer *batch, const struct igt_buf *buf, offset, sizeof(*ss)); ss->ss0.surface_type = SURFACE_2D; - ss->ss0.surface_format = format; + switch (buf->bpp) { + case 8: ss->ss0.surface_format = SURFACEFORMAT_R8_UNORM; break; + case 16: ss->ss0.surface_format = SURFACEFORMAT_R8G8_UNORM; break; + case 32: ss->ss0.surface_format = SURFACEFORMAT_B8G8R8A8_UNORM; break; + default: igt_assert(0); + } ss->ss0.render_cache_read_write = 1; ss->ss0.vertical_alignment = 1; /* align 4 */ ss->ss0.horizontal_alignment = 1; /* align 4 */ @@ -249,10 +254,8 @@ gen8_bind_surfaces(struct intel_batchbuffer *batch, annotation_add_state(&aub_annotations, AUB_TRACE_BINDING_TABLE, offset, 8); - binding_table[0] = - gen8_bind_buf(batch, dst, SURFACEFORMAT_B8G8R8A8_UNORM, 1); - binding_table[1] = - gen8_bind_buf(batch, src, SURFACEFORMAT_B8G8R8A8_UNORM, 0); + binding_table[0] = gen8_bind_buf(batch, dst, 1); + binding_table[1] = gen8_bind_buf(batch, src, 0); return offset; } @@ -952,6 +955,7 @@ void _gen9_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); intel_batchbuffer_align(batch, 8); |