Proton: 3DMark (Demo) (231350)

Created on 19 Jul 2019  路  22Comments  路  Source: ValveSoftware/Proton

steam-231350.log

Compatibility Report

  • Name of the game with compatibility issues: 3DMark (Demo)
  • Steam AppID of the game:231350

System Information

  • GPU: RX Vega 56
  • Driver/LLVM version: LLVM 8.0.0) (0x687f) Version: 19.1.2
  • Kernel version: 5.0.0-20-generic
  • Link to full system information report as Gist:
  • Proton version: 4.2-9

I confirm:

  • [x] that I haven't found an existing compatibility report for this game.
  • [x] that I have checked whether there are updates for my system available.

Symptoms

DX11 test (Firestrike) runs, unable to run DX12 test (Time Spy) as 3DMark shows "You are unable to run this test. To run this test you need a DirectX 12 compatible operating system."
Tried using "winetricks --version win10" in Steam launch options, made no difference.

Game compatibility - Unofficial Regression

Most helpful comment

I found the cause of the issue preventing the Advanced Edition from working. It is a bug in the steam client where it is not doing what it does on Windows. I filed an issue in ValveSoftware/steam-for-linux for it:

https://github.com/ValveSoftware/steam-for-linux/issues/6436

Here are instructions on how to apply the workaround:

  1. Install 3DMark
  2. Edit the launch settings and PROTON_DUMP_DEBUG_COMMANDS=1 %command%.
  3. Launch 3DMark (by forcing 32-bit or 64-bit because normal launches are broken)
  4. Exit 3DMark
  5. Execute /tmp/proton_${USER}/run regedit
  6. Create the key HKEY_CURRENT_USER\Software\Futuremark
  7. Create the key HKEY_CURRENT_USER\Software\Futuremark\3DMark
  8. Create the string value HKEY_CURRENT_USER\Software\Futuremark\3DMark\KeyCode
  9. Set it to the CD key code from Steam.
  10. Exit regedit.
  11. Optionally, clear the launch settings.
  12. Start 3DMark and enjoy your Advanced Edition.

All 22 comments

"unable to run DX12 test (Time Spy) as 3DMark shows "You are unable to run this test. To run this test you need a DirectX 12 compatible operating system."

I believe Proton still runs as Windows 7 so this should be working correctly as dx12 is technically Windows 10 and the application probably checks that.

Changing Windows versions in Proton prefix config to Windows 10 should fix that but I'm not testing it. If this works, then Proton would have to consider this as correct and this issue can be close, fake Windows 10 to the application, or use Windows 10 as the OS.

Used:

WINEPREFIX="$HOME/.steam/steam/steamapps/compatdata/231350/pfx" winecfg

and

WINEPREFIX="$HOME/.steam/steam/steamapps/compatdata/231350/pfx" winetricks

to set Windows version to 10 after I started 3DMark once to have the wineprefix created.
Started using 64 bit shortcut in Steam, it starts the loading screen, the main screen flashes by, it keeps showing the loading screen indefinitely.
Attempts to set it back to Windows 7 renders the same result.
Had to reinstall 3DMark to get it back to work.
~/steam-231350.log: http://paste.ubuntu.com/p/qzjnDJrRsz/
Edit: added log as file as I don't know how long paste will remain.
3dmark_proton_log.txt

That is indeed Wine/Proton being incapable of something there. The log has fixme's and other things going on there.

Tested under Proton 4.11-1 and changed Windows version to 10 by above winecfg method, same result.

Proton does not support direct3d 12 right now.

3DMark has multiple issues in proton 4.11-1 on top of direct 3D 12 not working:

  • The default launch option does not work, so force 32-bit or force 64-bit must be selected to launch it.
  • 3DMark Advanced thinks it is 3DMark Basic, so plenty of tests (including the Vulkan one) that are exclusive to 3DMark Advanced cannot be run.
  • The SystemInfo component is completely broken, causing it to report unknown GPU, among other things.
  • Test results complain about Time Measurement data being not available, which in conjunction with the system info issues, causes test results to be deemed invalid.
  • PROTON_USE_WINED3D=1 breaks all tests (they seem to crash), causing scores of 0. Even the direct3d 9 tests break with it, but work without it. Those are wined3d in either case, so the bug is not in wined3d. It is in how wined3d gets forced.
  • The tests are broken on the Intel iGPU in the Xeon E3-1276v3 running Mesa 19.0.8 on Linux 5.1.18. Unlike the PROTON_USE_WINED3D=1 case, the loading screen appears for both the demo and graphics tests, but it quits before rendering anything.

I found the cause of the issue preventing the Advanced Edition from working. It is a bug in the steam client where it is not doing what it does on Windows. I filed an issue in ValveSoftware/steam-for-linux for it:

https://github.com/ValveSoftware/steam-for-linux/issues/6436

Here are instructions on how to apply the workaround:

  1. Install 3DMark
  2. Edit the launch settings and PROTON_DUMP_DEBUG_COMMANDS=1 %command%.
  3. Launch 3DMark (by forcing 32-bit or 64-bit because normal launches are broken)
  4. Exit 3DMark
  5. Execute /tmp/proton_${USER}/run regedit
  6. Create the key HKEY_CURRENT_USER\Software\Futuremark
  7. Create the key HKEY_CURRENT_USER\Software\Futuremark\3DMark
  8. Create the string value HKEY_CURRENT_USER\Software\Futuremark\3DMark\KeyCode
  9. Set it to the CD key code from Steam.
  10. Exit regedit.
  11. Optionally, clear the launch settings.
  12. Start 3DMark and enjoy your Advanced Edition.

@ryao Thanks, that works. Alternatively it can be done in one line with protontricks:

protontricks -c 'wine cmd /C reg add "HKEY_CURRENT_USER\Software\Futuremark\3DMark" /v "KeyCode" /t REG_SZ /d "<CDKEY>"' 223850

@kisak-valve I am no longer able to get this working with a fresh prefix on proton 4.11-3. It worked on proton 4.11-2. I had to downgrade to proton 4.2-9 to be able to use it.

Hello @ryao, please add PROTON_LOG=1 %command% to the game's launch options, reproduce the regression, and drag and drop the generated $HOME/steam-$APPID.log into the comment box.

@kisak-valve Here you go:
steam-223850.log

Disabling esync will prevent this from starting.

This is what happens when you start this (by forcing 32-bit or 64-bit) with esync disabled:

steam-223850.log

I have no launch issues for 3DMark on Proton 4.11.

The bench will only accept to launch D3D12 benches if he detects Windows 10 as OS. However, 3DMark will crash if the OS is set as as Windows10 for 3DMark.exe.

i can also confirm that the Advanced edition isn't detected, and need the workaround from this comment.

The bench now can't be launched if the prefix was created with Proton 5.0 (and when Proton 5.0 is used). There is definitively an issue with 3DMark when the OS reported is Windows 10.
A minor issue also: the splash screen will appear in a window with Proton 5.0.
EDIT: Log with Proton 5.0 (clean prefix): steam-223850.log

The splash screen issue is gone on newer version. The crash is still here however.

  • Set it to the CD key code from Steam.

This is not possible as there is no CD key for 3DMark.

Edit: Huh. Weird af but after a couple of launches it now presents a key. Can confirm that this fix works and 3DMark reports as Advanced Edition now, on Proton 5.0-3

Following below step and occur "workload produced no results" and the result is incorrect. Have any missing?

Install 3DMark
Edit the launch settings and PROTON_DUMP_DEBUG_COMMANDS=1 %command%.
Launch 3DMark (by forcing 32-bit or 64-bit because normal launches are broken)
Exit 3DMark
Execute /tmp/proton_${USER}/run regedit
Create the key HKEY_CURRENT_USER\Software\Futuremark
Create the key HKEY_CURRENT_USER\Software\Futuremark\3DMark
Create the string value HKEY_CURRENT_USER\Software\Futuremark\3DMark\KeyCode
Set it to the CD key code from Steam.
Exit regedit.
Start 3DMark Ice Storm and perform Custom Run.

Looks like 3DMark now works on prefix created after proton 5.0 with proton 5.0-7.
Unfortunately, I still can't run D3D12 benchmarks because of the "You are unable to run this test. To run this test you need a DirectX 12 compatible operating system.", despite proton 5.0 advertising Windows 10 as OS.

So the 3DMark launcher is responsible for determining what OS features are available. The launcher is written in Java, and the JDK gets the OS version by reading the version resource entry from kernel32.dll:

https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/4687075d8ccf/src/windows/native/java/lang/java_props_md.c#l408

If I do this in Wine, the launcher allows me to try to run the DirectX 12 benchmarks:

diff --git a/dlls/kernel32/version.rc b/dlls/kernel32/version.rc
index 82287e5da7..9d6c79f918 100644
--- a/dlls/kernel32/version.rc
+++ b/dlls/kernel32/version.rc
@@ -25,10 +25,10 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
 #define WINE_FILEDESCRIPTION_STR "Wine kernel DLL"
 #define WINE_FILENAME_STR "kernel32.dll"

-/* these values come from Windows 7 SP1 */
-#define WINE_FILEVERSION 6,1,7601,17514
-#define WINE_FILEVERSION_STR "6.1.7601.17514"
-#define WINE_PRODUCTVERSION 6,1,7601,17514
-#define WINE_PRODUCTVERSION_STR "6.1.7601.17514"
+/* these values come from Windows 10 2004 */
+#define WINE_FILEVERSION 10,0,19041,1000
+#define WINE_FILEVERSION_STR "10.0.19041.1000"
+#define WINE_PRODUCTVERSION 10,0,19041,1000
+#define WINE_PRODUCTVERSION_STR "10.0.19041.1000"

 #include "wine/wine_common_ver.rc"

But the only DirectX 12 test I've been able to run so far is the API overhead test. I'm not sure what's going on with the others yet, they just error immediately, and I haven't gotten a good log file to dig into yet.

Time Spy spews this error into the 3DMark launcher UI:

File: dx_shader_compiler.cpp Line: 218 Function: class eva::graphics::shader_bytecode __cdecl eva::graphics::dx::dx_shader_compiler::compile_shader(const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,enum eva::graphics::shader_type,const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,enum eva::graphics::compilation_warning_mode,enum eva::graphics::compilation_profile_mode) const Expression: result: DirectX call failed [-2005530516]. :+1:

Here's some VKD3D_SHADER_DEBUG=trace output from vkd3d revision 1510680:

trace:vkd3d_shader_serialize_root_signature: root_signature 0x21ef50, dxbc 0x21ef40.
trace:vkd3d_shader_parse_root_signature: dxbc {0x7e867620, 68}, root_signature 0x21ed10.
trace:parse_dxbc: tag: 0x43425844.
warn:parse_dxbc: Ignoring DXBC checksum.
warn:skip_dword_unknown: Skipping 4 unknown DWORDs:
warn:skip_dword_unknown:        0x05bbd62e
warn:skip_dword_unknown:        0xc74d3646
warn:skip_dword_unknown:        0xde1407a5
warn:skip_dword_unknown:        0x0d99273d
trace:parse_dxbc: version: 0x1.
trace:parse_dxbc: total size: 0x44
trace:parse_dxbc: chunk count: 0x1
trace:parse_dxbc: chunk 0 at offset 0x24
trace:shader_parse_root_signature: Version 0x1.
trace:shader_parse_root_signature: Parameter count 0, offset 24.
trace:shader_parse_root_signature: Static sampler count 0, offset 24.
trace:shader_parse_root_signature: Flags 0x1.
trace:vkd3d_shader_serialize_root_signature: root_signature 0x21e400, dxbc 0x21e3f0.
trace:vkd3d_shader_parse_root_signature: dxbc {0x7e86b540, 228}, root_signature 0x21ea60.
trace:parse_dxbc: tag: 0x43425844.
warn:parse_dxbc: Ignoring DXBC checksum.
warn:skip_dword_unknown: Skipping 4 unknown DWORDs:
warn:skip_dword_unknown:        0x52a25b94
warn:skip_dword_unknown:        0xe0d74ff3
warn:skip_dword_unknown:        0x050b0fbe
warn:skip_dword_unknown:        0x61bc19da
trace:parse_dxbc: version: 0x1.
trace:parse_dxbc: total size: 0xe4
trace:parse_dxbc: chunk count: 0x1
trace:parse_dxbc: chunk 0 at offset 0x24
trace:shader_parse_root_signature: Version 0x1.
trace:shader_parse_root_signature: Parameter count 4, offset 24.
trace:shader_parse_root_parameters: Type 0, shader visibility 0.
trace:shader_parse_descriptor_table: Descriptor range count 1.
trace:shader_parse_descriptor_ranges: Type 0, descriptor count 128, base shader register 0, register space 0, offset 0.
trace:shader_parse_root_parameters: Type 0, shader visibility 0.
trace:shader_parse_descriptor_table: Descriptor range count 1.
trace:shader_parse_descriptor_ranges: Type 0x3, descriptor count 16, base shader register 0, register space 0, offset 0.
trace:shader_parse_root_parameters: Type 0, shader visibility 0.
trace:shader_parse_descriptor_table: Descriptor range count 1.
trace:shader_parse_descriptor_ranges: Type 0x2, descriptor count 8, base shader register 0, register space 0, offset 0.
trace:shader_parse_root_parameters: Type 0, shader visibility 0.
trace:shader_parse_descriptor_table: Descriptor range count 1.
trace:shader_parse_descriptor_ranges: Type 0x1, descriptor count 8, base shader register 0, register space 0, offset 0.
trace:shader_parse_root_signature: Static sampler count 0, offset 184.
trace:shader_parse_root_signature: Flags 0x1.

The "skip_dword_unknown" warnings seem suspect, but I haven't been using vkd3d for anything else yet, so I don't know what's expected behavior in these logs.

Hello, nice find for Windows version detection.
I managed to run both d3d12 bench on Windows using vkd3d built from here, with dxgi.dll from the latest DXVK.
Timespy had very severe artifacts while NightRaid had some missing objects + freeze at CPU test.
The RC version of Proton have updated vkd3d so it might be worth to test if you can still apply the patch.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

BLaDZer picture BLaDZer  路  3Comments

ArekPiekarz picture ArekPiekarz  路  3Comments

AwesamLinux picture AwesamLinux  路  3Comments

raikirii picture raikirii  路  3Comments

leifmetcalf picture leifmetcalf  路  3Comments