Mesa (master): freedreno/a4xx: alpha blend fixes
Rob Clark
robclark at kemper.freedesktop.org
Tue Dec 2 01:32:06 UTC 2014
Module: Mesa
Branch: master
Commit: 036f434ac2dfed6ff730a1bd8f74eafd95bcad4e
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=036f434ac2dfed6ff730a1bd8f74eafd95bcad4e
Author: Rob Clark <robclark at freedesktop.org>
Date: Mon Dec 1 18:20:48 2014 -0500
freedreno/a4xx: alpha blend fixes
Signed-off-by: Rob Clark <robclark at freedesktop.org>
---
src/gallium/drivers/freedreno/a4xx/fd4_blend.c | 4 +++-
src/gallium/drivers/freedreno/a4xx/fd4_blend.h | 1 +
src/gallium/drivers/freedreno/a4xx/fd4_emit.c | 7 +++++++
3 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_blend.c b/src/gallium/drivers/freedreno/a4xx/fd4_blend.c
index f569e93..bf2254a 100644
--- a/src/gallium/drivers/freedreno/a4xx/fd4_blend.c
+++ b/src/gallium/drivers/freedreno/a4xx/fd4_blend.c
@@ -110,11 +110,13 @@ fd4_blend_state_create(struct pipe_context *pctx,
0xc00 | /* XXX ROP_CODE ?? */
A4XX_RB_MRT_CONTROL_COMPONENT_ENABLE(rt->colormask);
- if (rt->blend_enable)
+ if (rt->blend_enable) {
so->rb_mrt[i].control |=
A4XX_RB_MRT_CONTROL_READ_DEST_ENABLE |
A4XX_RB_MRT_CONTROL_BLEND |
A4XX_RB_MRT_CONTROL_BLEND2;
+ so->rb_fs_output |= A4XX_RB_FS_OUTPUT_ENABLE_BLEND;
+ }
if (reads_dest)
so->rb_mrt[i].control |= A4XX_RB_MRT_CONTROL_READ_DEST_ENABLE;
diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_blend.h b/src/gallium/drivers/freedreno/a4xx/fd4_blend.h
index 68fcf23..33641da 100644
--- a/src/gallium/drivers/freedreno/a4xx/fd4_blend.h
+++ b/src/gallium/drivers/freedreno/a4xx/fd4_blend.h
@@ -39,6 +39,7 @@ struct fd4_blend_stateobj {
uint32_t buf_info;
uint32_t blend_control;
} rb_mrt[8];
+ uint32_t rb_fs_output;
};
static INLINE struct fd4_blend_stateobj *
diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_emit.c b/src/gallium/drivers/freedreno/a4xx/fd4_emit.c
index 44a824a..56ac0d1 100644
--- a/src/gallium/drivers/freedreno/a4xx/fd4_emit.c
+++ b/src/gallium/drivers/freedreno/a4xx/fd4_emit.c
@@ -367,6 +367,9 @@ fd4_emit_state(struct fd_context *ctx, struct fd_ringbuffer *ring,
OUT_PKT0(ring, REG_A4XX_GRAS_ALPHA_CONTROL, 1);
OUT_RING(ring, zsa->gras_alpha_control);
+ OUT_PKT0(ring, REG_A4XX_RB_ALPHA_CONTROL, 1);
+ OUT_RING(ring, zsa->rb_alpha_control);
+
OUT_PKT0(ring, REG_A4XX_RB_STENCIL_CONTROL, 2);
OUT_RING(ring, zsa->rb_stencil_control);
OUT_RING(ring, zsa->rb_stencil_control2);
@@ -486,6 +489,10 @@ fd4_emit_state(struct fd_context *ctx, struct fd_ringbuffer *ring,
OUT_PKT0(ring, REG_A4XX_RB_MRT_BLEND_CONTROL(i), 1);
OUT_RING(ring, blend->rb_mrt[i].blend_control);
}
+
+ OUT_PKT0(ring, REG_A4XX_RB_FS_OUTPUT, 1);
+ OUT_RING(ring, blend->rb_fs_output |
+ A4XX_RB_FS_OUTPUT_SAMPLE_MASK(0xffff));
}
if (dirty & FD_DIRTY_VERTTEX) {
More information about the mesa-commit
mailing list