http://bugs.winehq.org/show_bug.cgi?id=34285
Bug #: 34285 Summary: Vanguard: Saga of Heroes fails with "Couldn't load HLSL shader header 'VS_UIRectangle.fx'" Product: Wine Version: 1.7.0 Platform: x86 OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: ntdll AssignedTo: wine-bugs@winehq.org ReportedBy: focht@gmx.net Classification: Unclassified
Hello folks,
as the summary says...
This forum talks about the problem: https://forums.station.sony.com/vg/index.php?threads/f2p-update-and-wine.682...
A CodeWeavers ticket: http://www.codeweavers.com/compatibility/browse/name/?app_id=3023;forum=1;ms...
The client log reveals:
--- snip --- VGClient.log: Logging initialized. VGClient.log: Init: Name subsystem initialized VGClient.log: Init: Detected: Microsoft Windows XP 5.1 (Build: 2600) VGClient.log: Init: Version: 1.238.1.138261 VGClient.log: Init: Compiled: Aug 7 2013 14:39:45 VGClient.log: Init: Threadsafe Core: No VGClient.log: Init: Base directory: C:\Program Files\Sony Online Entertainment\Installed Games\Vanguard\bin. VGClient.log: Init: Character set: Unicode VGClient.log: Init: Object subsystem initialized ... VGClient.log: Critical: Couldn't load HLSL shader header 'VS_UIRectangle.fx' VGClient.log: Critical: Couldn't load HLSL shader header 'VS_UIRectangle.fx' VGClient.log: Critical: Windows GetLastError: Success. (0) VGClient.log: Critical: Windows GetLastError: Success. (0) VGClient.log: Exit: Executing UObject::StaticShutdownAfterError VGClient.log: Exit: Executing UObject::StaticShutdownAfterError VGClient.log: Exit: Executing UWindowsClient::ShutdownAfterError VGClient.log: Exit: Executing UWindowsClient::ShutdownAfterError VGClient.log: Exit: OpenAL Audio subsystem shut down. VGClient.log: Exit: OpenAL Audio subsystem shut down. VGClient.log: Critical: FD3DHardwareShader::CompileShaderFromFile VGClient.log: Critical: FD3DHardwareShader::CompileShaderFromFile VGClient.log: Critical: FD3DHardwareShader::Initialize VGClient.log: Critical: FD3DHardwareShader::Initialize VGClient.log: Critical: UD3DRenderDevice::GetVertexShader VGClient.log: Critical: UD3DRenderDevice::GetVertexShader --- snip ---
The problem is actually the path retrieved by GetFullPathNameW().
--- snip --- [~/.wine/drive_c/Program Files/Sony Online Entertainment/Installed Games/Vanguard/bin] wine ./VGClient.exe --sessionid=foo --commercesessionid=bar ... 0025:Call KERNEL32.GetFullPathNameW(0033e96c L"C:.",00000100,018b7f28,0033e964) ret=00daacdf 0025:Ret KERNEL32.GetFullPathNameW() retval=00000047 ret=00daacdf ... 0025:Call KERNEL32.WideCharToMultiByte(00000000,00000000,018b7f28 L"C:\Program Files\Sony Online Entertainment\Installed Games\Vanguard\bin\.",ffffffff,00000000,00000000,00000000,00000000) ret=00ac2fc9 0025:Ret KERNEL32.WideCharToMultiByte() retval=0000004a ret=00ac2fc9 ... 0025:Call KERNEL32.SetCurrentDirectoryA(0033ea60 "C:\Program Files\Sony Online Entertainment\Installed Games\Vanguard\bin\.") ret=0040e1ed 0025:Ret KERNEL32.SetCurrentDirectoryA() retval=00000001 ret=0040e1ed ... 0025:Call KERNEL32.SetCurrentDirectoryW(018b7f28 L"C:\Program Files\Sony Online Entertainment\Installed Games\Vanguard\bin\.") ret=0040e1a6 0025:Ret KERNEL32.SetCurrentDirectoryW() retval=00000001 ret=0040e1a6 ... <CompileShaderFromFile> ... 0025:Call KERNEL32.CreateFileW(1396d910 L"C:\Program Files\Sony Online Entertainment\Installed Games\Vanguard\bin\.VS_UIRectangle.fx",80000000,00000001,00000000,00000003,40000000,00000000) ret=0040d7ce 0025:Ret KERNEL32.CreateFileW() retval=ffffffff ret=0040d7ce ... --- snip ---
GetFullPathName( "C:.") should never return a (full) path containing a trailing dot (add a test case to test_RtlGetFullPathName_U()).
Because of this, the user supplied include callbacks called by (native) shader compiler from D3DXCompileShaderFromFile() can't correctly deduce/build a redirected path from the input path.
Note: Wine's shader compiler file loader code is missing this feature (another bug) hence games which rely on user callbacks to find and load the file supplied with D3DXCompileShaderFromFile() only work with native d3dx9_3x.dll
Regards