diff options
author | Michel Dänzer <[email protected]> | 2009-09-25 20:38:49 +0200 |
---|---|---|
committer | Michel Dänzer <[email protected]> | 2009-09-25 20:38:49 +0200 |
commit | 07f107467ed1e301b1362298c350ff3758a1f22f (patch) | |
tree | 15686faf48530965e7afe53e68275a215bdbe67d | |
parent | 69c7fc128c59bf72df461dbd583bf9794d9ed34d (diff) |
st/xorg: Better checks for unsupported component alpha pictures.
-rw-r--r-- | src/gallium/state_trackers/xorg/xorg_composite.c | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/src/gallium/state_trackers/xorg/xorg_composite.c b/src/gallium/state_trackers/xorg/xorg_composite.c index f8a3d7ba8aa..1bfcc288665 100644 --- a/src/gallium/state_trackers/xorg/xorg_composite.c +++ b/src/gallium/state_trackers/xorg/xorg_composite.c @@ -305,15 +305,15 @@ boolean xorg_composite_accelerated(int op, unsigned accel_ops_count = sizeof(accelerated_ops)/sizeof(struct acceleration_info); - if (pSrcPicture) { - /* component alpha not supported */ - if (pSrcPicture->componentAlpha) - return FALSE; - } - for (i = 0; i < accel_ops_count; ++i) { if (op == accelerated_ops[i].op) { - if (pMaskPicture && !accelerated_ops[i].with_mask) + /* Check for unsupported component alpha */ + if ((pSrcPicture->componentAlpha && + !accelerated_ops[i].component_alpha) || + (pMaskPicture && + (!accelerated_ops[i].with_mask || + (pMaskPicture->componentAlpha && + !accelerated_ops[i].component_alpha)))) return FALSE; return TRUE; } @@ -390,14 +390,9 @@ static void bind_blend_state(struct exa_context *exa, int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture) { - boolean component_alpha = (pSrcPicture) ? - pSrcPicture->componentAlpha : FALSE; struct xorg_composite_blend blend_opt; struct pipe_blend_state blend; - if (component_alpha) { - op = PictOpOver; - } blend_opt = blend_for_op(op); memset(&blend, 0, sizeof(struct pipe_blend_state)); |