SPIR-V Emitter for MojoShader (BETA)
After many months of development, primarily headed by Martin Krošlák, we're now ready to start testing a new SPIR-V shader emitter for MojoShader!
WTF is this?
FNA uses MojoShader for D3D9 shader support. Over the last 5 years, we've made numerous contributions to MojoShader, including full support for the Effects framework as well as various other features for simplified D3D9->OpenGL compatibility.
SPIR-V support is our next big contribution to MojoShader. SPIR-V is the official shader binary format for Vulkan, as well as an added shader format for OpenGL 4.6 (via ARB_gl_spirv).
This SPIR-V emitter is primarily focused on compatibility with ARB_gl_spirv, though there isn't much going on that would prevent this from being usable with Vulkan. We don't have a VulkanDevice yet, so for now this is purely for the extremely narrow subset of configurations out there that support OpenGL 4.6.
Who is this for?
If everything works perfectly, this is completely invisible to customers. It does not provide any benefits in performance or stability whatsoever. In fact, I plan to keep this turned off for the default OpenGLDevice once it's officially integrated, leaving it on only for the ModernGLDevice.
As far as I know, this feature is only supported on the following drivers:
- NVIDIA Windows/Linux
- Intel Windows/Linux (Mesa 2e8565be or newer)
- AMD Proprietary Windows/Linux
- radeonsi with a bunch of patches that haven't been merged yet
In reality, it's mostly for anyone who wants to try writing VulkanDevice. It's also for any of the Mesa developers who are working to get ARB_gl_spirv supported by radeonsi/i965/iris, or whatever other drivers are looking to finish OpenGL 4.6 compliance. As far as I know, basically nobody uses this feature, so I hope we can help provide some real-world data for the Mesa team to use!
I want to try this, where do I go?
I've prepared an issue tracker here:
https://github.com/FNA-XNA/MojoShader/issues/15
The repository is here if you want to see it:
https://bitbucket.org/krolli/mojoshader/src/spirv-rebased/
Who is responsible for this?
This has been worked on by a lot of people, all of which are not me! I basically just dumped some money into this (and not even that much, to be honest). This was made by many skilled developers, including Martin Krošlák, Caleb Cornett, Angus Holder, and Melker Narikka.
An extra shoutout to Baldur Karlsson who added ARB_gl_spirv support to RenderDoc extremely quickly after we asked for it! RenderDoc rules!
If you give this a try...
... thanks for your time! I'll be out of town this weekend (Aug 16-18) so don't feel too rushed to try it out.
Want a Linux game?
I'm now working my way back to just making native Linux games, slowly but surely. I have my own hit list as always, but I'm always looking for more projects! Now's a really good time to hit me up while it's on my mind. Don't forget, whether you're an indie developer or an independent developer, there's a good chance I can accommodate your needs!
Love, flibit
flibitijibibo.com
Bill's Hat
Turn a minimal Fedora installation into a SteamOS box!
1. Write Fedora Workstation NetInstall ISO to a USB drive
2. Boot USB image, install Minimal configuration with standard partition layout matching SteamOS'
3. Set root password, create a user called 'steam', set a password for it
4. Reboot, log in as root
5. A whole bunch of commands:
dnf group install hardware-support
dnf install Xorg xorg-x11-drv-evdev libglvnd-egl vulkan-loader.x86_64 vulkan-loader.i686 lightdm flatpak NetworkManager-wifi kernel-modules-extra bluez
dnf config-manager --add-repo=https://negativo17.org/repos/fedora-steam.repo
dnf install steam steamos-compositor steamos-modeswitch-inhibitor.x86_64 steamos-modeswitch-inhibitor.i686
setsebool -P allow_execheap 1
systemctl enable sshd.service
systemctl enable lightdm.service
systemctl set-default graphical.target
6. Edit /etc/lightdm/lightdm.conf:
pam-service=lightdm-autologin
pam-autologin-service=lightdm-autologin
user-session=steamos
autologin-user=steam
autologin-session=steamos
7. Create /var/lib/AccountsService/users/steam:
[User]
Session=steamos
XSession=steamos
Icon=/home/steam/.face
SystemAccount=false
8. Reboot, should work now!
9. Additional steps for NVIDIA users:
dnf config-manager --add-repo=https://negativo17.org/repos/fedora-nvidia.repo
dnf install kernel-devel dkms-nvidia nvidia-driver-libs.x86_64 nvidia-driver-libs.i686
reboot # Should be using the NVIDIA driver now!
Bill's Hat TODO
- Automate all this crap
- Steam in-home streaming firewall settings?
Wait, a "plan"?
Well, this is a .plan file, so here's my TODO. Expect nothing from it, ever.
In Progress
Proton Performance Analysis
Proteus 64-bit macOS
Shogun 64-bit
- Steam access...
Waveform 64-bit
- Repo access...!
Phantom FNA
- Uhh, where's the source?
DK BONGO QUEST
- Reinvestigate multi-joystick device support
Waiting Room
Codename FullCircle
- Need some backend access first...
Codename Swine
- Waiting for content completion
Codename CityVessel
- Not even finished yet, whatever
SDL_GetAudioDeviceSpec
- Oh god I don't even know dude
ScoreRush PC
- Graphics, AppAdmin, strings for PC settings, blah blah blah
Zeboyd Catalog
- Possibly no source, really just need AppAdmin access tbh
Codename SpinnyTokelau
- Assessment coming up in September
Codename FlyingFinger
- A bunch of non-dev stuff happens first
Codename BlackHole
- Waiting on some hardware
64-bit Panic
- They Bleed Pixels middleware :/
- Gotta rebuild all MojoSetup packages (F you Canonical)