https://bugs.winehq.org/show_bug.cgi?id=40803
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |focht@gmx.net Ever confirmed|0 |1 Summary|Hard Reset Redux fails to |Hard Reset Redux fails to |launch ("DirectX 10 device |launch ("DirectX 10 device |not found!") |not | |found!")(DXGI_ADAPTER_DESC1 | |'DedicatedSystemMemory' or | |'SharedSystemMemory' member | |must be non-null) Status|UNCONFIRMED |NEW Component|-unknown |directx-d3d
--- Comment #19 from Anastasius Focht focht@gmx.net --- Hello folks,
found a distributed "backup", confirming.
--- snip --- $ pwd /home/focht/.wine/drive_c/GOG Games/Hard Reset Redux
$ WINEDEBUG=+seh,+loaddll,+process,+dxgi,+d3d,+d3d11,+msgbox wine ./hr.Win32.exe >>log.txt 2>&1 ... <same as other logs attached to ticket> --- snip ---
Took some hours to debug that out as the game copies adapter values/caps/limits around in internal data structures, without preserving original data structure which makes it harder to track what kind of value corresponds to which adapter/driver value. Even worse when various values are zero.
The game gfx engine init code does various checks on adapter/driver caps to validate the system is really able to run the game. The culprits are 'DedicatedSystemMemory' and 'SharedSystemMemory' members of 'DXGI_ADAPTER_DESC1' structure. At least one of them has to be non-null, otherwise it game will terminate with that error message.
Wine source:
https://source.winehq.org/git/wine.git/blob/HEAD:/dlls/dxgi/adapter.c#l149
--- snip --- 149 static HRESULT STDMETHODCALLTYPE dxgi_adapter_GetDesc1(IWineDXGIAdapter *iface, DXGI_ADAPTER_DESC1 *desc) 150 { 151 struct dxgi_adapter *adapter = impl_from_IWineDXGIAdapter(iface); 152 struct wined3d_adapter_identifier adapter_id; 153 char description[128]; 154 HRESULT hr; 155 156 TRACE("iface %p, desc %p.\n", iface, desc); 157 158 if (!desc) 159 return E_INVALIDARG; 160 161 adapter_id.driver_size = 0; 162 adapter_id.description = description; 163 adapter_id.description_size = sizeof(description); 164 adapter_id.device_name_size = 0; 165 166 wined3d_mutex_lock(); 167 hr = wined3d_get_adapter_identifier(adapter->factory->wined3d, adapter->ordinal, 0, &adapter_id); 168 wined3d_mutex_unlock(); 169 170 if (FAILED(hr)) 171 return hr; 172 173 if (!MultiByteToWideChar(CP_ACP, 0, description, -1, desc->Description, 128)) 174 { 175 DWORD err = GetLastError(); 176 ERR("Failed to translate description %s (%#x).\n", debugstr_a(description), err); 177 hr = E_FAIL; 178 } 179 180 desc->VendorId = adapter_id.vendor_id; 181 desc->DeviceId = adapter_id.device_id; 182 desc->SubSysId = adapter_id.subsystem_id; 183 desc->Revision = adapter_id.revision; 184 desc->DedicatedVideoMemory = adapter_id.video_memory; 185 desc->DedicatedSystemMemory = 0; /* FIXME */ 186 desc->SharedSystemMemory = 0; /* FIXME */ 187 desc->AdapterLuid = adapter_id.adapter_luid; 188 desc->Flags = 0; 189 190 return hr; 191 } --- snip ---
Dat FIXME seems legit ;-)
Microsoft Docs:
https://docs.microsoft.com/en-us/windows/desktop/api/dxgi/ns-dxgi-dxgi_adapt...
With that change in place the game starts fine with my dual GPU setup (Bumblebee) on both GPUs. Tested with 32-bit 'hr.Win32.exe' and 64-bit 'hr.x64.exe'.
--- snip --- $ optirun glxinfo | grep -i opengl OpenGL vendor string: NVIDIA Corporation OpenGL renderer string: GeForce GTX 850M/PCIe/SSE2 OpenGL core profile version string: 4.6.0 NVIDIA 396.54 OpenGL core profile shading language version string: 4.60 NVIDIA OpenGL core profile context flags: (none) OpenGL core profile profile mask: core profile OpenGL core profile extensions: OpenGL version string: 4.6.0 NVIDIA 396.54 OpenGL shading language version string: 4.60 NVIDIA OpenGL context flags: (none) OpenGL profile mask: (none) OpenGL extensions: --- snip ---
--- snip --- $ glxinfo | grep -i opengl OpenGL vendor string: Intel Open Source Technology Center OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile OpenGL core profile version string: 4.5 (Core Profile) Mesa 18.0.5 OpenGL core profile shading language version string: 4.50 OpenGL core profile context flags: (none) OpenGL core profile profile mask: core profile OpenGL core profile extensions: OpenGL version string: 3.0 Mesa 18.0.5 OpenGL shading language version string: 1.30 OpenGL context flags: (none) OpenGL extensions: OpenGL ES profile version string: OpenGL ES 3.1 Mesa 18.0.5 OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.10 OpenGL ES profile extensions: --- snip ---
There is a crash on exit but that's a different issue.
$ sha1sum * f355e7a8fe0e8478bf3b17f5c35e82e3bc6e0cf1 setup_hard_reset_redux_2.0.0.2-1.bin 6b0137751cd0ef4f5cf18f7789ec05444e842d3d setup_hard_reset_redux_2.0.0.2-2.bin e3a7b9a142de3896de82e444bdaf14fdabda276e setup_hard_reset_redux_2.0.0.2.exe
$ du -shL * 4.0G setup_hard_reset_redux_2.0.0.2-1.bin 1.3G setup_hard_reset_redux_2.0.0.2-2.bin 33M setup_hard_reset_redux_2.0.0.2.exe
$ wine --version wine-3.18
Regards