FEX-Emu / FEX-Emu/FEX

Fallout: New Vegas Black screen if 3DNow! and AMD CPUID is enabled.

Open
#4,827 1 comment 0 reactions 0 assignees View on GitHub
bug CPU emulation Game related
Dominant language
C++
Stars
8k
Forks
351
Avg merge
12h 31m
Merged PRs (30d)
102

Description

Documenting this so I don't forget this.
Need to enable `CPUID_AMD` in CPUID so the D3D{8,9}x library enables a 3DNow! codepath. Once that codepath is enabled then the game blackscreens immediately. Even the intro logos don't show up.

Tested the game on an actual Phenom that supports 3DNow! and it had no issue rendering the game on Linux+Proton.

There are some minor implementation differences between FEX and Phenom
```
4516 - host/Test_64Bit_3DNow/86.asm (Failed) <- Expected fail, only supported on geode.
4517 - host/Test_64Bit_3DNow/87.asm (Failed) <- Expected fail, only supported on geode.
4522 - host/Test_64Bit_3DNow/96.asm (Failed) <- Tolerance check is off in FEX unittests
4523 - host/Test_64Bit_3DNow/97.asm (Failed) <- Tolerance check is off in FEX unittests
4528 - host/Test_64Bit_3DNow/A6.asm (Failed) <- Expected fail, reciprocal step is only a move on geode/fex, not Phenom
4529 - host/Test_64Bit_3DNow/A7.asm (Failed) <- Expected fail, reciprocal step is only a move on geode/fex, not Phenom
4534 - host/Test_64Bit_3DNow/B6.asm (Failed) <- Expected fail, reciprocal step is only a move on geode/fex, not Phenom
```

Worst case will be if the reciprocals need to have their Newton-Raphson iteration implementated as per Phenom specs. If that /is/ the case that would mean Geode would have the same rendering bug as FEX.

Before I attempt writing a softfloat implementation of those for the 3DNow! reciprocals, I'm going to attempt CPUID spoofing since it might be conflicting or something.

Contributor guide

Open the contributing guide

Research direction

Start with CPUID_AMD handling and the D3D{8,9}x 3DNow! codepath, then review the listed host/Test_64Bit_3DNow tests and their Phenom/FEX differences. Try the proposed CPUID spoofing investigation before considering a softfloat implementation for 3DNow! reciprocals; done means Fallout: New Vegas renders past its intro logos without a black screen.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp, linux
Domain
computer-graphics, operating-systems
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.