https://bugs.winehq.org/show_bug.cgi?id=35444
Bug ID: 35444 Summary: Wayward Terran Frontier Open Alpha (.NET 4.0/XNA 4 game) reports 'Could not find a Direct3D device that supports the XNA Framework HiDef profile' Product: Wine Version: 1.7.11 Hardware: x86 OS: Linux Status: NEW Severity: normal Priority: P2 Component: -unknown Assignee: wine-bugs@winehq.org Reporter: focht@gmx.net Classification: Unclassified
Hello folks,
as the summary says.
Prerequisite: 'winetricks -q dotnet40' in 32-bit WINEPREFIX
The game will install XNA 4.0 on its own.
Trace log isn't very interesting ... it's managed code that does the actual work.
--- snip --- $ pwd /home/focht/.wine/drive_c/Program Files/Wayward Terran Frontier
$ WINEDEBUG=+tid,+seh,+relay,+d3d9,+d3d wine ./Wayward\ Terran\ Frontier.exe
log.txt 2>&1
... 002a:Ret PE DLL (proc=0x7e0a24d0,module=0x7df90000 L"wined3d.dll",reason=PROCESS_ATTACH,res=(nil)) retval=1 002a:Call PE DLL (proc=0x7e218ee8,module=0x7e1f0000 L"d3d9.dll",reason=PROCESS_ATTACH,res=(nil)) ... 002a:Call PE DLL (proc=0x3abf6b8,module=0x3a80000 L"Microsoft.Xna.Framework.Graphic",reason=PROCESS_ATTACH,res=(nil)) 002a:Call KERNEL32.GetModuleFileNameW(03a80000,0033c310,00000104) ret=603d40c1 002a:Ret KERNEL32.GetModuleFileNameW() retval=0000008d ret=603d40c1 002a:Call KERNEL32.CreateFileW(0033c310 L"C:\windows\Microsoft.Net\assembly\GAC_32\Microsoft.Xna.Framework.Graphics\v4.0_4.0.0.0__842cf8be1de50553\Microsoft.Xna.Framework.Graphics.dll",80000000,00000001,00000000,00000003,08000000,00000000) ret=603be944 002a:Ret KERNEL32.CreateFileW() retval=00000184 ret=603be944 ... 002a:Call d3d9.Direct3DCreate9(00000020) ret=04c2c787 002a:trace:d3d9:Direct3DCreate9 sdk_version 0x20. ... 002a:trace:d3d:wined3d_create Created wined3d object 0x1a5860 for d3d9 support. 002a:Ret wined3d.wined3d_create() retval=001a5860 ret=7e20e6fe ... 002a:trace:d3d9:Direct3DCreate9 Created d3d9 object 0x18fed0. 002a:Ret d3d9.Direct3DCreate9() retval=0018fed0 ret=04c2c787 ... 002a:Call d3d9.D3DPERF_SetOptions(00000002) ret=04c2c8c7 002a:fixme:d3d9:D3DPERF_SetOptions (0x2) : stub 002a:Ret d3d9.D3DPERF_SetOptions() retval=00000030 ret=04c2c8c7 ... 002a:trace:d3d9:d3d9_GetDeviceCaps iface 0x18fed0, adapter 0, device_type 0x1, caps 0x33efd4. ... 002a:Call wined3d.wined3d_get_device_caps(001a5860,00000000,00000001,001a9c20) ret=7e20d852 002a:trace:d3d:wined3d_get_device_caps wined3d 0x1a5860, adapter_idx 0, device_type WINED3D_DEVICE_TYPE_HAL, caps 0x1a9c20. 002a:Ret wined3d.wined3d_get_device_caps() retval=00000000 ret=7e20d852 ... 002a:Call KERNEL32.RaiseException(e0434352,00000001,00000005,0033f094) ret=791cac08 002a:trace:seh:raise_exception code=e0434352 flags=1 addr=0x7b83a913 ip=7b83a913 tid=002a 002a:trace:seh:raise_exception info[0]=80131500 002a:trace:seh:raise_exception info[1]=00000000 002a:trace:seh:raise_exception info[2]=00000000 002a:trace:seh:raise_exception info[3]=00000000 002a:trace:seh:raise_exception info[4]=79140000 002a:trace:seh:raise_exception eax=7b826989 ebx=7b8ba000 ecx=80131500 edx=0033efa4 esi=0033f050 edi=0033f010 002a:trace:seh:raise_exception ebp=0033efe8 esp=0033ef84 cs=0023 ds=002b es=002b fs=0063 gs=006b flags=00000283 ... 002a:Call user32.MessageBoxW(0001006c,00cde088 L"No suitable graphics card found.\n\nCould not find a Direct3D device that supports the XNA Framework HiDef profile.\r\n\r\nVerify that a suitable graphics device is installed.\r\n\r\nMake sure the desktop is not locked, and that no other application is running in full screen mode.\r\n\r\nAvoid runnin"...,00ccbe48 L"Wayward Terran Frontier",00000010) ret=04c6de0f ... --- snip ---
With a managed debugger:
--- snip --- 0033f140 7b83a913 [HelperMethodFrame: 0033f140] 0033f190 04c2c514 Microsoft.Xna.Framework.GraphicsDeviceManager.FindBestPlatformDevice(Boolean) 0033f1ac 04c2c3fc Microsoft.Xna.Framework.GraphicsDeviceManager.FindBestDevice(Boolean) 0033f1b0 04c2bf01 Microsoft.Xna.Framework.GraphicsDeviceManager.ChangeDevice(Boolean) 0033f218 04c2bddb Microsoft.Xna.Framework.GraphicsDeviceManager.Microsoft.Xna.Framework.IGraphicsDeviceManager.CreateDevice() 0033f21c 04c2bb98 Microsoft.Xna.Framework.Game.RunGame(Boolean) 0033f250 037326f2 WTFLauncher.Program.Main(System.String[]) 0033f4a8 791421db [GCFrame: 0033f4a8] --- snip ---
The XNA code compares the returned D3D device caps against XNA 4.0 'HiDef' profile values.
More info here:
http://msdn.microsoft.com/en-us/library/ff604995.aspx (What Is a Profile?)
http://blogs.msdn.com/b/shawnhar/archive/2010/03/12/reach-vs-hidef.aspx (Reach vs. HiDef)
Debugging the actual validation is very annoying so I just dumped the profile values. Maybe one D3D dev can spot values that aren't met in Wine by default (shader is 3.0).
--- snip --- VertexShaderVersion = 768u, PixelShaderVersion = 768u, OcclusionQuery = true, GetBackBufferData = true, SeparateAlphaBlend = true, DestBlendSrcAlphaSat = true, MinMaxSrcDestBlend = false, MaxPrimitiveCount = 1048575, IndexElementSize32 = true, MaxVertexStreams = 16, MaxStreamStride = 255, MaxVertexBufferSize = 67108863, MaxIndexBufferSize = 67108863, MaxTextureSize = 4096, MaxCubeSize = 4096, MaxVolumeExtent = 256, MaxTextureAspectRatio = 2048, MaxSamplers = 16, MaxVertexSamplers = 4, MaxRenderTargets = 4, NonPow2Unconditional = true, NonPow2Cube = true, NonPow2Volume = true, ValidTextureFormats = { SurfaceFormat.Color, SurfaceFormat.Bgr565, SurfaceFormat.Bgra5551, SurfaceFormat.Bgra4444, SurfaceFormat.Dxt1, SurfaceFormat.Dxt3, SurfaceFormat.Dxt5, SurfaceFormat.NormalizedByte2, SurfaceFormat.NormalizedByte4, SurfaceFormat.Rgba1010102, SurfaceFormat.Rg32, SurfaceFormat.Rgba64, SurfaceFormat.Alpha8, SurfaceFormat.Single, SurfaceFormat.Vector2, SurfaceFormat.Vector4, SurfaceFormat.HalfSingle, SurfaceFormat.HalfVector2, SurfaceFormat.HalfVector4, SurfaceFormat.HdrBlendable }, ValidCubeFormats = { SurfaceFormat.Color, SurfaceFormat.Bgr565, SurfaceFormat.Bgra5551, SurfaceFormat.Bgra4444, SurfaceFormat.Dxt1, SurfaceFormat.Dxt3, SurfaceFormat.Dxt5, SurfaceFormat.Rgba1010102, SurfaceFormat.Rg32, SurfaceFormat.Rgba64, SurfaceFormat.Alpha8, SurfaceFormat.Single, SurfaceFormat.Vector2, SurfaceFormat.Vector4, SurfaceFormat.HalfSingle, SurfaceFormat.HalfVector2, SurfaceFormat.HalfVector4, SurfaceFormat.HdrBlendable }, ValidVolumeFormats = { SurfaceFormat.Color, SurfaceFormat.Bgr565, SurfaceFormat.Bgra5551, SurfaceFormat.Bgra4444, SurfaceFormat.Rgba1010102, SurfaceFormat.Rg32, SurfaceFormat.Rgba64, SurfaceFormat.Alpha8, SurfaceFormat.Single, SurfaceFormat.Vector2, SurfaceFormat.Vector4, SurfaceFormat.HalfSingle, SurfaceFormat.HalfVector2, SurfaceFormat.HalfVector4, SurfaceFormat.HdrBlendable }, ValidVertexTextureFormats = { SurfaceFormat.Single, SurfaceFormat.Vector2, SurfaceFormat.Vector4, SurfaceFormat.HalfSingle, SurfaceFormat.HalfVector2, SurfaceFormat.HalfVector4, SurfaceFormat.HdrBlendable }, InvalidFilterFormats = { SurfaceFormat.Single, SurfaceFormat.Vector2, SurfaceFormat.Vector4, SurfaceFormat.HalfSingle, SurfaceFormat.HalfVector2, SurfaceFormat.HalfVector4, SurfaceFormat.HdrBlendable }, InvalidBlendFormats = { SurfaceFormat.Single, SurfaceFormat.Vector2, SurfaceFormat.Vector4, SurfaceFormat.HalfSingle, SurfaceFormat.HalfVector2, SurfaceFormat.HalfVector4 }, ValidDepthFormats = { DepthFormat.Depth16, DepthFormat.Depth24, DepthFormat.Depth24Stencil8 }, ValidVertexFormats = { VertexElementFormat.Color, VertexElementFormat.Single, VertexElementFormat.Vector2, VertexElementFormat.Vector3, VertexElementFormat.Vector4, VertexElementFormat.Byte4, VertexElementFormat.Short2, VertexElementFormat.Short4, VertexElementFormat.NormalizedShort2, VertexElementFormat.NormalizedShort4, VertexElementFormat.HalfVector2, VertexElementFormat.HalfVector4 } --- snip ---
NOTE: Not all 'formats' (enum) values need to be present but most likely all the integer/bool properties need to pass.
$ sha1sum WaywardSetup.msi ad1b0bf88ce284b2c4c36fbb93012b60cb0a673f WaywardSetup.msi
$ du -sh WaywardSetup.msi 8.5M WaywardSetup.msi
$ wine --version wine-1.7.11-159-gee33839
Regards