summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2016-10-14 16:26:25 -0700
committerEric Anholt <eric@anholt.net>2016-10-16 11:22:50 -0700
commitc61eb3c91cfcce48f5d0f0507123bdf107cb976b (patch)
treeedffcc169d990cbc5ce9c90dddfaa29231c9539a
parent46cd3bab933196f46521c9462552ed19d16817e6 (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.
-rw-r--r--src/gallium/drivers/vc4/vc4_draw.c19
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);
}