Repository navigation
Releases: GNSB/UFC-3-PS4-PORT-LINUX-WINDOWS
Release list
UFC 3 native port 0.1.6
Native EA SPORTS UFC 3 port (PS4 CUSA06534, update 1.14) for Windows and Linux.
No game files are included: you need your own dump of the game and its 1.14 update.
Smoother fights with fewer GPU readbacks, a Windows launcher that fits small screens, and
./ufc3.sh --play on Linux. How to play online: HOW-TO-PLAY-ONLINE.md.
Performance
- Exact write ranges (PR #13 by @SinLeeke). When the game writes into memory next to
GPU-written data, the port now knows the exact bytes the write touches instead of guessing with a
16-byte margin, so writes that only sit beside GPU data no longer force a GPU readback.- On by default: the exact range of the game's
memcpy/memmove/memset. - Opt-in with
BB_WRITE_WINDOW=2: guest stores are decoded too. On a GTX 1650 at 1080p,
fights went from 51.5 FPS with alternating 8/30 ms frames to 60–64 FPS, and readbacks dropped
from about 25/s to about 4/s. On Linux:BB_WRITE_WINDOW=2 ./ufc3.sh. On Windows: set the
environment variable before startingSacredFire.exe. - Details: WINDOWS-EXACT-WRITE-WINDOWS.md.
- On by default: the exact range of the game's
- New
BB_GUEST_FPS_LIMIT(off by default), also from PR #13. It is a frame limit applied on
the game's own thread, so it adds no input latency, unlikeBB_FPS_LIMIT, which holds finished
frames.
Launchers
- Windows: on screens shorter than the launcher (768p laptops, or 1080p at 125 % scaling and
above), the window now fits the screen and scrolls, so Play, Stop and the log can be reached
(#14). On screens where it already fit, nothing changes. - Linux:
./ufc3.sh --playstarts the game directly with the settings saved in the launcher
(game folder, name, language, video and online mode), without opening the window and without
needing GTK, likeSacredFire.exe --playon Windows (#12).BB_GAME_DIRoverrides the saved
folder, and./ufc3.sh --play /path/to/CUSA06534still works.
Known issues
- At 150 % scaling on a 1366-pixel-wide screen, the Windows launcher is about 20 px wider than
the screen. - With
BB_WRITE_WINDOW=2, some frames over 33 ms remain in some fights when the game reads
GPU-written data. - Keep the log folder on a local disk for the best FPS.
Credits
- @SinLeeke: exact write windows and the guest frame limit (PR #13), with measurements on a
GTX 1650. - @SercanDmr: the
--playrequest for Linux (#12) and the readback report (#15). - @waghrudraksh: reported the Windows launcher cut off on a laptop screen (#14).
- As always: @luscamovi (AMD patches, PS4 Pro mode) and the mancelli shadPS4 fork, whose
work this port still builds on.
UFC 3 native port 0.1.5
Native EA SPORTS UFC 3 port (PS4 CUSA06534, update 1.14) for Windows and Linux.
No game files are included: you need your own dump of the game and its 1.14 update.
Write windows are back on Windows, blood and sweat are back, two new launchers, and online
rematches work. How to play online: HOW-TO-PLAY-ONLINE.md.
Performance
- Write windows on by default on Windows again (and single-stepped writes on Windows and
Linux). UFC-48 made them coherent, which fixes the 0.1.4 heap corruption that forced them off.
On an RTX 3060 laptop a Career fight goes from about 30 to 60–70 FPS. - Logs written to a network drive with frame statistics on no longer stall the GPU thread
(readbacks.csvis flushed once a second instead of on every readback).
Graphics
- Blood and sweat on hits are back (missing since 0.1.3;
BB_PREUPLOAD=1again), with the
created fighter's skin still correct.
Crash and freeze fixes
- Fixed a GPU hang (device lost) when changing hair/head repeatedly in the Career fighter editor.
- Possible fix for AMD freezes and closes (late EOS labels were being dropped). AMD users:
please report whether this helps. - Validated on Windows: second fight and career contract without a crash.
Launchers
- Windows: new UFC 3 dark/gold look (your dump's own artwork in the banner), a log folder
setting, and Offline / Join server / Host server for online play. - Linux: new GTK launcher with the same Offline / Join / Host modes
(python3 launcher/ufc3_launcher.py, or./ufc3.shwith no arguments).
Online
- Rematch now works.
- Play outside your LAN with a VPN such as Tailscale: see
HOW-TO-PLAY-ONLINE.md.
Experimental
- 2K (2560x1440) and 4K (3840x2160) internal resolution in the launcher's resolution list.
In game, choose VIDEO → RESOLUTION → Favor Resolution (the option only appears in these
modes). Validated on Linux only.
Known issues
- Fights on Windows still run below Linux.
- Keep the log folder on a local disk for the best FPS.
- "Clear shader cache" recompiles every shader on each start: leave it off.
UFC 3 native port 0.1.4
Native EA SPORTS UFC 3 port (PS4 CUSA06534, update 1.14) for Windows and Linux.
No game files are included: you need your own dump of the game and its 1.14 update.
Hotfix release on top of 0.1.3. It turns write windows off by default on Windows and
preserves the portrait captures the game re-reads at a different size. Nothing else
changes; see the 0.1.3 notes for the rest of the feature set.
Fixes
-
Windows crash after creating a career fighter, signing the contract or loading the
second fight. Write windows corrupted the game's heap on Windows: the guest heap's
free list ended up damaged and the game crashed, usually while the second fight loaded
or the career contract was signed. We collected five cases (RX 9070, RTX 4090, RTX 3060
and RX 7800 XT twice), and they happened even withBB_WRITE_STEP=0. The Windows
launcher now defaults toBB_WRITE_WINDOW=0; with it off, the RX 7800 XT user who
reported the crash has not crashed again. The cost is lower in-fight FPS on Windows.
SetBB_WRITE_WINDOW=1before starting the launcher (for example from a.bat) to
re-enable write windows, at the risk of those crashes; aBB_WRITE_WINDOWvalue
already in the environment always wins over the launcher default. Linux has no such
reports and keeps write windows on (run.shstill setsBB_WRITE_WINDOW=1). -
Career portraits and post-fight screen. Your fighter now appears on the post-fight
menu, the portrait shows up in the career pause menu, and Saved Careers cards no longer
show static over the flag. Cause: the game draws the portrait into a larger render
target (for example 1024x2048) and then reads it back at the portrait's size
(864x1360, 652x1080, 600x1080, 1000x1200, 360x260, 252x400…) in the same memory. The
texture cache discarded that content and reloaded old memory instead. It now preserves
it with a copy that stays on the GPU; the first single-mip read and the small sizes are
covered too.BB_T4_PRESERVE_ALIAS=0disables the preservation.
Details:UFC-13-FIX-ALIAS.mdand
UFC-13-QUINTA-PASADA.md.
Known issues
- Write windows on Windows: the heap corruption is now avoided by keeping them off by
default, so this is a performance limitation rather than a crash. The underlying cause
remains under investigation; re-enabling withBB_WRITE_WINDOW=1brings the crash risk
back. Linux keeps them on. - Long hairstyles: some leave a slightly lighter line at the base of the neck.
- Portuguese (Portugal),
BB_LANGUAGE=7: the game has no text for this language,
even though the launcher lists it. Select Portuguese (Brazil),BB_LANGUAGE=17. - No online play yet; this release does not change the online implementation.
Credits
- Thanks to everyone who sent Windows logs, including the RX 7800 XT user whose report
confirmed thatBB_WRITE_WINDOW=0stops the crashes. - For the 0.1.3 credits — @luscamovi, mancelli's shadPS4 fork,
the upstream shadPS4 authors, HeuZ and pvict — see the 0.1.3 notes.
Downloads
- Windows:
UFC3Native-ufc3-v0.1.4-windows-x86_64.zip— extract (not inside a
OneDrive folder), runUFC3.exe, pick theCUSA06534folder, press Play. - Linux:
UFC3Native-ufc3-v0.1.4-linux-x86_64.tar.gz— glibc 2.38+ andpython3;
./ufc3.sh /path/to/PS4/CUSA06534.
Problems: attach the newest log (%LOCALAPPDATA%\UFC3Native\logs on Windows,
~/.local/share/UFC3Native/logs on Linux).
UFC 3 native port 0.1.3
Native EA SPORTS UFC 3 port (PS4 CUSA06534, update 1.14) for Windows and Linux.
No game files are included: you need your own dump of the game and its 1.14 update.
The user tested these changes on Linux with an RTX 4070 and Windows with an
RTX 3060 Laptop. The AMD fixes also come from @luscamovi's RX 9070 testing;
individual AMD cases and the separate Windows write-window reports are identified below.
These are reported gameplay results, not new gameplay tests performed while preparing this
release. Technical provenance is recorded in gpu/VENDOR.txt,
the backport report, the career crash report
and the performance handoff, section 17.
Fixes
-
Career is saved. Previously, starting a career could display "Your career data will
not be saved due to an error" or "An error has occurred while saving". The game mounted
CAREERSAVE0for reading and writing without explicitly asking to create it, so a new
career failed withNOT_FOUND.src/runtime_savedata.cnow creates a missing save for
that read-write mount, logs every failing save call, and implementssceSaveDataLoadIcon:
it returns the save's icon, falls back to/app0/sce_sys/icon0.png, then to a built-in
1x1 PNG if neither exists.src/runtime_file.calso createstemp0/createplayerand
temp0/images/{career,match}, which the game expects to open without creating first.
These are automatic fixes with no launcher toggle orBB_*switch. Local commits:
2fb02a3,327737c,dcde0dd(plus11906cdfor the failure-log buffer size).
Career saving was tested on Linux RTX 4070 and Windows RTX 3060 Laptop; @luscamovi
supplied the career-save patches from the AMD RX 9070 work. Saving successfully does
not yet verify the career pause-menu portrait; see Known issues. -
Career no longer crashes on entry. A pre-existing runtime import had the wrong
signature:sceKernelConvertLocaltimeToUtctook four arguments instead of five.
When the game'smktimepassedtm_isdst=-1as the second argument, the runtime
treated it as an output pointer and wrote to0xffffffff, causing a host SIGSEGV
on Linux.src/runtime_kernel.cnow accepts the missing integer argument so that
all three output pointers occupy the correct positions (5ba1246). This is an
automatic ABI correction, not a GPU workaround and not a regression introduced by
the shader backports. Career entry was tested on Linux RTX 4070 and Windows RTX
3060 Laptop; the address-level diagnosis is documented in the career crash report. -
Hair has coverage instead of square cards. Previously, hairstyles appeared as
flat, hard-edged rectangles because the renderer ignoredDB_ALPHA_TO_MASK.
The fragment shader now converts alpha into a hardware-style 2x2 dither pattern,
including on MSAA targets, and applies to every draw that sets the register: hair
and beards in Create Fighter and in fights alike (06d0b6b). A dark torso seen
during development came from the created fighter's broken skin under the hair
layer, which the skin fix below resolves. This adapts mancelli's69ab1996in the
shader exporter, Vulkan pipeline/cache and runtime info; local refinements select
the plain shader first and the dither variant only for draws that actually need it.
The fix is on by default.BB_ALPHA_TO_MASK=0disables it;=coverageuses Vulkan
alpha-to-coverage on multisampled targets;=colourmaplimits it to draws sampling
the runtime8_8_8_8sRGB hair colour map (Create Fighter only).
Diagnostic controlsBB_ALPHA_TO_MASK_SKIP=<ps-hash>,...exclude pixel shaders,
andBB_ALPHA_TO_MASK_DRAWS=<index-count>,...select draws (negative entries exclude
them). Hair, beards and torso were checked on Linux RTX 4070 in Create Fighter
(repeated hairstyle changes) and in career fights. -
Created-fighter skin survives repeated editing. Changing hairstyles or skin
tones several times used to leave black or garbled patches. The game compresses
these textures on the GPU: the texture cache now tiles an uncompressed storage
image into the memory/buffer-cache path before uploading its block-compressed
view, and writes back overlapping storage images before creating that view.
Compatible skin texture views requesting more mip levels or layers now expand
the cached image instead of discarding it. This is the partial backport of
mancelli's01b32f45invideo_core/texture_cache(local5875804, parts 1, 2 and 4).
SHADPS4_BC_MODE=3is the default;=0restores the older compressed-view/copy and
storage-alias behaviour for comparison. The compatible-view expansion remains
automatic. There is no launcher checkbox. The fork's CPU-write fault flush and
dispatch-levelStorageImageSyncwere not imported. Skin editing was tested on
Linux RTX 4070 and Windows RTX 3060 Laptop; keep pre-upload and write step off
as described under Defaults changed. -
Shadows use the right depth representation and release their temporary copies.
Emulating guest Z16+S8 with a host 24/32-bit depth format previously made the
constant depth bias too small, causing shadow acne or flicker.vk_rasterizer.cpp
now scales it according to the actual host format: x256 for the emulated formats,
x1 for real D16. This adapts mancelli'sc08218db(local25998f2) and respects
BB_Z16S8_AS_D16=1, the launcher/run.sh default;=0requests the other depth/stencil
path. The bias correction itself is automatic. A shader reading 32-bit depth as
R32_UINTnow receives a colour copy containing the original float bits, rather
than an invalid depth-as-colour view. Copies are keyed by image identity and freed
with their source image, ending unbounded growth; replaced per-layer source views
are also destroyed, fixing a smaller view leak. Those parts of mancelli's
72251298are localaa4bd2b, with no separate toggle. Shadows were checked on
Linux RTX 4070 and Windows RTX 3060 Laptop; AMD's layer-view corrections are below. -
Colour metadata no longer leaves untouched MSAA layers undefined. Pending fast
clears are now applied when FMASK is decompressed. Previously, an MSAA image the
GPU had never drawn to could escape clearing, allowing stale skin or dot-grid
data to appear when layers such as tattoos were resolved.vk_rasterizer.cpp
now clears those images too. Sources: upstream14ada48a/ PR #5283 by Claudio
Godoi (local631f49f) and the MSAA portion of mancelli's789551b0(local
58b2425). These fixes run automatically; the fork'sSHADPS4_FMASK_DECOMPRESS
switch was not imported. Create Fighter was tested on Linux RTX 4070 and Windows
RTX 3060 Laptop; the stale-fighter/dot-grid failure mechanism is documented in
the backport report rather than a claim that every such artifact was reproduced
on each card. -
Shader recompilation follows GCN more closely. Incorrect floating-point and
execution semantics could corrupt shading, propagate NaNs into black areas, or
select the wrong per-instance data. These backports inshader_recompilerand
Vulkan blending are automatic, with no launcher or per-fixBB_*toggle:- GCN NaN handling for legacy instructions, unordered comparisons,
DX10_CLAMP
andmed3: TheTurtle'sc4952908/ #5257. mancelli's5dedb48falso preserves
the full 256-register count instead of truncating it to zero. - NaN-aware 32/64-bit min/max: mancelli's
02d3b06d, usingNMin/NMaxso the
non-NaN operand survives as on GCN. The report identifies Intel Arc as a motivating
case; no new Intel test is claimed here. - Correct clamp/legacy handling for
V_RCP,V_RSQandV_LOG: DanielSvoboda's
1c2b8f97/ #5346, preventing incorrect exceptional results in shader maths. - Preserve the active-lane
EXECscope after an empty branch: artemkaVG's
c34ca21f/ #5220, so later instructions execute for the correct lanes. - Unbiased instance IDs for every use, and step rates with a base instance:
TheTurtle's7721a1ef/ #5260 and Chris Chreece's10393d2c/ #5274. - Correct
ZERO/ONEblend factors withMIN/MAXblend operations:
kiwakiwaa'sc5dd8b8b/ #5197, preserving the intended layer composition.
The resulting build was gameplay-tested on Linux RTX 4070 and Windows RTX 3060
Laptop; these are correctness fixes, not individually isolated before/after
visual claims on every GPU. The first launch rebuilds the shader cache because
the generated shaders, metadata and pipeline keys changed. Expect compilation
work again on that launch.
- GCN NaN handling for legacy instructions, unordered comparisons,
-
AMD RDNA floor and depth/stencil fixes. @luscamovi's RX 9070 showed grain and
black blocks on the octagon floor even after the earlier per-layer shadow fix.
Three driver-sensitive paths are corrected:- Subgroup memory fences around LDS stores preserve GCN's expected ordering.
The floor's parallel scan had effectively restarted every 16 lanes because
the AMD compiler reordered shared-memory accesses (82b8396, SPIR-V shared
memory emitter). Enabled by default;BB_LDS_ORDER=0disables it for comparison.
Clear the shader cache when changing this setting. - BC5 images that the driver rejects with storage usage/block-texel views are
retried without those unsupported flags, rather than created with undefined
contents (45fd5b0, texture-cacheimage.cpp). Automatic, no toggle. - Each depth-to-colour layer conversion uses its own 2D depth view instead of
passing a 2D-array view to atexture2Dshader (54e5471). With
BB_Z16S8_AS_D16=1, host images and pipelines consistently use D16, including
on AMD drivers advertising partial D16S8 support (338222e,vk_instance.cpp).
=0disables that D16 override; the 2D-view correction remains automatic.
These cases were diagnosed and tested on AMD...
- Subgroup memory fences around LDS stores preserve GCN's expected ordering.
UFC 3 native port 0.1.2
Native EA SPORTS UFC 3 port (PS4 CUSA06534, update 1.14) for Windows and Linux.
No game files are included: you need your own dump of the game and its 1.14 update.
Fixed
- Octagon floor noise and gray blocks. The spot-light shadow map is a 6-layer depth array
that the game reads layer by layer as raw 16-bit values to build its shadow min/max map; only
the first layer was converted, so five of the six lights produced garbage shadows on the
canvas. Every layer is converted now.
Downloads
- Windows:
UFC3Native-ufc3-v0.1.2-windows-x86_64.zip— extract (not inside a OneDrive
folder), runUFC3.exe, pick theCUSA06534folder, press Play. - Linux:
UFC3Native-ufc3-v0.1.2-linux-x86_64.tar.gz— glibc 2.38+ andpython3;
./ufc3.sh /path/to/PS4/CUSA06534.
Known issues
- Untested on AMD GPUs. No online play yet (EA's servers closed in February 2025).
Problems: attach the newest log (%LOCALAPPDATA%\UFC3Native\logs on Windows,
~/.local/share/UFC3Native/logs on Linux).
UFC 3 native port 0.1.1
Native EA SPORTS UFC 3 port (PS4 CUSA06534, update 1.14) — now with a Linux build.
No game files are included: you need your own dump of the game and its 1.14 update.
Downloads
- Windows:
UFC3Native-ufc3-v0.1.1-windows-x86_64.zip— extract (not inside a OneDrive
folder), runUFC3.exe, pick theCUSA06534folder, press Play. - Linux:
UFC3Native-ufc3-v0.1.1-linux-x86_64.tar.gz— glibc 2.38+ (Ubuntu 24.04+,
Debian 13+, Fedora 39+, Arch, SteamOS) andpython3; SDL3 and the other libraries are
bundled.tar xf ... && cd UFC3Native && ./ufc3.sh /path/to/PS4/CUSA06534. Settings in
~/.local/share/UFC3Native/ufc3.conf, controls inbbport.inithere (see README-Linux.md). .sha256files: checksums.
Changes since 0.1.0
- Intro videos skipped by default: the EA logo and the 2.5-minute first-start video play a
short black clip instead (launcher: "Skip the intro videos"; Linux:BB_SKIP_MOVIES=0in
ufc3.confto watch them). - Linux release archive (portable build: bundled SDL3/libstdc++, relative library paths).
- Windows launcher: when a program in
bin\cannot start (e.g. error 0xC0000022, access
denied — usually an antivirus, a OneDrive-synced folder or a blocked zip), the log explains
it instead of a system error box. - No build-machine paths in the binaries' log messages.
Known issues
- Noise / gray blocks on the octagon floor. Untested on AMD GPUs. No online play (EA's servers
closed in February 2025).
Problems: attach the newest log (%LOCALAPPDATA%\UFC3Native\logs on Windows,
~/.local/share/UFC3Native/logs on Linux).
UFC 3 native port 0.1.0
First release of the native EA SPORTS UFC 3 port (PS4 CUSA06534, update 1.14) for Windows.
Linux: build from source (bash build.sh && bash run.sh, see the README).
No game files are included — you need your own dump of the game and its 1.14 update.
Download
UFC3Native-ufc3-v0.1.0-windows-x86_64.zip — extract, run UFC3.exe, pick the CUSA06534
folder (the -patch folder next to it is merged automatically), press Play.
The .sha256 file has the archive's checksum.
What's in it
- Playable: menus, fights, sound, controller, saves, local 2-player.
- Performance (RTX 4070 / Ryzen 5 5600, Linux): menus 240 FPS (the game's cap), fights
137–196 FPS uncapped. On an RTX 3060 Laptop (Windows) menus run at 240 FPS; fights were
66–83 FPS before this release's write-window change and still need to be measured with it. - Launcher (God of War III port style): game and display resolution (1080p / 1440p / 4K with
AMD FSR 1.0 + RCAS), FPS limit up to unlimited, present mode, fullscreen, player name, and a
Controls editor for keyboard and gamepad. - Separate update folders merged automatically (hard links).
Known issues
- Noise / gray blocks on the octagon floor.
- The first-run tutorial videos cannot be skipped.
- Untested on AMD GPUs.
- Online play is not available (EA's servers closed in February 2025). For two players at a
distance: local 2-player with Steam Remote Play Together or Parsec.
Problems: attach the newest log from %LOCALAPPDATA%\UFC3Native\logs.