Here are the two scenarios that I have run into (Mac M2)
EverQuest Titanium (32bit crossover only works):
- If I do a fresh prefix, or after I install directx 9 from MS, the game lags, but I can get into the game and play. FPS isn't that great.
EverQuest RoF2 Client (runs in crossover, but also runs in upstream wine. I assume because it runs 64bit better):
- If I do a fresh prefix, the game loads up fine and I can get to the character select screen, but there are no models rendering. This is because I think the d3d libraries included are missing something that MS DirectX Needs (specicially d3dx9_30.dll, which i think is built from 36). I should also note, that I tried adding ONLY d3dx9_30.dll to a fresh PREFIX and the sluggish issue starts happening, so appears to be something in there perhaps
- If I install DX9 from MS, the game now has the lagging screens but will load models and I can play.
I downloaded the source and added some custom TRACEs and logged the difference in the two cases and something seems to be happening around the ntdll.NtWaitForMultipleObjects, KERNEL32.WaitForSingleObject, or KERNEL32.HeapFree but I am not sure how to troubleshoot this further. You can see by the large jump in timestamps that happen in lag scenarios:
1165639.866:00c8:trace:d3d9:d3d9_surface_AddRef iface 09C808C8.
1165639.866:00c8:trace:d3d9:d3d9_surface_AddRef Forwarding to 011C4348.
1165639.866:00c8:trace:d3d9:d3d9_texture_incref 011C4348 increasing refcount to 3.
1165639.866:00c8:trace:d3d9:d3d9_texture_incref Exit d3d9_texture_incref.
1165639.866:00c8:Call ntdll.RtlAllocateHeap(05970000,00000000,00000100) ret=04c0e467
1165639.866:00c8:Ret ntdll.RtlAllocateHeap() retval=05fd4278 ret=04c0e467
1165639.866:00c8:Call ntdll.RtlAllocateHeap(05970000,00000000,00000080) ret=04c0e467
1165639.866:00c8:Ret ntdll.RtlAllocateHeap() retval=05fd46d0 ret=04c0e467
1165639.866:00c8:Call ntdll.RtlAllocateHeap(05970000,00000000,00001000) ret=04c0e467
1165639.866:00c8:Ret ntdll.RtlAllocateHeap() retval=05fd4d68 ret=04c0e467
1165639.866:00c8:Call ntdll.RtlAllocateHeap(05970000,00000000,00000200) ret=04c0e467
1165639.866:00c8:Ret ntdll.RtlAllocateHeap() retval=05fd4758 ret=04c0e467
1165639.866:00c8:Call ntdll.RtlAllocateHeap(05970000,00000000,00004000) ret=04c0e467
1165639.866:00c8:Ret ntdll.RtlAllocateHeap() retval=077c80f0 ret=04c0e467
1165639.883:010c:Call KERNEL32.WaitForSingleObject(000000d0,ffffffff) ret=01c2f6da
1165639.883:010c:Call ntdll.NtWaitForMultipleObjects(00000001,071dfcf0,00000001,00000000,00000000) ret=7b078316
1165639.883:010c:Call ntdll.NtWaitForMultipleObjects(00000001,072df0d0,00000001,00000000,00000000) ret=1ed9ce941
1165640.212:00c8:Call KERNEL32.HeapFree(05970000,00000000,077c80f0) ret=04c0acba
1165640.212:00c8:Ret KERNEL32.HeapFree() retval=00000001 ret=04c0acba
1165640.212:00c8:Call KERNEL32.HeapFree(05970000,00000000,05fd4d68) ret=04c0acba
1165640.212:00c8:Ret KERNEL32.HeapFree() retval=00000001 ret=04c0acba
1165640.212:00c8:Call KERNEL32.HeapFree(05970000,00000000,05fd4758) ret=04c0acba
1165640.212:00c8:Ret KERNEL32.HeapFree() retval=00000001 ret=04c0acba
1165640.212:00c8:Call KERNEL32.HeapFree(05970000,00000000,05fd4278) ret=04c0acba
1165640.212:00c8:Ret KERNEL32.HeapFree() retval=00000001 ret=04c0acba
1165640.212:00c8:Call KERNEL32.HeapFree(05970000,00000000,05fd46d0) ret=04c0acba
1165640.212:00c8:Ret KERNEL32.HeapFree() retval=00000001 ret=04c0acba
1165640.212:00c8:trace:d3d9:d3d9_surface_UnlockRect iface 09C808C8.
1165640.212:00c8:Call wined3d.wined3d_mutex_lock() ret=01a74257
1165640.212:00c8:Ret wined3d.wined3d_mutex_lock() retval=00000000 ret=01a74257
1165640.212:00c8:Call wined3d.wined3d_texture_get_resource(09c80678) ret=01a74265
1165640.212:00c8:Ret wined3d.wined3d_texture_get_resource() retval=09c80678 ret=01a74265
1165640.212:00c8:Call wined3d.wined3d_resource_unmap(09c80678,00000000) ret=01a74271