Regression (SimCity 3000 is Broke )

Matthew Mastracci matt at aclaro.com
Tue Mar 15 13:28:48 CST 2005


DDLOCK_NOSYSLOCK prevents DirectDraw from locking "system lock", which 
is a global 16-bit lock on Windows 9x systems.  I don't think this is 
the right way to fix this.

Check out this page here:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndxgen/html/dxfaq2.asp

This flag has no effect on Windows 2000 or Wine, since they don't have 
global Win16 locks (AFAIK).

Matt.

Tony Lambregts wrote:

> Matthew Mastracci wrote:
>
>> (removing Paul from CC)
>>
>> I think the problem is that we lock both the src and dest surfaces, 
>> without checking to see if they are the same.  I think we then try to 
>> lock both surfaces and one of the locks fails.
>>
>> Perhaps this might be a better solution:
>>
>>    if (src == iface) {
>>        DD_STRUCT_INIT(&ddesc);
>>        DD_STRUCT_INIT(&sdesc);
>>
>>        IDirectDrawSurface7_Lock(iface,NULL,&ddesc,0,0);
>>
>>        DD_STRUCT_COPY_BYSIZE(&ddesc,&sdesc);
>>    } else {
>>        DD_STRUCT_INIT(&ddesc);
>>        DD_STRUCT_INIT(&sdesc);
>>
>>        sdesc.dwSize = sizeof(sdesc);
>>        if (src) IDirectDrawSurface7_Lock(src, NULL, &sdesc, 
>> DDLOCK_READONLY, 0);
>>        ddesc.dwSize = sizeof(ddesc);
>>        IDirectDrawSurface7_Lock(iface,NULL,&ddesc,DDLOCK_WRITEONLY,0);
>>    }
>>
>> I don't have access to my box with my Wine tree right now so I don't 
>> know if this will compile.  Note that the fix will need to be done 
>> for both _Blt() and _BltFast().
>> Paul Vriens wrote:
>>
> I have fixed it on my machine with the following patch. The reasoning 
> for it is that I get the following waring in my trace's
>
> warn:ddraw:Main_DirectDrawSurface_Lock  - unsupported locking flag : 
> DDLOCK_NOSYSLOCK
>
> That would indicate that we do not want to actually "Lock" it to 
> prevent others from using it. I think that it can be improved on but I 
> would like you to try this and see if it works for you. If it does 
> then can work on getting it acceptable for cvs.
>
>
>
>
>------------------------------------------------------------------------
>
>Index: dlls/ddraw/dsurface/main.c
>===================================================================
>RCS file: /home/wine/wine/dlls/ddraw/dsurface/main.c,v
>retrieving revision 1.64
>diff -u -r1.64 main.c
>--- dlls/ddraw/dsurface/main.c	7 Mar 2005 12:23:34 -0000	1.64
>+++ dlls/ddraw/dsurface/main.c	15 Mar 2005 19:15:04 -0000
>@@ -1147,9 +1147,9 @@
>     } else {
> 	This->lock_update(This, NULL, flags);
>     }
>-
>-    This->locked = TRUE;
>-
>+    if (flags & ~(DDLOCK_WAIT|DDLOCK_READONLY|DDLOCK_WRITEONLY)) {
>+        This->locked = TRUE;
>+    }
>     TRACE("locked surface returning description : \n");
>     if (TRACE_ON(ddraw)) DDRAW_dump_surface_desc(pDDSD);
>     
>@@ -1421,13 +1421,13 @@
> HRESULT WINAPI
> Main_DirectDrawSurface_Unlock(LPDIRECTDRAWSURFACE7 iface, LPRECT pRect)
> {
>+
>     IDirectDrawSurfaceImpl *This = (IDirectDrawSurfaceImpl *)iface;
> 
>     TRACE("(%p)->Unlock(%p)\n",This,pRect);
> 
>     if (!This->locked) {
>-        WARN("Surface not locked - returing DDERR_NOTLOCKED\n");
>-        return DDERR_NOTLOCKED;
>+        WARN("Surface not locked\n");
>     }
> 
>     This->locked = FALSE;
>  
>

-------------- next part --------------
A non-text attachment was scrubbed...
Name: matt.vcf
Type: text/x-vcard
Size: 287 bytes
Desc: not available
Url : http://www.winehq.org/pipermail/wine-devel/attachments/20050315/a1bc9a01/matt.vcf


More information about the wine-devel mailing list