#include "xorg_composite.h" struct xorg_composite_blend { int op:8; unsigned rgb_src_factor:5; /**< PIPE_BLENDFACTOR_x */ unsigned rgb_dst_factor:5; /**< PIPE_BLENDFACTOR_x */ unsigned alpha_src_factor:5; /**< PIPE_BLENDFACTOR_x */ unsigned alpha_dst_factor:5; /**< PIPE_BLENDFACTOR_x */ }; static const struct xorg_composite_blend xorg_blends[] = { { PictOpClear, PIPE_BLENDFACTOR_CONST_COLOR, PIPE_BLENDFACTOR_CONST_ALPHA, PIPE_BLENDFACTOR_ZERO, PIPE_BLENDFACTOR_ZERO }, { PictOpSrc, PIPE_BLENDFACTOR_ONE, PIPE_BLENDFACTOR_ONE, PIPE_BLENDFACTOR_ZERO, PIPE_BLENDFACTOR_ZERO }, { PictOpDst, PIPE_BLENDFACTOR_ZERO, PIPE_BLENDFACTOR_ZERO, PIPE_BLENDFACTOR_ONE, PIPE_BLENDFACTOR_ONE }, { PictOpOver, PIPE_BLENDFACTOR_SRC_ALPHA, PIPE_BLENDFACTOR_ONE, PIPE_BLENDFACTOR_INV_SRC_ALPHA, PIPE_BLENDFACTOR_INV_SRC_ALPHA }, { PictOpOverReverse, PIPE_BLENDFACTOR_SRC_ALPHA, PIPE_BLENDFACTOR_ONE, PIPE_BLENDFACTOR_INV_SRC_ALPHA, PIPE_BLENDFACTOR_INV_SRC_ALPHA }, }; struct acceleration_info { int op : 16; int with_mask : 1; int component_alpha : 1; }; static const struct acceleration_info accelerated_ops[] = { {PictOpClear, 1, 0}, {PictOpSrc, 1, 0}, {PictOpDst, 1, 0}, {PictOpOver, 1, 0}, {PictOpOverReverse, 1, 0}, {PictOpIn, 1, 0}, {PictOpInReverse, 1, 0}, {PictOpOut, 1, 0}, {PictOpOutReverse, 1, 0}, {PictOpAtop, 1, 0}, {PictOpAtopReverse, 1, 0}, {PictOpXor, 1, 0}, {PictOpAdd, 1, 0}, {PictOpSaturate, 1, 0}, }; static void draw_texture(struct exa_context *exa) { #if 0 if (buf) { util_draw_vertex_buffer(pipe, buf, 0, PIPE_PRIM_TRIANGLE_FAN, 4, /* verts */ 2); /* attribs/vert */ pipe_buffer_reference(&buf, NULL); } #endif } boolean xorg_composite_accelerated(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture, PicturePtr pDstPicture) { unsigned i; unsigned accel_ops_count = sizeof(accelerated_ops)/sizeof(struct acceleration_info); if (pSrcPicture) { /* component alpha not supported */ if (pSrcPicture->componentAlpha) return FALSE; /* fills not supported */ if (pSrcPicture->pSourcePict) return FALSE; } for (i = 0; i < accel_ops_count; ++i) { if (op == accelerated_ops[i].op) { if (pMaskPicture && !accelerated_ops[i].with_mask) return FALSE; return TRUE; } } return FALSE; } boolean xorg_composite_bind_state(struct exa_context *exa, int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture, PicturePtr pDstPicture) { return FALSE; } void xorg_composite(struct exa_context *exa, struct exa_pixmap_priv *dst, int srcX, int srcY, int maskX, int maskY, int dstX, int dstY, int width, int height) { }