From dd738eab076b38cb5cc0be8f44e18269dffd42b8 Mon Sep 17 00:00:00 2001
From: Lionel Ulmer <lionel.ulmer@free.fr>
Date: Mon, 25 Nov 2002 02:42:04 +0000
Subject: [PATCH] - Prevent the backbuffer to also have the frontbuffer flag
 set. - Log the Locking flags. - Print symbolic name (if any) of zero values
 for bit fields (thanks   Andi).

---
 dlls/ddraw/ddraw/main.c    |  2 +-
 dlls/ddraw/ddraw_private.h |  1 +
 dlls/ddraw/dsurface/main.c |  5 ++++-
 dlls/ddraw/helper.c        | 18 +++++++++++++++++-
 4 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/dlls/ddraw/ddraw/main.c b/dlls/ddraw/ddraw/main.c
index 6d9d693f9ce..4a707f07926 100644
--- a/dlls/ddraw/ddraw/main.c
+++ b/dlls/ddraw/ddraw/main.c
@@ -451,7 +451,7 @@ create_primary(IDirectDrawImpl* This, LPDDSURFACEDESC2 pDDSD,
 
 	ddsd.dwFlags &= ~DDSD_BACKBUFFERCOUNT;
 	ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_VISIBLE | DDSCAPS_PRIMARYSURFACE
-				 | DDSCAPS_BACKBUFFER);
+				 | DDSCAPS_BACKBUFFER | DDSCAPS_FRONTBUFFER);
 
 	primary = ICOM_OBJECT(IDirectDrawSurfaceImpl,IDirectDrawSurface7,
 			      *ppSurf);
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
index 1b2b3db62a1..b8ce3d7ba6d 100644
--- a/dlls/ddraw/ddraw_private.h
+++ b/dlls/ddraw/ddraw_private.h
@@ -354,6 +354,7 @@ extern void DDRAW_dump_pixelformat(const DDPIXELFORMAT *in);
 extern void DDRAW_dump_colorkeyflag(DWORD ck);
 extern void DDRAW_dump_surface_desc(const DDSURFACEDESC2 *lpddsd);
 extern void DDRAW_dump_cooperativelevel(DWORD cooplevel);
+extern void DDRAW_dump_lockflag(DWORD lockflag);
 extern void DDRAW_dump_DDCOLORKEY(const DDCOLORKEY *in);
 extern void DDRAW_dump_DDCAPS(const DDCAPS *lpcaps);
 #endif /* __WINE_DLLS_DDRAW_DDRAW_PRIVATE_H */
diff --git a/dlls/ddraw/dsurface/main.c b/dlls/ddraw/dsurface/main.c
index d3a26260bfc..0efb4302ce0 100644
--- a/dlls/ddraw/dsurface/main.c
+++ b/dlls/ddraw/dsurface/main.c
@@ -977,7 +977,10 @@ Main_DirectDrawSurface_Lock(LPDIRECTDRAWSURFACE7 iface, LPRECT prect,
 {
     ICOM_THIS(IDirectDrawSurfaceImpl, iface);
 
-    TRACE("(%p)->Lock(%p,%p,%08lx,%08lx)\n",This,prect,pDDSD,flags,(DWORD)h);
+    if (TRACE_ON(ddraw)) {
+        TRACE("(%p)->Lock(%p,%p,%08lx,%08lx)\n",This,prect,pDDSD,flags,(DWORD)h);
+	TRACE(" - locking flags : "); DDRAW_dump_lockflag(flags);
+    }
 
     if (flags & ~(DDLOCK_WAIT|DDLOCK_READONLY|DDLOCK_WRITEONLY))
 	WARN("(%p)->Lock(%p,%p,%08lx,%08lx)\n",
diff --git a/dlls/ddraw/helper.c b/dlls/ddraw/helper.c
index b2899d0aedc..4b64f4b44c3 100644
--- a/dlls/ddraw/helper.c
+++ b/dlls/ddraw/helper.c
@@ -66,7 +66,8 @@ static void DDRAW_dump_flags_(DWORD flags, const flag_info* names,
     unsigned int	i;
 
     for (i=0; i < num_names; i++)
-	if (names[i].val & flags)
+        if ((flags & names[i].val) ||      /* standard flag value */
+	    ((!flags) && (!names[i].val))) /* zero value only */
 	    DPRINTF("%s ", names[i].name);
 
     if (newline)
@@ -326,6 +327,21 @@ void DDRAW_dump_colorkeyflag(DWORD ck)
     DDRAW_dump_flags(ck, flags, sizeof(flags)/sizeof(flags[0]));
 }
 
+void DDRAW_dump_lockflag(DWORD lockflag)
+{
+    static const flag_info flags[] =
+	{
+	    FE(DDLOCK_SURFACEMEMORYPTR),
+	    FE(DDLOCK_WAIT),
+	    FE(DDLOCK_EVENT),
+	    FE(DDLOCK_READONLY),
+	    FE(DDLOCK_WRITEONLY),
+	    FE(DDLOCK_NOSYSLOCK)
+	};
+
+    DDRAW_dump_flags(lockflag, flags, sizeof(flags)/sizeof(flags[0]));
+}
+
 static void DDRAW_dump_DWORD(const void *in) {
     DPRINTF("%ld", *((const DWORD *) in));
 }
-- 
GitLab