FNA3D D3D11 Linux: "Beta" Release
As many of you know, I've been spending some time on getting dxvk and vkd3d-utils into a usable state for FNA as well as distributions, including the Steam Linux Runtime. If you didn't know that, feel free to catch up here!
After a handful of additions to vkd3d-shader and some work on dxvk's ABI, I'm happy to say that, at least downstream, we have everything we need to freeze the ABI and make this safe to include in operating systems!
For vkd3d, the latest official release is exactly what you want - 1.10 includes everything needed to compile HLSL generated by MojoShader, so all shaders used by FNA games should now work 100%. While I threw in a few patches myself, the bulk of the work was done by CodeWeavers' graphics team, so many thanks to them for making this happen!
The part where I have to emphasize "downstream" is dxvk: The patches have been
written to support multiple WSI backends and establish an ABI version, but the
patches are currently stalled waiting for review
(1)
(2). It's December so I'm sure
work is slowing down, but it'd be nice to get some eyes on this, so this beta is
here to make that happen! You should be able to go
download the beta, extract it on top of a
game using a recent FNA revision, and launch the game with /gldevice:D3D11
.
That's something that app devs and users can try - I would also like to ask distribution packagers to look over the last TODO item for dxvk-native, which is the installation/headers work that Simon McVittie started over here. Personally I'm happy to let Simon get whatever he wants in order to get this done, but I'm not a packager so I'd like to be sure that distributions are involved in this process so that we can have a working D3D runtime in as many distributions as possible.
We're super close to the finish line, there's just one last push left to go!
How the FNA Project Works
This post has been archived.
flibitBuild
Want to replicate my build machine? Grab a RHEL8-based OS and have a look!
"RHEL-based" OSes include RHEL for Developers, Rocky Linux, and AlmaLinux.
Your OS minimum will be "glibc 2.28+, 64-bit only".
# Update base install before doing anything else
dnf update
# Add EPEL
dnf install epel-release
crb enable
# SDL2 dependencies
dnf builddep SDL2
# All the base build tools!
dnf install bzip2 bzip2-devel chrpath clang cmake freetype-devel gcc-c++ \
git gtk3-devel libstdc++-static libuuid-devel libvorbis-devel \
libxml2-devel meson mingw32-gcc-c++ mingw64-gcc-c++ ninja-build \
ocl-icd-devel openal-soft-devel opencl-headers openssl-devel patch \
perl-IPC-Cmd svn unix2dos zlib-static
# libdecor
curl -O https://gitlab.freedesktop.org/libdecor/libdecor/-/archive/0.2.1/libdecor-0.2.1.tar.bz2
tar xvfj libdecor-0.2.1.tar.bz2
mkdir libdecor-0.2.1/flibitBuild
cd libdecor-0.2.1/flibitBuild
meson .. --libdir=lib -Ddemo=false
ninja
su -c 'ninja install'
# PipeWire 0.3.42 (Highest version usable with meson)
curl -O https://gitlab.freedesktop.org/pipewire/pipewire/-/archive/0.3.42/pipewire-0.3.42.tar.bz2
tar xvfj pipewire-0.3.42.tar.bz2
mkdir pipewire-0.3.42/flibitBuild
cd pipewire-0.3.42/flibitBuild
meson setup .. --libdir=lib -Dsession-managers= -Dpipewire-v4l2=disabled -Dv4l2=disabled -Draop=disabled
ninja
su -c 'ninja install'
# Also:
# Configure SDL with PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure
# The CMake config provided by SDL2-mingw is terrible, delete the block
# that starts with "if(NOT TARGET SDL2::SDL2)".
flibitBuild AArch64
This works fine on the latest Fedora. Your glibc minimum will be 2.34.
# On Fedora...
dnf install qemu-system-aarch64
dnf group install --with-optional virtualization
virt-builder fedora-35 --arch aarch64 --size 32G \
--root-password password:!!YOUR_PASS!!
virt-install --name fedora_aarch64 --arch aarch64 --ram 3072 \
--disk path=fedora-35.img,format=raw --os-variant fedora35 --import
# Inside the VM...
dnf builddep SDL2 libgdiplus
dnf install autoconf automake bison bzip2 chrpath cmake gettext-devel git \
libicu-devel libtool python tar unzip
Wait, a "plan"?
Well, this is a .plan file, so here's my TODO. Expect nothing from it, ever.
In Progress
Closure SDL2 Testing
Awaiting Assessments
Codename a l'Orange
Waiting Room (2024)
dxvk-native
- Just waiting for MR reviews
Codename Edible Launch
SDL 3.0
- SDL_ActionSet is what sponsor resources are going towards
- SDL_StorageContainer is whenever I feel like it
- Wayland/PipeWire are waiting on external components
Coding History
- On call throughout development
Anodyne FNA Console
- Waiting on a handful of external things
VVVVVV 2.4
- Giving the localization project as much time as it wants
Super Hexagon Neo Part 2
- Occasional merge work
Waiting Room (Heat Death)
ScoreRush PC
- Need AppAdmin for publish, crosshair for mouse
Proteus "Neo" Rewrite
- Retirement project