libcg/grvk

Battlefield Hardline

libcg opened this issue · 31 comments

libcg commented

Meta-issue for Battlefield Hardline.

  • Working?
  • ???

Does not work.

Got this error message when trying to start a match:

Microsoft Visual C++ Runtime Library

Assertion failed!

Program: D:\Origin Games\BFH\bfh.exe
File: ../src/amdilc/amdilc_compiler.c
Line: 1979

Expression: false

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts

Press Retry to debug the application - JIT must be enabled

grvk.log

Can you dump the shader binaries?

How would I do that?

Set the GRVK_DUMP_SHADERS=1 environment variable.

Yup, then the game will probably dump it in "current" directory (which will be probably the game directory). There will be three files per each shader: AMD IL binary, AMD IL text and the resulting SPIRV code.

OK I brought up the Environment Variable window in Windows, so what do I put in "variable" and what do I put in "value"? Or am I in the wrong place

well, in the snippet above, "1" is the value, while "GRVK_DUMP_SHADERS" is the key/name (or "variable").

Actually, if you are using Steam, you can set an environment variable there as in GRVK_DUMP_SHADERS=1 %command%.

Ok, I tried the setting that environment variable both in the user and system categories, and in the "launch options" in the Origin launcher. No new files appeared in the game directory

idk about windows, maybe you need to reboot your pc and check that env var is set through echoing inside cmd.exe. You can set GRVK_LOG_LEVEL variable to debug, so you get more data in logs (will be easier to find failing shaders). Also download newer grvk libraries, since I've implemented one of the instructions that are being used by the game and weren't implemented (maybe this will compile the shader correctly when you are joining the match, though tess shaders are still not implemented in the moment).

Yeah restarting my PC was the key

I used build #39, which didn’t crash but just basically ran as a background process I could see in task manager

GitHub won’t let me post a Zip for some reason, so here’s a drive link, includes the log : https://drive.google.com/file/d/1ugKijTgFRIan3xxf-FvaLpIF8WdkcqjC/view?usp=drivesdk

libcg commented

Unfortunately I can't test the game because Battlelog doesn't work on Linux...

Ok, looks like your shaders get compiled properly with the exception of tessellation shaders, which aren't implemented.
try compiling my branch: https://github.com/Cherser-s/grvk/tree/tessellation-new

Got an error when I tried to compile:
meson-log.txt

Followed the instructions on the main page. pretty sure I installed all the necessary stuff on my Ubuntu laptop.

Hmmmm it looks like it doesn't like the compiler you have installed
considering how init tests fail

Do you use something other than meson?

Nope,
why would it compare sizeof(void*) to 15?? it isn't 128bit. Are you sure, that you configured it correctly?

I didn't do any configuration, just ran the commands on the main page here. Then downloaded a package that meson said I was missing. I wouldn't know where to begin trouble shooting something like this. I have zero programming experience, I'm only really helpful because I have four of the supported Frostbite games in my Origin library haha.

I just tried Battlefield Hardline and it runs fine. As long as Fullscreen Mode is set to Borderless and Terrain Quality to Medium. Here's the log:
grvk.log

Here's a screenshot:
2022-07-12-17:49:44-screenshot

This same scene with the same settings on DXVK reaches 130-150 fps, so GRVK is a lot slower.

@Cherser-s I tried your tessellation-new branch and it indeed lets me run the game with max settings.
Log: grvk.log
Screenshot:
2022-07-12-18:19:15-screenshot
It runs exactly as fast as regular GRVK and I can't really see any difference visually. Oh and the game always crashes when quitting. On either branch.

Do you guys need a shader dump or something before I uninstall this game?

Do you guys need a shader dump

yes, it would be great

I can't really see any difference visually.

not a surprise, considering the game only uses the tessellation for terrain calculation

idk if there is a perf graph in this game, but can you also check the CPU overhead between grvk and dxvk?

@Cherser-s Here are the shaders

Log files with GRVK_LOG_LEVEL=trace:
grvk_axl.log.zst
grvk.log.zst

Is this enough info about the CPU overhead difference?:
comparison

No, it just shows the frametime, unfortunately mangohud can't show this.
Open the in-game console and try the commands like PerfOverlay.DrawGraph 1 (idk how it looks in hardline, I've just written here the one from bf4).

GRVK:
2022-07-12-22:40:25-screenshot grvk

DXVK:
2022-07-12-22:42:56-screenshot dxvk

@Cherser-s is that enough?

yes, thank you

You're welcome 😄