Small DDraw improvements / fixes
Lionel Ulmer
lionel.ulmer at free.fr
Sat Jul 13 08:28:42 CDT 2002
Hi all,
This fixes an annoying ERR in Fallout Tactics (that now works fine thanks to
Tony's same surface Blt fix).
And it also adds more logging (did I already tell you that I love verbose
logging :-) ).
Changelog:
- DDRAW_SYSTEMMEMORY is handled like OFFSCREENPLAIN in Wine for now
- added more logging
--
Lionel Ulmer - http://www.bbrox.org/
-------------- next part --------------
Index: dlls/ddraw/ddraw_private.h
===================================================================
RCS file: /home/wine/wine/dlls/ddraw/ddraw_private.h,v
retrieving revision 1.25
diff -u -r1.25 ddraw_private.h
--- dlls/ddraw/ddraw_private.h 10 Jul 2002 03:05:43 -0000 1.25
+++ dlls/ddraw/ddraw_private.h 13 Jul 2002 13:26:04 -0000
@@ -358,4 +358,5 @@
extern void DDRAW_dump_surface_desc(const DDSURFACEDESC2 *lpddsd);
extern void DDRAW_dump_cooperativelevel(DWORD cooplevel);
extern void DDRAW_dump_DDCOLORKEY(const DDCOLORKEY *in);
+extern void DDRAW_dump_DDCAPS(const DDCAPS *lpcaps);
#endif /* __WINE_DLLS_DDRAW_DDRAW_PRIVATE_H */
Index: dlls/ddraw/helper.c
===================================================================
RCS file: /home/wine/wine/dlls/ddraw/helper.c,v
retrieving revision 1.17
diff -u -r1.17 helper.c
--- dlls/ddraw/helper.c 31 May 2002 23:25:45 -0000 1.17
+++ dlls/ddraw/helper.c 13 Jul 2002 13:26:04 -0000
@@ -57,8 +57,11 @@
#define ME(x,f,e) { x, #x, (void (*)(const void *))(f), offsetof(STRUCT, e) }
-static void DDRAW_dump_flags(DWORD flags, const flag_info* names,
- size_t num_names)
+#define DDRAW_dump_flags(flags,names,num_names) \
+ DDRAW_dump_flags_(flags, names, num_names, 1)
+
+static void DDRAW_dump_flags_(DWORD flags, const flag_info* names,
+ size_t num_names, int newline)
{
unsigned int i;
@@ -66,7 +69,8 @@
if (names[i].val & flags)
DPRINTF("%s ", names[i].name);
- DPRINTF("\n");
+ if (newline)
+ DPRINTF("\n");
}
static void DDRAW_dump_members(DWORD flags, const void* data,
@@ -187,7 +191,7 @@
FE(DDSCAPS_OPTIMIZED)
};
- DDRAW_dump_flags(in->dwCaps, flags, sizeof(flags)/sizeof(flags[0]));
+ DDRAW_dump_flags_(in->dwCaps, flags, sizeof(flags)/sizeof(flags[0]), 0);
}
void DDRAW_dump_pixelformat_flag(DWORD flagmask)
@@ -210,7 +214,7 @@
FE(DDPF_ZPIXELS)
};
- DDRAW_dump_flags(flagmask, flags, sizeof(flags)/sizeof(flags[0]));
+ DDRAW_dump_flags_(flagmask, flags, sizeof(flags)/sizeof(flags[0]), 0);
}
void DDRAW_dump_paletteformat(DWORD dwFlags)
@@ -346,4 +350,167 @@
DPRINTF(" - ");
DDRAW_dump_flags(cooplevel, flags, sizeof(flags)/sizeof(flags[0]));
}
+}
+
+void DDRAW_dump_DDCAPS(const DDCAPS *lpcaps) {
+ static const flag_info flags1[] = {
+ FE(DDCAPS_3D),
+ FE(DDCAPS_ALIGNBOUNDARYDEST),
+ FE(DDCAPS_ALIGNSIZEDEST),
+ FE(DDCAPS_ALIGNBOUNDARYSRC),
+ FE(DDCAPS_ALIGNSIZESRC),
+ FE(DDCAPS_ALIGNSTRIDE),
+ FE(DDCAPS_BLT),
+ FE(DDCAPS_BLTQUEUE),
+ FE(DDCAPS_BLTFOURCC),
+ FE(DDCAPS_BLTSTRETCH),
+ FE(DDCAPS_GDI),
+ FE(DDCAPS_OVERLAY),
+ FE(DDCAPS_OVERLAYCANTCLIP),
+ FE(DDCAPS_OVERLAYFOURCC),
+ FE(DDCAPS_OVERLAYSTRETCH),
+ FE(DDCAPS_PALETTE),
+ FE(DDCAPS_PALETTEVSYNC),
+ FE(DDCAPS_READSCANLINE),
+ FE(DDCAPS_STEREOVIEW),
+ FE(DDCAPS_VBI),
+ FE(DDCAPS_ZBLTS),
+ FE(DDCAPS_ZOVERLAYS),
+ FE(DDCAPS_COLORKEY),
+ FE(DDCAPS_ALPHA),
+ FE(DDCAPS_COLORKEYHWASSIST),
+ FE(DDCAPS_NOHARDWARE),
+ FE(DDCAPS_BLTCOLORFILL),
+ FE(DDCAPS_BANKSWITCHED),
+ FE(DDCAPS_BLTDEPTHFILL),
+ FE(DDCAPS_CANCLIP),
+ FE(DDCAPS_CANCLIPSTRETCHED),
+ FE(DDCAPS_CANBLTSYSMEM)
+ };
+ static const flag_info flags2[] = {
+ FE(DDCAPS2_CERTIFIED),
+ FE(DDCAPS2_NO2DDURING3DSCENE),
+ FE(DDCAPS2_VIDEOPORT),
+ FE(DDCAPS2_AUTOFLIPOVERLAY),
+ FE(DDCAPS2_CANBOBINTERLEAVED),
+ FE(DDCAPS2_CANBOBNONINTERLEAVED),
+ FE(DDCAPS2_COLORCONTROLOVERLAY),
+ FE(DDCAPS2_COLORCONTROLPRIMARY),
+ FE(DDCAPS2_CANDROPZ16BIT),
+ FE(DDCAPS2_NONLOCALVIDMEM),
+ FE(DDCAPS2_NONLOCALVIDMEMCAPS),
+ FE(DDCAPS2_NOPAGELOCKREQUIRED),
+ FE(DDCAPS2_WIDESURFACES),
+ FE(DDCAPS2_CANFLIPODDEVEN),
+ FE(DDCAPS2_CANBOBHARDWARE),
+ FE(DDCAPS2_COPYFOURCC),
+ FE(DDCAPS2_PRIMARYGAMMA),
+ FE(DDCAPS2_CANRENDERWINDOWED),
+ FE(DDCAPS2_CANCALIBRATEGAMMA),
+ FE(DDCAPS2_FLIPINTERVAL),
+ FE(DDCAPS2_FLIPNOVSYNC),
+ FE(DDCAPS2_CANMANAGETEXTURE),
+ FE(DDCAPS2_TEXMANINNONLOCALVIDMEM),
+ FE(DDCAPS2_STEREO),
+ FE(DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL)
+ };
+ static const flag_info flags3[] = {
+ FE(DDCKEYCAPS_DESTBLT),
+ FE(DDCKEYCAPS_DESTBLTCLRSPACE),
+ FE(DDCKEYCAPS_DESTBLTCLRSPACEYUV),
+ FE(DDCKEYCAPS_DESTBLTYUV),
+ FE(DDCKEYCAPS_DESTOVERLAY),
+ FE(DDCKEYCAPS_DESTOVERLAYCLRSPACE),
+ FE(DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV),
+ FE(DDCKEYCAPS_DESTOVERLAYONEACTIVE),
+ FE(DDCKEYCAPS_DESTOVERLAYYUV),
+ FE(DDCKEYCAPS_SRCBLT),
+ FE(DDCKEYCAPS_SRCBLTCLRSPACE),
+ FE(DDCKEYCAPS_SRCBLTCLRSPACEYUV),
+ FE(DDCKEYCAPS_SRCBLTYUV),
+ FE(DDCKEYCAPS_SRCOVERLAY),
+ FE(DDCKEYCAPS_SRCOVERLAYCLRSPACE),
+ FE(DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV),
+ FE(DDCKEYCAPS_SRCOVERLAYONEACTIVE),
+ FE(DDCKEYCAPS_SRCOVERLAYYUV),
+ FE(DDCKEYCAPS_NOCOSTOVERLAY)
+ };
+ static const flag_info flags4[] = {
+ FE(DDFXCAPS_BLTALPHA),
+ FE(DDFXCAPS_OVERLAYALPHA),
+ FE(DDFXCAPS_BLTARITHSTRETCHYN),
+ FE(DDFXCAPS_BLTARITHSTRETCHY),
+ FE(DDFXCAPS_BLTMIRRORLEFTRIGHT),
+ FE(DDFXCAPS_BLTMIRRORUPDOWN),
+ FE(DDFXCAPS_BLTROTATION),
+ FE(DDFXCAPS_BLTROTATION90),
+ FE(DDFXCAPS_BLTSHRINKX),
+ FE(DDFXCAPS_BLTSHRINKXN),
+ FE(DDFXCAPS_BLTSHRINKY),
+ FE(DDFXCAPS_BLTSHRINKYN),
+ FE(DDFXCAPS_BLTSTRETCHX),
+ FE(DDFXCAPS_BLTSTRETCHXN),
+ FE(DDFXCAPS_BLTSTRETCHY),
+ FE(DDFXCAPS_BLTSTRETCHYN),
+ FE(DDFXCAPS_OVERLAYARITHSTRETCHY),
+ FE(DDFXCAPS_OVERLAYARITHSTRETCHYN),
+ FE(DDFXCAPS_OVERLAYSHRINKX),
+ FE(DDFXCAPS_OVERLAYSHRINKXN),
+ FE(DDFXCAPS_OVERLAYSHRINKY),
+ FE(DDFXCAPS_OVERLAYSHRINKYN),
+ FE(DDFXCAPS_OVERLAYSTRETCHX),
+ FE(DDFXCAPS_OVERLAYSTRETCHXN),
+ FE(DDFXCAPS_OVERLAYSTRETCHY),
+ FE(DDFXCAPS_OVERLAYSTRETCHYN),
+ FE(DDFXCAPS_OVERLAYMIRRORLEFTRIGHT),
+ FE(DDFXCAPS_OVERLAYMIRRORUPDOWN)
+ };
+ static const flag_info flags5[] = {
+ FE(DDFXALPHACAPS_BLTALPHAEDGEBLEND),
+ FE(DDFXALPHACAPS_BLTALPHAPIXELS),
+ FE(DDFXALPHACAPS_BLTALPHAPIXELSNEG),
+ FE(DDFXALPHACAPS_BLTALPHASURFACES),
+ FE(DDFXALPHACAPS_BLTALPHASURFACESNEG),
+ FE(DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND),
+ FE(DDFXALPHACAPS_OVERLAYALPHAPIXELS),
+ FE(DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG),
+ FE(DDFXALPHACAPS_OVERLAYALPHASURFACES),
+ FE(DDFXALPHACAPS_OVERLAYALPHASURFACESNEG)
+ };
+ static const flag_info flags6[] = {
+ FE(DDPCAPS_4BIT),
+ FE(DDPCAPS_8BITENTRIES),
+ FE(DDPCAPS_8BIT),
+ FE(DDPCAPS_INITIALIZE),
+ FE(DDPCAPS_PRIMARYSURFACE),
+ FE(DDPCAPS_PRIMARYSURFACELEFT),
+ FE(DDPCAPS_ALLOW256),
+ FE(DDPCAPS_VSYNC),
+ FE(DDPCAPS_1BIT),
+ FE(DDPCAPS_2BIT),
+ FE(DDPCAPS_ALPHA),
+ };
+ static const flag_info flags7[] = {
+ FE(DDSVCAPS_RESERVED1),
+ FE(DDSVCAPS_RESERVED2),
+ FE(DDSVCAPS_RESERVED3),
+ FE(DDSVCAPS_RESERVED4),
+ FE(DDSVCAPS_STEREOSEQUENTIAL),
+ };
+
+ DPRINTF(" - dwSize : %ld\n", lpcaps->dwSize);
+ DPRINTF(" - dwCaps : "); DDRAW_dump_flags(lpcaps->dwCaps, flags1, sizeof(flags1)/sizeof(flags1[0]));
+ DPRINTF(" - dwCaps2 : "); DDRAW_dump_flags(lpcaps->dwCaps2, flags2, sizeof(flags2)/sizeof(flags2[0]));
+ DPRINTF(" - dwCKeyCaps : "); DDRAW_dump_flags(lpcaps->dwCKeyCaps, flags3, sizeof(flags3)/sizeof(flags3[0]));
+ DPRINTF(" - dwFXCaps : "); DDRAW_dump_flags(lpcaps->dwFXCaps, flags4, sizeof(flags4)/sizeof(flags4[0]));
+ DPRINTF(" - dwFXAlphaCaps : "); DDRAW_dump_flags(lpcaps->dwFXAlphaCaps, flags5, sizeof(flags5)/sizeof(flags5[0]));
+ DPRINTF(" - dwPalCaps : "); DDRAW_dump_flags(lpcaps->dwPalCaps, flags6, sizeof(flags6)/sizeof(flags6[0]));
+ DPRINTF(" - dwSVCaps : "); DDRAW_dump_flags(lpcaps->dwSVCaps, flags7, sizeof(flags7)/sizeof(flags7[0]));
+ DPRINTF("...\n");
+ DPRINTF(" - dwNumFourCCCodes : %ld\n", lpcaps->dwNumFourCCCodes);
+ DPRINTF(" - dwCurrVisibleOverlays : %ld\n", lpcaps->dwCurrVisibleOverlays);
+ DPRINTF(" - dwMinOverlayStretch : %ld\n", lpcaps->dwMinOverlayStretch);
+ DPRINTF(" - dwMaxOverlayStretch : %ld\n", lpcaps->dwMaxOverlayStretch);
+ DPRINTF("...\n");
+ DPRINTF(" - ddsCaps : "); DDRAW_dump_DDSCAPS(&lpcaps->ddsCaps); DPRINTF("\n");
}
Index: dlls/ddraw/ddraw/main.c
===================================================================
RCS file: /home/wine/wine/dlls/ddraw/ddraw/main.c,v
retrieving revision 1.23
diff -u -r1.23 main.c
--- dlls/ddraw/ddraw/main.c 31 May 2002 23:25:45 -0000 1.23
+++ dlls/ddraw/ddraw/main.c 13 Jul 2002 13:26:05 -0000
@@ -493,7 +493,10 @@
ICOM_THIS(IDirectDrawImpl, iface);
TRACE("(%p)->(%p,%p,%p)\n",This,pDDSD,ppSurf,pUnkOuter);
- TRACE("Requested Caps: 0x%lx\n", pDDSD->ddsCaps.dwCaps);
+ if (TRACE_ON(ddraw)) {
+ DPRINTF("Requesting surface desc :\n");
+ DDRAW_dump_surface_desc(pDDSD);
+ }
if (pUnkOuter != NULL) {
FIXME("outer != NULL?\n");
@@ -520,7 +523,8 @@
/* create backbuffer surface */
hr = This->create_backbuffer(This, pDDSD, ppSurf, pUnkOuter, NULL);
}
- else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_OFFSCREENPLAIN)
+ else if ((pDDSD->ddsCaps.dwCaps & DDSCAPS_OFFSCREENPLAIN) ||
+ (pDDSD->ddsCaps.dwCaps & DDSCAPS_SYSTEMMEMORY)) /* No difference in Wine right now */
{
/* create offscreenplain surface */
hr = create_offscreen(This, pDDSD, ppSurf, pUnkOuter);
@@ -790,10 +794,20 @@
{
ICOM_THIS(IDirectDrawImpl,iface);
TRACE("(%p,%p,%p), stub\n",This,pDriverCaps,pHELCaps);
- if (pDriverCaps != NULL)
+ if (pDriverCaps != NULL) {
DD_STRUCT_COPY_BYSIZE(pDriverCaps,&This->caps);
- if (pHELCaps != NULL)
+ if (TRACE_ON(ddraw)) {
+ DPRINTF("Driver Caps : \n");
+ DDRAW_dump_DDCAPS(pDriverCaps);
+ }
+ }
+ if (pHELCaps != NULL) {
DD_STRUCT_COPY_BYSIZE(pHELCaps,&This->caps);
+ if (TRACE_ON(ddraw)) {
+ DPRINTF("HEL Caps : \n");
+ DDRAW_dump_DDCAPS(pHELCaps);
+ }
+ }
return DD_OK;
}
Index: dlls/ddraw/dsurface/main.c
===================================================================
RCS file: /home/wine/wine/dlls/ddraw/dsurface/main.c,v
retrieving revision 1.26
diff -u -r1.26 main.c
--- dlls/ddraw/dsurface/main.c 10 Jul 2002 03:05:43 -0000 1.26
+++ dlls/ddraw/dsurface/main.c 13 Jul 2002 13:26:05 -0000
@@ -853,6 +853,9 @@
}
DD_STRUCT_COPY_BYSIZE(pDDSD,&This->surface_desc);
+ if (TRACE_ON(ddraw)) {
+ DDRAW_dump_surface_desc(pDDSD);
+ }
return DD_OK;
}
More information about the wine-patches
mailing list