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