diff options
author | Eric Anholt <[email protected]> | 2016-10-14 16:26:25 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2016-10-16 11:22:50 -0700 |
commit | c61eb3c91cfcce48f5d0f0507123bdf107cb976b (patch) | |
tree | edffcc169d990cbc5ce9c90dddfaa29231c9539a /src/gallium/drivers/vc4 | |
parent | 46cd3bab933196f46521c9462552ed19d16817e6 (diff) |
vc4: Fix fast clear color packing for 565.
Piglit didn't manage to cover this because fbo-clear-formats uses
scissors, so we don't get fast clearing.
Diffstat (limited to 'src/gallium/drivers/vc4')
-rw-r--r-- | src/gallium/drivers/vc4/vc4_draw.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/gallium/drivers/vc4/vc4_draw.c b/src/gallium/drivers/vc4/vc4_draw.c index f44831f1e43..61c58424cdf 100644 --- a/src/gallium/drivers/vc4/vc4_draw.c +++ b/src/gallium/drivers/vc4/vc4_draw.c @@ -496,10 +496,23 @@ vc4_clear(struct pipe_context *pctx, unsigned buffers, if (buffers & PIPE_CLEAR_COLOR0) { struct vc4_resource *rsc = vc4_resource(vc4->framebuffer.cbufs[0]->texture); + uint32_t clear_color; - job->clear_color[0] = job->clear_color[1] = - pack_rgba(vc4->framebuffer.cbufs[0]->format, - color->f); + if (vc4_rt_format_is_565(vc4->framebuffer.cbufs[0]->format)) { + /* In 565 mode, the hardware will be packing our color + * for us. + */ + clear_color = pack_rgba(PIPE_FORMAT_R8G8B8A8_UNORM, + color->f); + } else { + /* Otherwise, we need to do this packing because we + * support multiple swizzlings of RGBA8888. + */ + clear_color = + pack_rgba(vc4->framebuffer.cbufs[0]->format, + color->f); + } + job->clear_color[0] = job->clear_color[1] = clear_color; rsc->initialized_buffers |= (buffers & PIPE_CLEAR_COLOR0); } |