/* * Copyright © 2013 Raspberry Pi Foundation * Copyright © 2013 RISC OS Open Ltd * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the copyright holders not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. The copyright holders make no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * */ #ifndef BITBLTDISPATCH_H_ #define BITBLTDISPATCH_H_ #include #include "sqVirtualMachine.h" #ifndef ColorMapPresent #define ColorMapPresent 1 #define ColorMapFixedPart 2 #define ColorMapIndexedPart 4 #endif typedef enum { CR_clearWord, /* 0 */ CR_bitAnd, /* 1 */ CR_bitAndInvert, /* 2 */ CR_sourceWord, /* 3 */ CR_bitInvertAnd, /* 4 */ CR_destinationWord, /* 5 */ CR_bitXor, /* 6 */ CR_bitOr, /* 7 */ CR_bitInvertAndInvert, /* 8 */ CR_bitInvertXor, /* 9 */ CR_bitInvertDestination, /* 10 */ CR_bitOrInvert, /* 11 */ CR_bitInvertSource, /* 12 */ CR_bitInvertOr, /* 13 */ CR_bitInvertOrInvert, /* 14 */ CR_destinationWord_alt1, /* 15 */ CR_destinationWord_alt2, /* 16 */ CR_destinationWord_alt3, /* 17 */ CR_addWord, /* 18 */ CR_subWord, /* 19 */ CR_rgbAdd, /* 20 */ CR_rgbSub, /* 21 */ CR_OLDrgbDiff, /* 22 */ CR_OLDtallyIntoMap, /* 23 */ CR_alphaBlend, /* 24 */ CR_pixPaint, /* 25 */ CR_pixMask, /* 26 */ CR_rgbMax, /* 27 */ CR_rgbMin, /* 28 */ CR_rgbMinInvert, /* 29 */ CR_alphaBlendConst, /* 30 */ CR_alphaPaintConst, /* 31 */ CR_rgbDiff, /* 32 */ CR_tallyIntoMap, /* 33 */ CR_alphaBlendScaled, /* 34 */ CR_alphaBlendScaled_alt1, /* 35 */ CR_alphaBlendScaled_alt2, /* 36 */ CR_rgbMul, /* 37 */ CR_pixSwap, /* 38 */ CR_pixClear, /* 39 */ CR_fixAlpha, /* 40 */ CR_rgbComponentAlpha, /* 41 */ CR_any = -1u } combination_rule_t; typedef struct { void *bits; usqInt depth; usqInt pitch; bool msb; sqInt x; sqInt y; } src_or_dest_t; typedef struct { combination_rule_t combinationRule; bool noSource; src_or_dest_t src; src_or_dest_t dest; usqInt width; usqInt height; sqInt cmFlags; int (*cmShiftTable)[4]; unsigned int (*cmMaskTable)[4]; usqInt cmMask; unsigned int (*cmLookupTable)[]; bool noHalftone; usqInt halftoneHeight; sqInt (*halftoneBase)[]; union { sqInt sourceAlpha; struct { sqInt componentAlphaModeColor; sqInt componentAlphaModeAlpha; unsigned char (*gammaLookupTable)[256]; unsigned char (*ungammaLookupTable)[256]; } componentAlpha; } opt; } operation_t; void initialiseCopyBits(void); void copyBitsDispatch(operation_t *op); #endif /* BITBLTDISPATCH_H_ */