diff options
author | Rob Clark <[email protected]> | 2014-05-21 16:51:12 -0400 |
---|---|---|
committer | Rob Clark <[email protected]> | 2014-05-21 17:29:13 -0400 |
commit | a4d229b0992806f759ab4c71fc5712e8ab2e1c9d (patch) | |
tree | a65b45859ad9a57435bf2978b87f737edea6160b /src/gallium/drivers/freedreno/a3xx/fd3_blend.c | |
parent | 5a40a0008961ff3172f78d1a61bf3516680100e1 (diff) |
freedreno/a3xx: fix blend opcode
Seems the opcodes are slightly different from a2xx. Resync headers and
move blend_func() helper into hw generation specific code.
Signed-off-by: Rob Clark <[email protected]>
Diffstat (limited to 'src/gallium/drivers/freedreno/a3xx/fd3_blend.c')
-rw-r--r-- | src/gallium/drivers/freedreno/a3xx/fd3_blend.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/gallium/drivers/freedreno/a3xx/fd3_blend.c b/src/gallium/drivers/freedreno/a3xx/fd3_blend.c index 71cdc121852..f97b1a7eec3 100644 --- a/src/gallium/drivers/freedreno/a3xx/fd3_blend.c +++ b/src/gallium/drivers/freedreno/a3xx/fd3_blend.c @@ -34,6 +34,27 @@ #include "fd3_context.h" #include "fd3_util.h" + +static enum a3xx_rb_blend_opcode +blend_func(unsigned func) +{ + switch (func) { + case PIPE_BLEND_ADD: + return BLEND_DST_PLUS_SRC; + case PIPE_BLEND_MIN: + return BLEND_MIN_DST_SRC; + case PIPE_BLEND_MAX: + return BLEND_MAX_DST_SRC; + case PIPE_BLEND_SUBTRACT: + return BLEND_SRC_MINUS_DST; + case PIPE_BLEND_REVERSE_SUBTRACT: + return BLEND_DST_MINUS_SRC; + default: + DBG("invalid blend func: %x", func); + return 0; + } +} + void * fd3_blend_state_create(struct pipe_context *pctx, const struct pipe_blend_state *cso) @@ -80,10 +101,10 @@ fd3_blend_state_create(struct pipe_context *pctx, so->rb_mrt[i].blend_control = A3XX_RB_MRT_BLEND_CONTROL_RGB_SRC_FACTOR(fd_blend_factor(rt->rgb_src_factor)) | - A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE(fd_blend_func(rt->rgb_func)) | + A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE(blend_func(rt->rgb_func)) | A3XX_RB_MRT_BLEND_CONTROL_RGB_DEST_FACTOR(fd_blend_factor(rt->rgb_dst_factor)) | A3XX_RB_MRT_BLEND_CONTROL_ALPHA_SRC_FACTOR(fd_blend_factor(rt->alpha_src_factor)) | - A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE(fd_blend_func(rt->alpha_func)) | + A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE(blend_func(rt->alpha_func)) | A3XX_RB_MRT_BLEND_CONTROL_ALPHA_DEST_FACTOR(fd_blend_factor(rt->alpha_dst_factor)) | A3XX_RB_MRT_BLEND_CONTROL_CLAMP_ENABLE; |