Mercurial > sdl-ios-xcode
annotate src/video/SDL_blit.h @ 2938:2929ed239d2a
Adjusted default choice of audio driver.
If a driver can definitely see available devices, it is chosen. Otherwise,
we'll take the first driver that initializes but saw no devices...this might
be because it can't enumerate them, or there really aren't any available.
This prevents the dsp driver from hogging control when there are no /dev/dsp*
nodes (for example, on a Linux box with ALSA and no OSS emulation).
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Thu, 01 Jan 2009 07:54:58 +0000 |
parents | a0c837a16e4c |
children | ff602fdfdedc |
rev | line source |
---|---|
0 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
2859 | 3 Copyright (C) 1997-2009 Sam Lantinga |
0 | 4 |
5 This library is free software; you can redistribute it and/or | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1162
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
0 | 7 License as published by the Free Software Foundation; either |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1162
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
0 | 9 |
10 This library is distributed in the hope that it will be useful, | |
11 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1162
diff
changeset
|
13 Lesser General Public License for more details. |
0 | 14 |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1162
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1162
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1162
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
0 | 18 |
19 Sam Lantinga | |
252
e8157fcb3114
Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents:
163
diff
changeset
|
20 slouken@libsdl.org |
0 | 21 */ |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
22 #include "SDL_config.h" |
0 | 23 |
24 #ifndef _SDL_blit_h | |
25 #define _SDL_blit_h | |
26 | |
2249
5a58b57b6724
Added SSE and MMX optimization for SDL_FillRect()
Sam Lantinga <slouken@libsdl.org>
parents:
2247
diff
changeset
|
27 #ifdef __MMX__ |
5a58b57b6724
Added SSE and MMX optimization for SDL_FillRect()
Sam Lantinga <slouken@libsdl.org>
parents:
2247
diff
changeset
|
28 #include <mmintrin.h> |
5a58b57b6724
Added SSE and MMX optimization for SDL_FillRect()
Sam Lantinga <slouken@libsdl.org>
parents:
2247
diff
changeset
|
29 #endif |
2261
c20476d7d7b3
Enabled 3DNow! intrinsic support
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
30 #ifdef __3dNOW__ |
c20476d7d7b3
Enabled 3DNow! intrinsic support
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
31 #include <mm3dnow.h> |
c20476d7d7b3
Enabled 3DNow! intrinsic support
Sam Lantinga <slouken@libsdl.org>
parents:
2260
diff
changeset
|
32 #endif |
2249
5a58b57b6724
Added SSE and MMX optimization for SDL_FillRect()
Sam Lantinga <slouken@libsdl.org>
parents:
2247
diff
changeset
|
33 #ifdef __SSE__ |
5a58b57b6724
Added SSE and MMX optimization for SDL_FillRect()
Sam Lantinga <slouken@libsdl.org>
parents:
2247
diff
changeset
|
34 #include <xmmintrin.h> |
5a58b57b6724
Added SSE and MMX optimization for SDL_FillRect()
Sam Lantinga <slouken@libsdl.org>
parents:
2247
diff
changeset
|
35 #endif |
2262
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
36 #ifdef __SSE2__ |
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
37 #include <emmintrin.h> |
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
38 #endif |
2249
5a58b57b6724
Added SSE and MMX optimization for SDL_FillRect()
Sam Lantinga <slouken@libsdl.org>
parents:
2247
diff
changeset
|
39 |
2250
e1d228456537
Fixed a few compiler warnings.
Sam Lantinga <slouken@libsdl.org>
parents:
2249
diff
changeset
|
40 #include "SDL_cpuinfo.h" |
0 | 41 #include "SDL_endian.h" |
2898
e40448bc7727
Share code between fill and line drawing
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
42 #include "SDL_video.h" |
0 | 43 |
2262
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
44 /* SDL blit copy flags */ |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2263
diff
changeset
|
45 #define SDL_COPY_MODULATE_COLOR 0x00000001 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2263
diff
changeset
|
46 #define SDL_COPY_MODULATE_ALPHA 0x00000002 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2263
diff
changeset
|
47 #define SDL_COPY_MASK 0x00000010 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2263
diff
changeset
|
48 #define SDL_COPY_BLEND 0x00000020 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2263
diff
changeset
|
49 #define SDL_COPY_ADD 0x00000040 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2263
diff
changeset
|
50 #define SDL_COPY_MOD 0x00000080 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2263
diff
changeset
|
51 #define SDL_COPY_COLORKEY 0x00000100 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2263
diff
changeset
|
52 #define SDL_COPY_NEAREST 0x00000200 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2263
diff
changeset
|
53 #define SDL_COPY_RLE_DESIRED 0x00001000 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2263
diff
changeset
|
54 #define SDL_COPY_RLE_COLORKEY 0x00002000 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2263
diff
changeset
|
55 #define SDL_COPY_RLE_ALPHAKEY 0x00004000 |
2853
6258fa7cd300
Fixed picking blit function when RLE fails
Sam Lantinga <slouken@libsdl.org>
parents:
2824
diff
changeset
|
56 #define SDL_COPY_RLE_MASK (SDL_COPY_RLE_DESIRED|SDL_COPY_RLE_COLORKEY|SDL_COPY_RLE_ALPHAKEY) |
2262
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
57 |
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
58 /* SDL blit CPU flags */ |
2266
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2263
diff
changeset
|
59 #define SDL_CPU_ANY 0x00000000 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2263
diff
changeset
|
60 #define SDL_CPU_MMX 0x00000001 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2263
diff
changeset
|
61 #define SDL_CPU_3DNOW 0x00000002 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2263
diff
changeset
|
62 #define SDL_CPU_SSE 0x00000004 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2263
diff
changeset
|
63 #define SDL_CPU_SSE2 0x00000008 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2263
diff
changeset
|
64 #define SDL_CPU_ALTIVEC_PREFETCH 0x00000010 |
e61ad15a205f
More work in progress integrating SDL_Surface and the new SDL_Texture API
Sam Lantinga <slouken@libsdl.org>
parents:
2263
diff
changeset
|
65 #define SDL_CPU_ALTIVEC_NOPREFETCH 0x00000020 |
2262
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
66 |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
67 typedef struct |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
68 { |
2262
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
69 Uint8 *src; |
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
70 int src_w, src_h; |
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
71 int src_pitch; |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
72 int src_skip; |
2262
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
73 Uint8 *dst; |
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
74 int dst_w, dst_h; |
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
75 int dst_pitch; |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
76 int dst_skip; |
2262
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
77 SDL_PixelFormat *src_fmt; |
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
78 SDL_PixelFormat *dst_fmt; |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
79 Uint8 *table; |
2262
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
80 int flags; |
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
81 Uint32 colorkey; |
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
82 Uint8 r, g, b, a; |
0 | 83 } SDL_BlitInfo; |
84 | |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
85 typedef void (SDLCALL * SDL_BlitFunc) (SDL_BlitInfo * info); |
2262
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
86 |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
87 typedef struct |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
88 { |
2262
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
89 Uint32 src_format; |
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
90 Uint32 dst_format; |
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
91 int flags; |
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
92 int cpu; |
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
93 SDL_BlitFunc func; |
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
94 } SDL_BlitFuncEntry; |
0 | 95 |
96 /* Blit mapping definition */ | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
97 typedef struct SDL_BlitMap |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
98 { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
99 SDL_Surface *dst; |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
100 int identity; |
2257
340942cfda48
Moved the colorkey and per-surface alpha into the blit info,
Sam Lantinga <slouken@libsdl.org>
parents:
2251
diff
changeset
|
101 SDL_blit blit; |
340942cfda48
Moved the colorkey and per-surface alpha into the blit info,
Sam Lantinga <slouken@libsdl.org>
parents:
2251
diff
changeset
|
102 void *data; |
2262
bee005ace1bf
Work in progress: merging new texture features into SDL blit system
Sam Lantinga <slouken@libsdl.org>
parents:
2261
diff
changeset
|
103 SDL_BlitInfo info; |
0 | 104 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
105 /* the version count matches the destination; mismatch indicates |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
106 an invalid mapping */ |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
107 unsigned int format_version; |
0 | 108 } SDL_BlitMap; |
109 | |
110 /* Functions found in SDL_blit.c */ | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
111 extern int SDL_CalculateBlit(SDL_Surface * surface); |
0 | 112 |
2267
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
113 /* Functions found in SDL_blit_*.c */ |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
114 extern SDL_BlitFunc SDL_CalculateBlit0(SDL_Surface * surface); |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
115 extern SDL_BlitFunc SDL_CalculateBlit1(SDL_Surface * surface); |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
116 extern SDL_BlitFunc SDL_CalculateBlitN(SDL_Surface * surface); |
c785543d1843
Okay, still some bugs, but everything builds again...
Sam Lantinga <slouken@libsdl.org>
parents:
2266
diff
changeset
|
117 extern SDL_BlitFunc SDL_CalculateBlitA(SDL_Surface * surface); |
2263
900c35d8e8fd
More work in progress, still doesn't compile...
Sam Lantinga <slouken@libsdl.org>
parents:
2262
diff
changeset
|
118 |
0 | 119 /* |
120 * Useful macros for blitting routines | |
121 */ | |
122 | |
2249
5a58b57b6724
Added SSE and MMX optimization for SDL_FillRect()
Sam Lantinga <slouken@libsdl.org>
parents:
2247
diff
changeset
|
123 #if defined(__GNUC__) |
5a58b57b6724
Added SSE and MMX optimization for SDL_FillRect()
Sam Lantinga <slouken@libsdl.org>
parents:
2247
diff
changeset
|
124 #define DECLARE_ALIGNED(t,v,a) t __attribute__((aligned(a))) v |
5a58b57b6724
Added SSE and MMX optimization for SDL_FillRect()
Sam Lantinga <slouken@libsdl.org>
parents:
2247
diff
changeset
|
125 #elif defined(_MSC_VER) |
2251
292bee385630
SSE and MMX intrinsics work with Visual Studio now...
Sam Lantinga <slouken@libsdl.org>
parents:
2250
diff
changeset
|
126 #define DECLARE_ALIGNED(t,v,a) __declspec(align(a)) t v |
2249
5a58b57b6724
Added SSE and MMX optimization for SDL_FillRect()
Sam Lantinga <slouken@libsdl.org>
parents:
2247
diff
changeset
|
127 #else |
5a58b57b6724
Added SSE and MMX optimization for SDL_FillRect()
Sam Lantinga <slouken@libsdl.org>
parents:
2247
diff
changeset
|
128 #define DECLARE_ALIGNED(t,v,a) t v |
5a58b57b6724
Added SSE and MMX optimization for SDL_FillRect()
Sam Lantinga <slouken@libsdl.org>
parents:
2247
diff
changeset
|
129 #endif |
5a58b57b6724
Added SSE and MMX optimization for SDL_FillRect()
Sam Lantinga <slouken@libsdl.org>
parents:
2247
diff
changeset
|
130 |
0 | 131 #define FORMAT_EQUAL(A, B) \ |
132 ((A)->BitsPerPixel == (B)->BitsPerPixel \ | |
133 && ((A)->Rmask == (B)->Rmask) && ((A)->Amask == (B)->Amask)) | |
134 | |
135 /* Load pixel of the specified format from a buffer and get its R-G-B values */ | |
136 /* FIXME: rescale values to 0..255 here? */ | |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
137 #define RGB_FROM_PIXEL(Pixel, fmt, r, g, b) \ |
0 | 138 { \ |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
139 r = (((Pixel&fmt->Rmask)>>fmt->Rshift)<<fmt->Rloss); \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
140 g = (((Pixel&fmt->Gmask)>>fmt->Gshift)<<fmt->Gloss); \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
141 b = (((Pixel&fmt->Bmask)>>fmt->Bshift)<<fmt->Bloss); \ |
0 | 142 } |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
143 #define RGB_FROM_RGB565(Pixel, r, g, b) \ |
0 | 144 { \ |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
145 r = (((Pixel&0xF800)>>11)<<3); \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
146 g = (((Pixel&0x07E0)>>5)<<2); \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
147 b = ((Pixel&0x001F)<<3); \ |
0 | 148 } |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
149 #define RGB_FROM_RGB555(Pixel, r, g, b) \ |
0 | 150 { \ |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
151 r = (((Pixel&0x7C00)>>10)<<3); \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
152 g = (((Pixel&0x03E0)>>5)<<3); \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
153 b = ((Pixel&0x001F)<<3); \ |
0 | 154 } |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
155 #define RGB_FROM_RGB888(Pixel, r, g, b) \ |
0 | 156 { \ |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
157 r = ((Pixel&0xFF0000)>>16); \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
158 g = ((Pixel&0xFF00)>>8); \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
159 b = (Pixel&0xFF); \ |
0 | 160 } |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
161 #define RETRIEVE_RGB_PIXEL(buf, bpp, Pixel) \ |
0 | 162 do { \ |
163 switch (bpp) { \ | |
164 case 2: \ | |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
165 Pixel = *((Uint16 *)(buf)); \ |
0 | 166 break; \ |
167 \ | |
168 case 3: { \ | |
169 Uint8 *B = (Uint8 *)(buf); \ | |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
170 if (SDL_BYTEORDER == SDL_LIL_ENDIAN) { \ |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
171 Pixel = B[0] + (B[1] << 8) + (B[2] << 16); \ |
0 | 172 } else { \ |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
173 Pixel = (B[0] << 16) + (B[1] << 8) + B[2]; \ |
0 | 174 } \ |
175 } \ | |
176 break; \ | |
177 \ | |
178 case 4: \ | |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
179 Pixel = *((Uint32 *)(buf)); \ |
0 | 180 break; \ |
181 \ | |
182 default: \ | |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
183 Pixel; /* stop gcc complaints */ \ |
0 | 184 break; \ |
185 } \ | |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
186 } while (0) |
0 | 187 |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
188 #define DISEMBLE_RGB(buf, bpp, fmt, Pixel, r, g, b) \ |
0 | 189 do { \ |
190 switch (bpp) { \ | |
191 case 2: \ | |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
192 Pixel = *((Uint16 *)(buf)); \ |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
193 RGB_FROM_PIXEL(Pixel, fmt, r, g, b); \ |
0 | 194 break; \ |
195 \ | |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
196 case 3: { \ |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
197 if (SDL_BYTEORDER == SDL_LIL_ENDIAN) { \ |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
198 r = *((buf)+fmt->Rshift/8); \ |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
199 g = *((buf)+fmt->Gshift/8); \ |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
200 b = *((buf)+fmt->Bshift/8); \ |
0 | 201 } else { \ |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
202 r = *((buf)+2-fmt->Rshift/8); \ |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
203 g = *((buf)+2-fmt->Gshift/8); \ |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
204 b = *((buf)+2-fmt->Bshift/8); \ |
0 | 205 } \ |
206 } \ | |
207 break; \ | |
208 \ | |
209 case 4: \ | |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
210 Pixel = *((Uint32 *)(buf)); \ |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
211 RGB_FROM_PIXEL(Pixel, fmt, r, g, b); \ |
0 | 212 break; \ |
213 \ | |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
214 default: \ |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
215 Pixel; /* stop gcc complaints */ \ |
0 | 216 break; \ |
217 } \ | |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
218 } while (0) |
0 | 219 |
220 /* Assemble R-G-B values into a specified pixel format and store them */ | |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
221 #define PIXEL_FROM_RGB(Pixel, fmt, r, g, b) \ |
0 | 222 { \ |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
223 Pixel = ((r>>fmt->Rloss)<<fmt->Rshift)| \ |
0 | 224 ((g>>fmt->Gloss)<<fmt->Gshift)| \ |
225 ((b>>fmt->Bloss)<<fmt->Bshift); \ | |
226 } | |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
227 #define RGB565_FROM_RGB(Pixel, r, g, b) \ |
0 | 228 { \ |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
229 Pixel = ((r>>3)<<11)|((g>>2)<<5)|(b>>3); \ |
0 | 230 } |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
231 #define RGB555_FROM_RGB(Pixel, r, g, b) \ |
0 | 232 { \ |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
233 Pixel = ((r>>3)<<10)|((g>>3)<<5)|(b>>3); \ |
0 | 234 } |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
235 #define RGB888_FROM_RGB(Pixel, r, g, b) \ |
0 | 236 { \ |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
237 Pixel = (r<<16)|(g<<8)|b; \ |
0 | 238 } |
2899
a0c837a16e4c
Added ARGB optimized case for Mac OS X
Sam Lantinga <slouken@libsdl.org>
parents:
2898
diff
changeset
|
239 #define ARGB8888_FROM_RGBA(Pixel, r, g, b, a) \ |
a0c837a16e4c
Added ARGB optimized case for Mac OS X
Sam Lantinga <slouken@libsdl.org>
parents:
2898
diff
changeset
|
240 { \ |
a0c837a16e4c
Added ARGB optimized case for Mac OS X
Sam Lantinga <slouken@libsdl.org>
parents:
2898
diff
changeset
|
241 Pixel = (a<<24)|(r<<16)|(g<<8)|b; \ |
a0c837a16e4c
Added ARGB optimized case for Mac OS X
Sam Lantinga <slouken@libsdl.org>
parents:
2898
diff
changeset
|
242 } |
0 | 243 #define ASSEMBLE_RGB(buf, bpp, fmt, r, g, b) \ |
244 { \ | |
245 switch (bpp) { \ | |
246 case 2: { \ | |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
247 Uint16 Pixel; \ |
0 | 248 \ |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
249 PIXEL_FROM_RGB(Pixel, fmt, r, g, b); \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
250 *((Uint16 *)(buf)) = Pixel; \ |
0 | 251 } \ |
252 break; \ | |
253 \ | |
254 case 3: { \ | |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
255 if (SDL_BYTEORDER == SDL_LIL_ENDIAN) { \ |
0 | 256 *((buf)+fmt->Rshift/8) = r; \ |
257 *((buf)+fmt->Gshift/8) = g; \ | |
258 *((buf)+fmt->Bshift/8) = b; \ | |
259 } else { \ | |
260 *((buf)+2-fmt->Rshift/8) = r; \ | |
261 *((buf)+2-fmt->Gshift/8) = g; \ | |
262 *((buf)+2-fmt->Bshift/8) = b; \ | |
263 } \ | |
264 } \ | |
265 break; \ | |
266 \ | |
267 case 4: { \ | |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
268 Uint32 Pixel; \ |
0 | 269 \ |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
270 PIXEL_FROM_RGB(Pixel, fmt, r, g, b); \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
271 *((Uint32 *)(buf)) = Pixel; \ |
0 | 272 } \ |
273 break; \ | |
274 } \ | |
275 } | |
276 #define ASSEMBLE_RGB_AMASK(buf, bpp, fmt, r, g, b, Amask) \ | |
277 { \ | |
278 switch (bpp) { \ | |
279 case 2: { \ | |
280 Uint16 *bufp; \ | |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
281 Uint16 Pixel; \ |
0 | 282 \ |
283 bufp = (Uint16 *)buf; \ | |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
284 PIXEL_FROM_RGB(Pixel, fmt, r, g, b); \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
285 *bufp = Pixel | (*bufp & Amask); \ |
0 | 286 } \ |
287 break; \ | |
288 \ | |
289 case 3: { \ | |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
290 if (SDL_BYTEORDER == SDL_LIL_ENDIAN) { \ |
0 | 291 *((buf)+fmt->Rshift/8) = r; \ |
292 *((buf)+fmt->Gshift/8) = g; \ | |
293 *((buf)+fmt->Bshift/8) = b; \ | |
294 } else { \ | |
295 *((buf)+2-fmt->Rshift/8) = r; \ | |
296 *((buf)+2-fmt->Gshift/8) = g; \ | |
297 *((buf)+2-fmt->Bshift/8) = b; \ | |
298 } \ | |
299 } \ | |
300 break; \ | |
301 \ | |
302 case 4: { \ | |
303 Uint32 *bufp; \ | |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
304 Uint32 Pixel; \ |
0 | 305 \ |
306 bufp = (Uint32 *)buf; \ | |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
307 PIXEL_FROM_RGB(Pixel, fmt, r, g, b); \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
308 *bufp = Pixel | (*bufp & Amask); \ |
0 | 309 } \ |
310 break; \ | |
311 } \ | |
312 } | |
313 | |
314 /* FIXME: Should we rescale alpha into 0..255 here? */ | |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
315 #define RGBA_FROM_PIXEL(Pixel, fmt, r, g, b, a) \ |
0 | 316 { \ |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
317 r = ((Pixel&fmt->Rmask)>>fmt->Rshift)<<fmt->Rloss; \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
318 g = ((Pixel&fmt->Gmask)>>fmt->Gshift)<<fmt->Gloss; \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
319 b = ((Pixel&fmt->Bmask)>>fmt->Bshift)<<fmt->Bloss; \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
320 a = ((Pixel&fmt->Amask)>>fmt->Ashift)<<fmt->Aloss; \ |
0 | 321 } |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
322 #define RGBA_FROM_8888(Pixel, fmt, r, g, b, a) \ |
0 | 323 { \ |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
324 r = (Pixel&fmt->Rmask)>>fmt->Rshift; \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
325 g = (Pixel&fmt->Gmask)>>fmt->Gshift; \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
326 b = (Pixel&fmt->Bmask)>>fmt->Bshift; \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
327 a = (Pixel&fmt->Amask)>>fmt->Ashift; \ |
0 | 328 } |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
329 #define RGBA_FROM_RGBA8888(Pixel, r, g, b, a) \ |
0 | 330 { \ |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
331 r = (Pixel>>24); \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
332 g = ((Pixel>>16)&0xFF); \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
333 b = ((Pixel>>8)&0xFF); \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
334 a = (Pixel&0xFF); \ |
0 | 335 } |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
336 #define RGBA_FROM_ARGB8888(Pixel, r, g, b, a) \ |
0 | 337 { \ |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
338 r = ((Pixel>>16)&0xFF); \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
339 g = ((Pixel>>8)&0xFF); \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
340 b = (Pixel&0xFF); \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
341 a = (Pixel>>24); \ |
0 | 342 } |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
343 #define RGBA_FROM_ABGR8888(Pixel, r, g, b, a) \ |
0 | 344 { \ |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
345 r = (Pixel&0xFF); \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
346 g = ((Pixel>>8)&0xFF); \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
347 b = ((Pixel>>16)&0xFF); \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
348 a = (Pixel>>24); \ |
0 | 349 } |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
350 #define DISEMBLE_RGBA(buf, bpp, fmt, Pixel, r, g, b, a) \ |
0 | 351 do { \ |
352 switch (bpp) { \ | |
353 case 2: \ | |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
354 Pixel = *((Uint16 *)(buf)); \ |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
355 RGBA_FROM_PIXEL(Pixel, fmt, r, g, b, a); \ |
0 | 356 break; \ |
357 \ | |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
358 case 3: { \ |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
359 if (SDL_BYTEORDER == SDL_LIL_ENDIAN) { \ |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
360 r = *((buf)+fmt->Rshift/8); \ |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
361 g = *((buf)+fmt->Gshift/8); \ |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
362 b = *((buf)+fmt->Bshift/8); \ |
0 | 363 } else { \ |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
364 r = *((buf)+2-fmt->Rshift/8); \ |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
365 g = *((buf)+2-fmt->Gshift/8); \ |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
366 b = *((buf)+2-fmt->Bshift/8); \ |
0 | 367 } \ |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
368 a = 0xFF; \ |
0 | 369 } \ |
370 break; \ | |
371 \ | |
372 case 4: \ | |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
373 Pixel = *((Uint32 *)(buf)); \ |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
374 RGBA_FROM_PIXEL(Pixel, fmt, r, g, b, a); \ |
0 | 375 break; \ |
376 \ | |
377 default: \ | |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
378 Pixel; /* stop gcc complaints */ \ |
0 | 379 break; \ |
380 } \ | |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
381 } while (0) |
0 | 382 |
383 /* FIXME: this isn't correct, especially for Alpha (maximum != 255) */ | |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
384 #define PIXEL_FROM_RGBA(Pixel, fmt, r, g, b, a) \ |
0 | 385 { \ |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
386 Pixel = ((r>>fmt->Rloss)<<fmt->Rshift)| \ |
0 | 387 ((g>>fmt->Gloss)<<fmt->Gshift)| \ |
388 ((b>>fmt->Bloss)<<fmt->Bshift)| \ | |
535
917cc5c56176
Fixed alpha blending bug (thanks Glenn!)
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
389 ((a>>fmt->Aloss)<<fmt->Ashift); \ |
0 | 390 } |
391 #define ASSEMBLE_RGBA(buf, bpp, fmt, r, g, b, a) \ | |
392 { \ | |
393 switch (bpp) { \ | |
394 case 2: { \ | |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
395 Uint16 Pixel; \ |
0 | 396 \ |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
397 PIXEL_FROM_RGBA(Pixel, fmt, r, g, b, a); \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
398 *((Uint16 *)(buf)) = Pixel; \ |
0 | 399 } \ |
400 break; \ | |
401 \ | |
2824
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
402 case 3: { \ |
4dba7aa7ea77
Added slow but complete blit fallback
Sam Lantinga <slouken@libsdl.org>
parents:
2267
diff
changeset
|
403 if (SDL_BYTEORDER == SDL_LIL_ENDIAN) { \ |
0 | 404 *((buf)+fmt->Rshift/8) = r; \ |
405 *((buf)+fmt->Gshift/8) = g; \ | |
406 *((buf)+fmt->Bshift/8) = b; \ | |
407 } else { \ | |
408 *((buf)+2-fmt->Rshift/8) = r; \ | |
409 *((buf)+2-fmt->Gshift/8) = g; \ | |
410 *((buf)+2-fmt->Bshift/8) = b; \ | |
411 } \ | |
412 } \ | |
413 break; \ | |
414 \ | |
415 case 4: { \ | |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
416 Uint32 Pixel; \ |
0 | 417 \ |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
418 PIXEL_FROM_RGBA(Pixel, fmt, r, g, b, a); \ |
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
419 *((Uint32 *)(buf)) = Pixel; \ |
0 | 420 } \ |
421 break; \ | |
422 } \ | |
423 } | |
424 | |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
425 /* Blend the RGB values of two Pixels based on a source alpha value */ |
0 | 426 #define ALPHA_BLEND(sR, sG, sB, A, dR, dG, dB) \ |
427 do { \ | |
428 dR = (((sR-dR)*(A))>>8)+dR; \ | |
429 dG = (((sG-dG)*(A))>>8)+dG; \ | |
430 dB = (((sB-dB)*(A))>>8)+dB; \ | |
431 } while(0) | |
432 | |
1162
2651158f59b8
Enable altivec blitters on PowerPC Linux, and some fixes for recent
Ryan C. Gordon <icculus@icculus.org>
parents:
1047
diff
changeset
|
433 /* Blend the RGB values of two Pixels based on a source alpha value */ |
1047
ffaaf7ecf685
Altivec-optimized blitters!
Ryan C. Gordon <icculus@icculus.org>
parents:
769
diff
changeset
|
434 #define ACCURATE_ALPHA_BLEND(sR, sG, sB, sA, dR, dG, dB) \ |
ffaaf7ecf685
Altivec-optimized blitters!
Ryan C. Gordon <icculus@icculus.org>
parents:
769
diff
changeset
|
435 do { \ |
ffaaf7ecf685
Altivec-optimized blitters!
Ryan C. Gordon <icculus@icculus.org>
parents:
769
diff
changeset
|
436 unsigned tR, tG, tB, tA; \ |
ffaaf7ecf685
Altivec-optimized blitters!
Ryan C. Gordon <icculus@icculus.org>
parents:
769
diff
changeset
|
437 tA = 255 - sA; \ |
ffaaf7ecf685
Altivec-optimized blitters!
Ryan C. Gordon <icculus@icculus.org>
parents:
769
diff
changeset
|
438 tR = 1 + (sR * sA) + (dR * tA); \ |
ffaaf7ecf685
Altivec-optimized blitters!
Ryan C. Gordon <icculus@icculus.org>
parents:
769
diff
changeset
|
439 dR = (tR + (tR >> 8)) >> 8; \ |
ffaaf7ecf685
Altivec-optimized blitters!
Ryan C. Gordon <icculus@icculus.org>
parents:
769
diff
changeset
|
440 tG = 1 + (sG * sA) + (dG * tA); \ |
ffaaf7ecf685
Altivec-optimized blitters!
Ryan C. Gordon <icculus@icculus.org>
parents:
769
diff
changeset
|
441 dG = (tG + (tG >> 8)) >> 8; \ |
ffaaf7ecf685
Altivec-optimized blitters!
Ryan C. Gordon <icculus@icculus.org>
parents:
769
diff
changeset
|
442 tB = 1 + (sB * sA) + (dB * tA); \ |
ffaaf7ecf685
Altivec-optimized blitters!
Ryan C. Gordon <icculus@icculus.org>
parents:
769
diff
changeset
|
443 dB = (tB + (tB >> 8)) >> 8; \ |
ffaaf7ecf685
Altivec-optimized blitters!
Ryan C. Gordon <icculus@icculus.org>
parents:
769
diff
changeset
|
444 } while(0) |
ffaaf7ecf685
Altivec-optimized blitters!
Ryan C. Gordon <icculus@icculus.org>
parents:
769
diff
changeset
|
445 |
ffaaf7ecf685
Altivec-optimized blitters!
Ryan C. Gordon <icculus@icculus.org>
parents:
769
diff
changeset
|
446 |
0 | 447 /* This is a very useful loop for optimizing blitters */ |
553
417f8709e648
There's a bug in the VC7 optimizer relating to the duff loop optimization
Sam Lantinga <slouken@libsdl.org>
parents:
535
diff
changeset
|
448 #if defined(_MSC_VER) && (_MSC_VER == 1300) |
417f8709e648
There's a bug in the VC7 optimizer relating to the duff loop optimization
Sam Lantinga <slouken@libsdl.org>
parents:
535
diff
changeset
|
449 /* There's a bug in the Visual C++ 7 optimizer when compiling this code */ |
417f8709e648
There's a bug in the VC7 optimizer relating to the duff loop optimization
Sam Lantinga <slouken@libsdl.org>
parents:
535
diff
changeset
|
450 #else |
0 | 451 #define USE_DUFFS_LOOP |
553
417f8709e648
There's a bug in the VC7 optimizer relating to the duff loop optimization
Sam Lantinga <slouken@libsdl.org>
parents:
535
diff
changeset
|
452 #endif |
0 | 453 #ifdef USE_DUFFS_LOOP |
454 | |
455 /* 8-times unrolled loop */ | |
456 #define DUFFS_LOOP8(pixel_copy_increment, width) \ | |
457 { int n = (width+7)/8; \ | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
458 switch (width & 7) { \ |
0 | 459 case 0: do { pixel_copy_increment; \ |
460 case 7: pixel_copy_increment; \ | |
461 case 6: pixel_copy_increment; \ | |
462 case 5: pixel_copy_increment; \ | |
463 case 4: pixel_copy_increment; \ | |
464 case 3: pixel_copy_increment; \ | |
465 case 2: pixel_copy_increment; \ | |
466 case 1: pixel_copy_increment; \ | |
467 } while ( --n > 0 ); \ | |
468 } \ | |
469 } | |
470 | |
471 /* 4-times unrolled loop */ | |
472 #define DUFFS_LOOP4(pixel_copy_increment, width) \ | |
473 { int n = (width+3)/4; \ | |
91
e85e03f195b4
From: "Markus F.X.J. Oberhumer"
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
474 switch (width & 3) { \ |
0 | 475 case 0: do { pixel_copy_increment; \ |
476 case 3: pixel_copy_increment; \ | |
477 case 2: pixel_copy_increment; \ | |
478 case 1: pixel_copy_increment; \ | |
479 } while ( --n > 0 ); \ | |
480 } \ | |
481 } | |
482 | |
689
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
483 /* 2 - times unrolled loop */ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
484 #define DUFFS_LOOP_DOUBLE2(pixel_copy_increment, \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
485 double_pixel_copy_increment, width) \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
486 { int n, w = width; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
487 if( w & 1 ) { \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
488 pixel_copy_increment; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
489 w--; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
490 } \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
491 if ( w > 0 ) { \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
492 n = ( w + 2) / 4; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
493 switch( w & 2 ) { \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
494 case 0: do { double_pixel_copy_increment; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
495 case 2: double_pixel_copy_increment; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
496 } while ( --n > 0 ); \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
497 } \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
498 } \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
499 } |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
500 |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
501 /* 2 - times unrolled loop 4 pixels */ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
502 #define DUFFS_LOOP_QUATRO2(pixel_copy_increment, \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
503 double_pixel_copy_increment, \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
504 quatro_pixel_copy_increment, width) \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
505 { int n, w = width; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
506 if(w & 1) { \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
507 pixel_copy_increment; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
508 w--; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
509 } \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
510 if(w & 2) { \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
511 double_pixel_copy_increment; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
512 w -= 2; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
513 } \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
514 if ( w > 0 ) { \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
515 n = ( w + 7 ) / 8; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
516 switch( w & 4 ) { \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
517 case 0: do { quatro_pixel_copy_increment; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
518 case 4: quatro_pixel_copy_increment; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
519 } while ( --n > 0 ); \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
520 } \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
521 } \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
522 } |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
523 |
0 | 524 /* Use the 8-times version of the loop by default */ |
525 #define DUFFS_LOOP(pixel_copy_increment, width) \ | |
526 DUFFS_LOOP8(pixel_copy_increment, width) | |
527 | |
528 #else | |
529 | |
530 /* Don't use Duff's device to unroll loops */ | |
689
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
531 #define DUFFS_LOOP_DOUBLE2(pixel_copy_increment, \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
532 double_pixel_copy_increment, width) \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
533 { int n = width; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
534 if( n & 1 ) { \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
535 pixel_copy_increment; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
536 n--; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
537 } \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
538 n=n>>1; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
539 for(; n > 0; --n) { \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
540 double_pixel_copy_increment; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
541 } \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
542 } |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
543 |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
544 /* Don't use Duff's device to unroll loops */ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
545 #define DUFFS_LOOP_QUATRO2(pixel_copy_increment, \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
546 double_pixel_copy_increment, \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
547 quatro_pixel_copy_increment, width) \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
548 { int n = width; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
549 if(n & 1) { \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
550 pixel_copy_increment; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
551 n--; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
552 } \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
553 if(n & 2) { \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
554 double_pixel_copy_increment; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
555 n -= 2; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
556 } \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
557 n=n>>2; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
558 for(; n > 0; --n) { \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
559 quatro_pixel_copy_increment; \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
560 } \ |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
561 } |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
562 |
5bb080d35049
Date: Tue, 19 Aug 2003 17:57:00 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
553
diff
changeset
|
563 /* Don't use Duff's device to unroll loops */ |
0 | 564 #define DUFFS_LOOP(pixel_copy_increment, width) \ |
565 { int n; \ | |
566 for ( n=width; n > 0; --n ) { \ | |
567 pixel_copy_increment; \ | |
568 } \ | |
569 } | |
570 #define DUFFS_LOOP8(pixel_copy_increment, width) \ | |
571 DUFFS_LOOP(pixel_copy_increment, width) | |
572 #define DUFFS_LOOP4(pixel_copy_increment, width) \ | |
573 DUFFS_LOOP(pixel_copy_increment, width) | |
574 | |
575 #endif /* USE_DUFFS_LOOP */ | |
576 | |
577 /* Prevent Visual C++ 6.0 from printing out stupid warnings */ | |
578 #if defined(_MSC_VER) && (_MSC_VER >= 600) | |
579 #pragma warning(disable: 4550) | |
580 #endif | |
581 | |
582 #endif /* _SDL_blit_h */ | |
2898
e40448bc7727
Share code between fill and line drawing
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
583 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
584 /* vi: set ts=4 sw=4 expandtab: */ |