Removed some unnecessary #includes and dll dependencies.
[wine/multimedia.git] / dlls / ddraw / helper.c
blob632946e490448a996e5a521a98c1ffcc1ef1e449
2 /* DirectDraw Base Functions
4 * Copyright 1997-1999 Marcus Meissner
5 * Copyright 1998 Lionel Ulmer (most of Direct3D stuff)
6 */
8 #include "config.h"
10 #include <unistd.h>
11 #include <assert.h>
12 #include <fcntl.h>
13 #include <string.h>
14 #include <stdlib.h>
15 #include <stdio.h>
17 #include "winerror.h"
18 #include "heap.h"
19 #include "wine/exception.h"
20 #include "ddraw.h"
21 #include "d3d.h"
22 #include "debugtools.h"
23 #include "options.h"
25 DEFAULT_DEBUG_CHANNEL(ddraw);
27 /******************************************************************************
28 * debug output functions
30 void _dump_DDBLTFX(DWORD flagmask) {
31 int i;
32 const struct {
33 DWORD mask;
34 char *name;
35 } flags[] = {
36 #define FE(x) { x, #x},
37 FE(DDBLTFX_ARITHSTRETCHY)
38 FE(DDBLTFX_MIRRORLEFTRIGHT)
39 FE(DDBLTFX_MIRRORUPDOWN)
40 FE(DDBLTFX_NOTEARING)
41 FE(DDBLTFX_ROTATE180)
42 FE(DDBLTFX_ROTATE270)
43 FE(DDBLTFX_ROTATE90)
44 FE(DDBLTFX_ZBUFFERRANGE)
45 FE(DDBLTFX_ZBUFFERBASEDEST)
46 #undef FE
48 for (i=0;i<sizeof(flags)/sizeof(flags[0]);i++)
49 if (flags[i].mask & flagmask)
50 DPRINTF("%s ",flags[i].name);
51 DPRINTF("\n");
54 void _dump_DDBLTFAST(DWORD flagmask) {
55 int i;
56 const struct {
57 DWORD mask;
58 char *name;
59 } flags[] = {
60 #define FE(x) { x, #x},
61 FE(DDBLTFAST_NOCOLORKEY)
62 FE(DDBLTFAST_SRCCOLORKEY)
63 FE(DDBLTFAST_DESTCOLORKEY)
64 FE(DDBLTFAST_WAIT)
65 #undef FE
67 for (i=0;i<sizeof(flags)/sizeof(flags[0]);i++)
68 if (flags[i].mask & flagmask)
69 DPRINTF("%s ",flags[i].name);
70 DPRINTF("\n");
73 void _dump_DDBLT(DWORD flagmask) {
74 int i;
75 const struct {
76 DWORD mask;
77 char *name;
78 } flags[] = {
79 #define FE(x) { x, #x},
80 FE(DDBLT_ALPHADEST)
81 FE(DDBLT_ALPHADESTCONSTOVERRIDE)
82 FE(DDBLT_ALPHADESTNEG)
83 FE(DDBLT_ALPHADESTSURFACEOVERRIDE)
84 FE(DDBLT_ALPHAEDGEBLEND)
85 FE(DDBLT_ALPHASRC)
86 FE(DDBLT_ALPHASRCCONSTOVERRIDE)
87 FE(DDBLT_ALPHASRCNEG)
88 FE(DDBLT_ALPHASRCSURFACEOVERRIDE)
89 FE(DDBLT_ASYNC)
90 FE(DDBLT_COLORFILL)
91 FE(DDBLT_DDFX)
92 FE(DDBLT_DDROPS)
93 FE(DDBLT_KEYDEST)
94 FE(DDBLT_KEYDESTOVERRIDE)
95 FE(DDBLT_KEYSRC)
96 FE(DDBLT_KEYSRCOVERRIDE)
97 FE(DDBLT_ROP)
98 FE(DDBLT_ROTATIONANGLE)
99 FE(DDBLT_ZBUFFER)
100 FE(DDBLT_ZBUFFERDESTCONSTOVERRIDE)
101 FE(DDBLT_ZBUFFERDESTOVERRIDE)
102 FE(DDBLT_ZBUFFERSRCCONSTOVERRIDE)
103 FE(DDBLT_ZBUFFERSRCOVERRIDE)
104 FE(DDBLT_WAIT)
105 FE(DDBLT_DEPTHFILL)
106 #undef FE
108 for (i=0;i<sizeof(flags)/sizeof(flags[0]);i++)
109 if (flags[i].mask & flagmask)
110 DPRINTF("%s ",flags[i].name);
111 DPRINTF("\n");
114 void _dump_DDSCAPS(void *in) {
115 int i;
116 const struct {
117 DWORD mask;
118 char *name;
119 } flags[] = {
120 #define FE(x) { x, #x},
121 FE(DDSCAPS_RESERVED1)
122 FE(DDSCAPS_ALPHA)
123 FE(DDSCAPS_BACKBUFFER)
124 FE(DDSCAPS_COMPLEX)
125 FE(DDSCAPS_FLIP)
126 FE(DDSCAPS_FRONTBUFFER)
127 FE(DDSCAPS_OFFSCREENPLAIN)
128 FE(DDSCAPS_OVERLAY)
129 FE(DDSCAPS_PALETTE)
130 FE(DDSCAPS_PRIMARYSURFACE)
131 FE(DDSCAPS_PRIMARYSURFACELEFT)
132 FE(DDSCAPS_SYSTEMMEMORY)
133 FE(DDSCAPS_TEXTURE)
134 FE(DDSCAPS_3DDEVICE)
135 FE(DDSCAPS_VIDEOMEMORY)
136 FE(DDSCAPS_VISIBLE)
137 FE(DDSCAPS_WRITEONLY)
138 FE(DDSCAPS_ZBUFFER)
139 FE(DDSCAPS_OWNDC)
140 FE(DDSCAPS_LIVEVIDEO)
141 FE(DDSCAPS_HWCODEC)
142 FE(DDSCAPS_MODEX)
143 FE(DDSCAPS_MIPMAP)
144 FE(DDSCAPS_RESERVED2)
145 FE(DDSCAPS_ALLOCONLOAD)
146 FE(DDSCAPS_VIDEOPORT)
147 FE(DDSCAPS_LOCALVIDMEM)
148 FE(DDSCAPS_NONLOCALVIDMEM)
149 FE(DDSCAPS_STANDARDVGAMODE)
150 FE(DDSCAPS_OPTIMIZED)
151 #undef FE
153 DWORD flagmask = *((DWORD *) in);
154 for (i=0;i<sizeof(flags)/sizeof(flags[0]);i++)
155 if (flags[i].mask & flagmask)
156 DPRINTF("%s ",flags[i].name);
159 void _dump_pixelformat_flag(DWORD flagmask) {
160 int i;
161 const struct {
162 DWORD mask;
163 char *name;
164 } flags[] = {
165 #define FE(x) { x, #x},
166 FE(DDPF_ALPHAPIXELS)
167 FE(DDPF_ALPHA)
168 FE(DDPF_FOURCC)
169 FE(DDPF_PALETTEINDEXED4)
170 FE(DDPF_PALETTEINDEXEDTO8)
171 FE(DDPF_PALETTEINDEXED8)
172 FE(DDPF_RGB)
173 FE(DDPF_COMPRESSED)
174 FE(DDPF_RGBTOYUV)
175 FE(DDPF_YUV)
176 FE(DDPF_ZBUFFER)
177 FE(DDPF_PALETTEINDEXED1)
178 FE(DDPF_PALETTEINDEXED2)
179 FE(DDPF_ZPIXELS)
180 #undef FE
182 for (i=0;i<sizeof(flags)/sizeof(flags[0]);i++)
183 if (flags[i].mask & flagmask)
184 DPRINTF("%s ",flags[i].name);
187 void _dump_paletteformat(DWORD dwFlags) {
188 int i;
189 const struct {
190 DWORD mask;
191 char *name;
192 } flags[] = {
193 #define FE(x) { x, #x},
194 FE(DDPCAPS_4BIT)
195 FE(DDPCAPS_8BITENTRIES)
196 FE(DDPCAPS_8BIT)
197 FE(DDPCAPS_INITIALIZE)
198 FE(DDPCAPS_PRIMARYSURFACE)
199 FE(DDPCAPS_PRIMARYSURFACELEFT)
200 FE(DDPCAPS_ALLOW256)
201 FE(DDPCAPS_VSYNC)
202 FE(DDPCAPS_1BIT)
203 FE(DDPCAPS_2BIT)
204 FE(DDPCAPS_ALPHA)
205 #undef FE
207 for (i=0;i<sizeof(flags)/sizeof(flags[0]);i++)
208 if (flags[i].mask & dwFlags)
209 DPRINTF("%s ",flags[i].name);
210 DPRINTF("\n");
213 void _dump_pixelformat(void *in) {
214 LPDDPIXELFORMAT pf = (LPDDPIXELFORMAT) in;
216 DPRINTF("( ");
217 _dump_pixelformat_flag(pf->dwFlags);
218 if (pf->dwFlags & DDPF_FOURCC) {
219 DPRINTF(", dwFourCC : %c%c%c%c",
220 (unsigned char)((pf->dwFourCC>>24)&0xff),
221 (unsigned char)((pf->dwFourCC>>16)&0xff),
222 (unsigned char)((pf->dwFourCC>> 8)&0xff),
223 (unsigned char)( pf->dwFourCC &0xff)
226 if (pf->dwFlags & DDPF_RGB) {
227 char *cmd;
228 DPRINTF(", RGB bits: %ld, ", pf->u.dwRGBBitCount);
229 switch (pf->u.dwRGBBitCount) {
230 case 4: cmd = "%1lx"; break;
231 case 8: cmd = "%02lx"; break;
232 case 16: cmd = "%04lx"; break;
233 case 24: cmd = "%06lx"; break;
234 case 32: cmd = "%08lx"; break;
235 default: ERR("Unexpected bit depth !\n"); cmd = "%d"; break;
237 DPRINTF(" R "); DPRINTF(cmd, pf->u1.dwRBitMask);
238 DPRINTF(" G "); DPRINTF(cmd, pf->u2.dwGBitMask);
239 DPRINTF(" B "); DPRINTF(cmd, pf->u3.dwBBitMask);
240 if (pf->dwFlags & DDPF_ALPHAPIXELS) {
241 DPRINTF(" A "); DPRINTF(cmd, pf->u4.dwRGBAlphaBitMask);
243 if (pf->dwFlags & DDPF_ZPIXELS) {
244 DPRINTF(" Z "); DPRINTF(cmd, pf->u4.dwRGBZBitMask);
247 if (pf->dwFlags & DDPF_ZBUFFER) {
248 DPRINTF(", Z bits : %ld", pf->u.dwZBufferBitDepth);
250 if (pf->dwFlags & DDPF_ALPHA) {
251 DPRINTF(", Alpha bits : %ld", pf->u.dwAlphaBitDepth);
253 DPRINTF(")");
256 void _dump_colorkeyflag(DWORD ck) {
257 int i;
258 const struct {
259 DWORD mask;
260 char *name;
261 } flags[] = {
262 #define FE(x) { x, #x},
263 FE(DDCKEY_COLORSPACE)
264 FE(DDCKEY_DESTBLT)
265 FE(DDCKEY_DESTOVERLAY)
266 FE(DDCKEY_SRCBLT)
267 FE(DDCKEY_SRCOVERLAY)
268 #undef FE
270 for (i=0;i<sizeof(flags)/sizeof(flags[0]);i++)
271 if (flags[i].mask & ck)
272 DPRINTF("%s ",flags[i].name);
275 static void _dump_DWORD(void *in) {
276 DPRINTF("%ld", *((DWORD *) in));
278 static void _dump_PTR(void *in) {
279 DPRINTF("%p", *((void **) in));
281 void _dump_DDCOLORKEY(void *in) {
282 DDCOLORKEY *ddck = (DDCOLORKEY *) in;
284 DPRINTF(" Low : %ld - High : %ld", ddck->dwColorSpaceLowValue, ddck->dwColorSpaceHighValue);
287 void _dump_surface_desc(DDSURFACEDESC *lpddsd) {
288 int i;
289 struct {
290 DWORD mask;
291 char *name;
292 void (*func)(void *);
293 void *elt;
294 } flags[16], *fe = flags;
295 #define FE(x,f,e) do { fe->mask = x; fe->name = #x; fe->func = f; fe->elt = (void *) &(lpddsd->e); fe++; } while(0)
296 FE(DDSD_CAPS, _dump_DDSCAPS, ddsCaps);
297 FE(DDSD_HEIGHT, _dump_DWORD, dwHeight);
298 FE(DDSD_WIDTH, _dump_DWORD, dwWidth);
299 FE(DDSD_PITCH, _dump_DWORD, lPitch);
300 FE(DDSD_BACKBUFFERCOUNT, _dump_DWORD, dwBackBufferCount);
301 FE(DDSD_ZBUFFERBITDEPTH, _dump_DWORD, u.dwZBufferBitDepth);
302 FE(DDSD_ALPHABITDEPTH, _dump_DWORD, dwAlphaBitDepth);
303 FE(DDSD_PIXELFORMAT, _dump_pixelformat, ddpfPixelFormat);
304 FE(DDSD_CKDESTOVERLAY, _dump_DDCOLORKEY, ddckCKDestOverlay);
305 FE(DDSD_CKDESTBLT, _dump_DDCOLORKEY, ddckCKDestBlt);
306 FE(DDSD_CKSRCOVERLAY, _dump_DDCOLORKEY, ddckCKSrcOverlay);
307 FE(DDSD_CKSRCBLT, _dump_DDCOLORKEY, ddckCKSrcBlt);
308 FE(DDSD_MIPMAPCOUNT, _dump_DWORD, u.dwMipMapCount);
309 FE(DDSD_REFRESHRATE, _dump_DWORD, u.dwRefreshRate);
310 FE(DDSD_LINEARSIZE, _dump_DWORD, u1.dwLinearSize);
311 FE(DDSD_LPSURFACE, _dump_PTR, u1.lpSurface);
312 #undef FE
314 for (i=0;i<sizeof(flags)/sizeof(flags[0]);i++)
315 if (flags[i].mask & lpddsd->dwFlags) {
316 DPRINTF(" - %s : ",flags[i].name);
317 flags[i].func(flags[i].elt);
318 DPRINTF("\n");
321 void _dump_cooperativelevel(DWORD cooplevel) {
322 int i;
323 const struct {
324 int mask;
325 char *name;
326 } flags[] = {
327 #define FE(x) { x, #x},
328 FE(DDSCL_FULLSCREEN)
329 FE(DDSCL_ALLOWREBOOT)
330 FE(DDSCL_NOWINDOWCHANGES)
331 FE(DDSCL_NORMAL)
332 FE(DDSCL_ALLOWMODEX)
333 FE(DDSCL_EXCLUSIVE)
334 FE(DDSCL_SETFOCUSWINDOW)
335 FE(DDSCL_SETDEVICEWINDOW)
336 FE(DDSCL_CREATEDEVICEWINDOW)
337 #undef FE
340 if (TRACE_ON(ddraw)) {
341 DPRINTF(" - ");
342 for (i=0;i<sizeof(flags)/sizeof(flags[0]);i++)
343 if (flags[i].mask & cooplevel)
344 DPRINTF("%s ",flags[i].name);
345 DPRINTF("\n");