summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorStelios Tsampas2022-10-31 15:12:13 +0200
committerStelios Tsampas2022-10-31 15:12:13 +0200
commit45e576a04d6c651453fa00b0154097a3e0b2746c (patch)
tree43adbbb0585c3cae19b97e5fa70b75283910f7d8
parent3794f1189f7a9ebf141d378e4dcf12ff2f70ac40 (diff)
downloadaur-45e576a04d6c651453fa00b0154097a3e0b2746c.tar.gz
Version 7.0-20221027
-rw-r--r--.SRCINFO336
-rw-r--r--0001-AUR-pkgbuild-changes.patch (renamed from proton-sanitize_makefile.patch)197
-rw-r--r--0001-wldap32-25946b48148784e8275c1685f6498ab88f553ca3.patch (renamed from wine-25946b48148784e8275c1685f6498ab88f553ca3.patch)0
-rw-r--r--PKGBUILD147
-rw-r--r--proton-disable_lock.patch31
-rw-r--r--proton-experimental.install16
-rw-r--r--proton-user_compat_data.patch20
-rw-r--r--wine-futex_waitv.patch104
-rw-r--r--wine-more_8x5_res.patch15
-rw-r--r--wine-winevulkan_fsr.patch2406
10 files changed, 548 insertions, 2724 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 1b1858337168..88c426b0f5b6 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,9 +1,10 @@
pkgbase = proton-experimental
pkgdesc = Compatibility tool for Steam Play based on Wine and additional components, experimental branch
- pkgver = 7.0.20220427c
- pkgrel = 3
+ pkgver = 7.0.20221027
+ pkgrel = 1
epoch = 1
url = https://github.com/ValveSoftware/Proton
+ install = proton-experimental.install
arch = x86_64
arch = x86_64_v3
license = custom
@@ -21,8 +22,8 @@ pkgbase = proton-experimental
makedepends = nasm
makedepends = meson
makedepends = cmake
- makedepends = python-virtualenv
- makedepends = python-pip
+ makedepends = afdko
+ makedepends = python-pefile
makedepends = glslang
makedepends = vulkan-headers
makedepends = clang
@@ -76,6 +77,7 @@ pkgbase = proton-experimental
makedepends = lib32-rust-libs
makedepends = libgphoto2
makedepends = gsm
+ makedepends = lib32-gsm
makedepends = opencl-headers
makedepends = attr
makedepends = lib32-attr
@@ -109,15 +111,150 @@ pkgbase = proton-experimental
makedepends = lib32-lzo
makedepends = libxkbcommon
makedepends = lib32-libxkbcommon
- makedepends = faudio
- makedepends = lib32-faudio
makedepends = libvpx
makedepends = lib32-libvpx
makedepends = sdl2>=2.0.16
makedepends = lib32-sdl2>=2.0.16
+ makedepends = libsoup
+ makedepends = lib32-libsoup
+ makedepends = libgudev
+ makedepends = lib32-libgudev
makedepends = desktop-file-utils
makedepends = python
- makedepends = steam-native-runtime
+ makedepends = bash
+ makedepends = steam
+ makedepends = alsa-lib
+ makedepends = alsa-plugins
+ makedepends = at-spi2-core
+ makedepends = cairo
+ makedepends = curl
+ makedepends = dbus-glib
+ makedepends = fontconfig
+ makedepends = freetype2
+ makedepends = freeglut
+ makedepends = gdk-pixbuf2
+ makedepends = glew1.10
+ makedepends = glib2
+ makedepends = glu
+ makedepends = gtk2
+ makedepends = lib32-alsa-lib
+ makedepends = lib32-alsa-plugins
+ makedepends = lib32-at-spi2-core
+ makedepends = lib32-cairo
+ makedepends = lib32-curl
+ makedepends = lib32-dbus-glib
+ makedepends = lib32-fontconfig
+ makedepends = lib32-freetype2
+ makedepends = lib32-freeglut
+ makedepends = lib32-gdk-pixbuf2
+ makedepends = lib32-glew1.10
+ makedepends = lib32-glib2
+ makedepends = lib32-glu
+ makedepends = lib32-gtk2
+ makedepends = lib32-libcaca
+ makedepends = lib32-libcanberra
+ makedepends = lib32-libcups
+ makedepends = lib32-libcurl-compat
+ makedepends = lib32-libcurl-gnutls
+ makedepends = lib32-dbus
+ makedepends = lib32-libdrm
+ makedepends = lib32-libgcrypt15
+ makedepends = lib32-libice
+ makedepends = lib32-libidn11
+ makedepends = lib32-libjpeg6
+ makedepends = lib32-libnm
+ makedepends = lib32-pipewire
+ makedepends = lib32-libpng12
+ makedepends = lib32-libpulse
+ makedepends = lib32-librtmp0
+ makedepends = lib32-libsm
+ makedepends = lib32-libtheora
+ makedepends = lib32-libtiff4
+ makedepends = lib32-libudev0-shim
+ makedepends = lib32-libusb
+ makedepends = lib32-libva
+ makedepends = lib32-libvdpau
+ makedepends = lib32-libvorbis
+ makedepends = lib32-libvpx1.3
+ makedepends = lib32-libwrap
+ makedepends = lib32-libxcomposite
+ makedepends = lib32-libxcursor
+ makedepends = lib32-libxft
+ makedepends = lib32-libxi
+ makedepends = lib32-libxinerama
+ makedepends = lib32-libxmu
+ makedepends = lib32-libxrandr
+ makedepends = lib32-libxrender
+ makedepends = lib32-libxtst
+ makedepends = lib32-libxxf86vm
+ makedepends = lib32-nspr
+ makedepends = lib32-openal
+ makedepends = lib32-openssl-1.0
+ makedepends = lib32-pango
+ makedepends = lib32-sdl
+ makedepends = lib32-sdl2
+ makedepends = lib32-sdl2_image
+ makedepends = lib32-sdl2_mixer
+ makedepends = lib32-sdl2_ttf
+ makedepends = lib32-sdl_image
+ makedepends = lib32-sdl_mixer
+ makedepends = lib32-sdl_ttf
+ makedepends = libcaca
+ makedepends = libcanberra
+ makedepends = libcups
+ makedepends = libcurl-compat
+ makedepends = libcurl-gnutls
+ makedepends = dbus
+ makedepends = libdrm
+ makedepends = libgcrypt15
+ makedepends = libice
+ makedepends = libidn11
+ makedepends = libjpeg6
+ makedepends = libnm
+ makedepends = libpng12
+ makedepends = libpulse
+ makedepends = librsvg
+ makedepends = librtmp0
+ makedepends = libsm
+ makedepends = libtheora
+ makedepends = libtiff4
+ makedepends = libudev0-shim
+ makedepends = libusb
+ makedepends = libva
+ makedepends = libvdpau
+ makedepends = libvorbis
+ makedepends = libvpx1.3
+ makedepends = libwrap
+ makedepends = libxcomposite
+ makedepends = libxcursor
+ makedepends = libxft
+ makedepends = libxi
+ makedepends = libxinerama
+ makedepends = libxmu
+ makedepends = libxrandr
+ makedepends = libxrender
+ makedepends = libxtst
+ makedepends = libxxf86vm
+ makedepends = nspr
+ makedepends = openal
+ makedepends = openssl-1.0
+ makedepends = pango
+ makedepends = sdl
+ makedepends = sdl2
+ makedepends = sdl2_image
+ makedepends = sdl2_mixer
+ makedepends = sdl2_ttf
+ makedepends = sdl_image
+ makedepends = sdl_mixer
+ makedepends = sdl_ttf
+ makedepends = vulkan-icd-loader
+ makedepends = vulkan-driver
+ makedepends = lib32-vulkan-driver
+ makedepends = lib32-vulkan-icd-loader
+ makedepends = lib32-libappindicator-gtk2
+ makedepends = lib32-libindicator-gtk2
+ makedepends = lib32-libdbusmenu-glib
+ makedepends = lib32-libdbusmenu-gtk2
depends = attr
depends = lib32-attr
depends = fontconfig
@@ -150,15 +287,150 @@ pkgbase = proton-experimental
depends = lib32-lzo
depends = libxkbcommon
depends = lib32-libxkbcommon
- depends = faudio
- depends = lib32-faudio
depends = libvpx
depends = lib32-libvpx
depends = sdl2>=2.0.16
depends = lib32-sdl2>=2.0.16
+ depends = libsoup
+ depends = lib32-libsoup
+ depends = libgudev
+ depends = lib32-libgudev
depends = desktop-file-utils
depends = python
- depends = steam-native-runtime
+ depends = bash
+ depends = steam
+ depends = alsa-lib
+ depends = alsa-plugins
+ depends = at-spi2-core
+ depends = cairo
+ depends = curl
+ depends = dbus-glib
+ depends = fontconfig
+ depends = freetype2
+ depends = freeglut
+ depends = gdk-pixbuf2
+ depends = glew1.10
+ depends = glib2
+ depends = glu
+ depends = gtk2
+ depends = lib32-alsa-lib
+ depends = lib32-alsa-plugins
+ depends = lib32-at-spi2-core
+ depends = lib32-cairo
+ depends = lib32-curl
+ depends = lib32-dbus-glib
+ depends = lib32-fontconfig
+ depends = lib32-freetype2
+ depends = lib32-freeglut
+ depends = lib32-gdk-pixbuf2
+ depends = lib32-glew1.10
+ depends = lib32-glib2
+ depends = lib32-glu
+ depends = lib32-gtk2
+ depends = lib32-libcaca
+ depends = lib32-libcanberra
+ depends = lib32-libcups
+ depends = lib32-libcurl-compat
+ depends = lib32-libcurl-gnutls
+ depends = lib32-dbus
+ depends = lib32-libdrm
+ depends = lib32-libgcrypt15
+ depends = lib32-libice
+ depends = lib32-libidn11
+ depends = lib32-libjpeg6
+ depends = lib32-libnm
+ depends = lib32-pipewire
+ depends = lib32-libpng12
+ depends = lib32-libpulse
+ depends = lib32-librtmp0
+ depends = lib32-libsm
+ depends = lib32-libtheora
+ depends = lib32-libtiff4
+ depends = lib32-libudev0-shim
+ depends = lib32-libusb
+ depends = lib32-libva
+ depends = lib32-libvdpau
+ depends = lib32-libvorbis
+ depends = lib32-libvpx1.3
+ depends = lib32-libwrap
+ depends = lib32-libxcomposite
+ depends = lib32-libxcursor
+ depends = lib32-libxft
+ depends = lib32-libxi
+ depends = lib32-libxinerama
+ depends = lib32-libxmu
+ depends = lib32-libxrandr
+ depends = lib32-libxrender
+ depends = lib32-libxtst
+ depends = lib32-libxxf86vm
+ depends = lib32-nspr
+ depends = lib32-openal
+ depends = lib32-openssl-1.0
+ depends = lib32-pango
+ depends = lib32-sdl
+ depends = lib32-sdl2
+ depends = lib32-sdl2_image
+ depends = lib32-sdl2_mixer
+ depends = lib32-sdl2_ttf
+ depends = lib32-sdl_image
+ depends = lib32-sdl_mixer
+ depends = lib32-sdl_ttf
+ depends = libcaca
+ depends = libcanberra
+ depends = libcups
+ depends = libcurl-compat
+ depends = libcurl-gnutls
+ depends = dbus
+ depends = libdrm
+ depends = libgcrypt15
+ depends = libice
+ depends = libidn11
+ depends = libjpeg6
+ depends = libnm
+ depends = libpng12
+ depends = libpulse
+ depends = librsvg
+ depends = librtmp0
+ depends = libsm
+ depends = libtheora
+ depends = libtiff4
+ depends = libudev0-shim
+ depends = libusb
+ depends = libva
+ depends = libvdpau
+ depends = libvorbis
+ depends = libvpx1.3
+ depends = libwrap
+ depends = libxcomposite
+ depends = libxcursor
+ depends = libxft
+ depends = libxi
+ depends = libxinerama
+ depends = libxmu
+ depends = libxrandr
+ depends = libxrender
+ depends = libxtst
+ depends = libxxf86vm
+ depends = nspr
+ depends = openal
+ depends = openssl-1.0
+ depends = pango
+ depends = sdl
+ depends = sdl2
+ depends = sdl2_image
+ depends = sdl2_mixer
+ depends = sdl2_ttf
+ depends = sdl_image
+ depends = sdl_mixer
+ depends = sdl_ttf
+ depends = vulkan-icd-loader
+ depends = vulkan-driver
+ depends = lib32-vulkan-driver
+ depends = lib32-vulkan-icd-loader
+ depends = lib32-libappindicator-gtk2
+ depends = lib32-libindicator-gtk2
+ depends = lib32-libdbusmenu-glib
+ depends = lib32-libdbusmenu-gtk2
optdepends = giflib
optdepends = lib32-giflib
optdepends = libpng
@@ -199,17 +471,19 @@ pkgbase = proton-experimental
optdepends = lib32-vulkan-icd-loader
optdepends = libgphoto2
optdepends = gsm
+ optdepends = lib32-gsm
optdepends = dosbox
+ optdepends = steam-native-runtime
provides = proton
- noextract = wine-gecko-2.47.2-x86.tar.xz
- noextract = wine-gecko-2.47.2-x86_64.tar.xz
- noextract = wine-mono-7.2.0-x86.tar.xz
+ noextract = wine-gecko-2.47.3-x86.tar.xz
+ noextract = wine-gecko-2.47.3-x86_64.tar.xz
+ noextract = wine-mono-7.3.0-x86.tar.xz
options = !staticlibs
options = !lto
options = emptydirs
- source = proton::git+https://github.com/ValveSoftware/Proton.git#tag=experimental-7.0-20220427c
+ source = proton::git+https://github.com/ValveSoftware/Proton.git#tag=experimental-7.0-20221027
source = wine-valve::git+https://github.com/ValveSoftware/wine.git
- source = dxvk-valve::git+https://github.com/ValveSoftware/dxvk.git
+ source = dxvk::git+https://github.com/doitsujin/dxvk.git
source = openvr::git+https://github.com/ValveSoftware/openvr.git
source = liberation-fonts::git+https://github.com/liberationfonts/liberation-fonts.git
source = gstreamer::git+https://gitlab.freedesktop.org/gstreamer/gstreamer.git
@@ -223,21 +497,20 @@ pkgbase = proton-experimental
source = Vulkan-Headers::git+https://github.com/KhronosGroup/Vulkan-Headers.git
source = SPIRV-Headers::git+https://github.com/KhronosGroup/SPIRV-Headers.git
source = Vulkan-Loader::git+https://github.com/KhronosGroup/Vulkan-Loader.git
+ source = glslang::git+https://github.com/KhronosGroup/glslang.git
source = gst-libav::git+https://gitlab.freedesktop.org/gstreamer/gst-libav.git
source = ffmpeg::git+https://git.ffmpeg.org/ffmpeg.git
source = dav1d::git+https://code.videolan.org/videolan/dav1d.git
source = gst-plugins-rs::git+https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
source = dxil-spirv::git+https://github.com/HansKristian-Work/dxil-spirv.git
- source = https://dl.winehq.org/wine/wine-gecko/2.47.2/wine-gecko-2.47.2-x86.tar.xz
- source = https://dl.winehq.org/wine/wine-gecko/2.47.2/wine-gecko-2.47.2-x86_64.tar.xz
- source = https://github.com/madewokherd/wine-mono/releases/download/wine-mono-7.2.0/wine-mono-7.2.0-x86.tar.xz
- source = dxvk-async-1.10.1.patch::https://raw.githubusercontent.com/Sporif/dxvk-async/1.10.1/dxvk-async.patch
- source = wine-25946b48148784e8275c1685f6498ab88f553ca3.patch
- source = wine-winevulkan_fsr.patch
- source = wine-more_8x5_res.patch
- source = proton-sanitize_makefile.patch
- source = proton-disable_lock.patch
- source = proton-user_compat_data.patch
+ source = graphene::git+https://github.com/ebassi/graphene.git
+ source = https://dl.winehq.org/wine/wine-gecko/2.47.3/wine-gecko-2.47.3-x86.tar.xz
+ source = https://dl.winehq.org/wine/wine-gecko/2.47.3/wine-gecko-2.47.3-x86_64.tar.xz
+ source = https://github.com/madewokherd/wine-mono/releases/download/wine-mono-7.3.0/wine-mono-7.3.0-x86.tar.xz
+ source = 0001-wldap32-25946b48148784e8275c1685f6498ab88f553ca3.patch
+ source = 0001-AUR-pkgbuild-changes.patch
+ sha256sums = SKIP
+ sha256sums = SKIP
sha256sums = SKIP
sha256sums = SKIP
sha256sums = SKIP
@@ -259,15 +532,10 @@ pkgbase = proton-experimental
sha256sums = SKIP
sha256sums = SKIP
sha256sums = SKIP
- sha256sums = 8fab46ea2110b2b0beed414e3ebb4e038a3da04900e7a28492ca3c3ccf9fea94
- sha256sums = b4476706a4c3f23461da98bed34f355ff623c5d2bb2da1e2fa0c6a310bc33014
- sha256sums = 25a4d08fee9197be83307e65553da450b6d4446cc9188d0a85212cc2cee2660d
- sha256sums = e6f042cdfd1d20d3bad0e5732696d453efde0502beacc3788e2af3568eeacd68
+ sha256sums = 08d318f3dd6440a8a777cf044ccab039b0d9c8809991d2180eb3c9f903135db3
+ sha256sums = 0beac419c20ee2e68a1227b6e3fa8d59fec0274ed5e82d0da38613184716ef75
+ sha256sums = 60314f255031b2f4dc49f22eacfcd2b3b8b2b491120d703b4b62cc1fef0f9bdd
sha256sums = 11aa65bb6b8da1814557edf18a3cdada80135b021634236feabf93d2a194838b
- sha256sums = d76b87410047f623accc846f15f849fe13275924c685ccfb95a91a8b22943e51
- sha256sums = 9005d8169266ba0b93be30e1475fe9a3697464796f553886c155ec1d77d71215
- sha256sums = 1176c3ef75516e2d0f4dad1dc6f8becb36018451a1fd7f59068d529101a046f8
- sha256sums = 6ba5728332e5ea2b717855b1cd5c6e13ddc5b3ec34bfed4a78dbe3ef8e289806
- sha256sums = 6126f8c93d73b7309fb22c244dae645c755c1ed8759caac3edc91d81a71e8f45
+ sha256sums = 6e0b8438dd3e0c56e5b9626ccb47d38a442358b0676335af77afcb86f8391572
pkgname = proton-experimental
diff --git a/proton-sanitize_makefile.patch b/0001-AUR-pkgbuild-changes.patch
index d1b154cf7ab5..492f446285ec 100644
--- a/proton-sanitize_makefile.patch
+++ b/0001-AUR-pkgbuild-changes.patch
@@ -1,5 +1,24 @@
+From a1948c5b463b1292aca5723c42beb8c04c6f7497 Mon Sep 17 00:00:00 2001
+From: Stelios Tsampas <loathingkernel@gmail.com>
+Date: Mon, 18 Oct 2021 21:31:31 +0300
+Subject: [PATCH] AUR pkgbuild changes
+
+---
+ Makefile.in | 70 ++++++++++++++++++++++++++++------
+ compatibilitytool.vdf.template | 2 +-
+ configure.sh | 2 +
+ make/rules-autoconf.mk | 4 +-
+ make/rules-cargo.mk | 4 +-
+ make/rules-cmake.mk | 4 +-
+ make/rules-common.mk | 18 +++++----
+ make/rules-configure.mk | 4 +-
+ make/rules-meson.mk | 3 +-
+ make/rules-winemaker.mk | 2 +-
+ proton | 6 +--
+ 11 files changed, 87 insertions(+), 32 deletions(-)
+
diff --git a/Makefile.in b/Makefile.in
-index 6cfb8c3..454da82 100644
+index 95d926e..f84c895 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -63,7 +63,6 @@ ifeq ($(ENABLE_CCACHE),1)
@@ -19,7 +38,7 @@ index 6cfb8c3..454da82 100644
endif
-@@ -175,11 +174,12 @@ else
+@@ -175,13 +174,28 @@ else
endif
CROSSLDFLAGS += -Wl,--file-alignment,4096
@@ -33,8 +52,24 @@ index 6cfb8c3..454da82 100644
+COMMON_FLAGS32 := -mstackrealign -mno-avx
CARGO_BUILD_ARG := --release
++ifneq ($(USE_LTO), 1)
++GST_LTO :=
++FFMPEG_LTO :=
++ifneq (,$(findstring -O3,$(CFLAGS)))
++FFMPEG_LTO_OPTS32 := --disable-inline-asm
++else
++FFMPEG_LTO_OPTS32 :=
++endif
++else
++GST_LTO := -Db_lto=true
++FFMPEG_LTO := --enable-lto
++FFMPEG_LTO_OPTS32 := --disable-inline-asm
++endif
++
+ ##
+ ## Target configs
##
-@@ -366,8 +366,8 @@ ALL_TARGETS += dist
+@@ -366,8 +380,8 @@ ALL_TARGETS += dist
GOAL_TARGETS += dist
dist_prefix: wine gst_good gst_libav gst_plugins_rs
@@ -45,44 +80,91 @@ index 6cfb8c3..454da82 100644
rm -rf $(abspath $(DIST_PREFIX))
python3 $(SRCDIR)/default_pfx.py $(abspath $(DIST_PREFIX)) $(abspath $(DST_DIR)) $(STEAM_RUNTIME_RUNSH)
-@@ -430,6 +430,11 @@ $(eval $(call rules-meson,dav1d,64))
+@@ -430,6 +444,7 @@ $(eval $(call rules-meson,dav1d,64))
##
- GST_COMMON_MESON_ARGS := \
-+ -Db_lto=true \
-+ -Db_pie=true \
-+ -Ddoc=disabled \
-+ -Dintrospection=disabled \
-+ -Dgobject-cast-checks=disabled \
- -Dorc=enabled
-
GST_ORC_MESON_ARGS := \
-@@ -450,6 +455,8 @@ GSTREAMER_MESON_ARGS := \
++ $(GST_LTO) \
+ -Dorc-test=disabled
+
+ $(eval $(call rules-source,gst_orc,$(SRCDIR)/gst-orc))
+@@ -442,9 +457,14 @@ $(eval $(call rules-meson,gst_orc,64))
+ ##
+
+ GSTREAMER_MESON_ARGS := \
++ $(GST_LTO) \
++ -Ddoc=disabled \
+ -Dgst_parse=false \
-Dbenchmarks=disabled \
-Dtools=disabled \
- -Dbash-completion=disabled \
+ -Dptp-helper-permissions=capabilities \
+ -Ddbghelp=disabled \
- $(GST_COMMON_MESON_ARGS)
++ -Dintrospection=disabled \
+ -Dbash-completion=disabled
GSTREAMER_DEPENDS = gst_orc
-@@ -691,7 +698,13 @@ WINE_SOURCE_ARGS = \
+@@ -458,6 +478,11 @@ $(eval $(call rules-meson,gstreamer,64))
+ ## graphene
+ ##
+
++GRAPHENE_MESON_ARGS := \
++ -Dtests=false \
++ -Dintrospection=disabled \
++ -Dinstalled_tests=false
++
+ $(eval $(call rules-source,graphene,$(SRCDIR)/graphene))
+ $(eval $(call rules-meson,graphene,32))
+ $(eval $(call rules-meson,graphene,64))
+@@ -468,6 +493,9 @@ $(eval $(call rules-meson,graphene,64))
+ ##
+
+ GST_BASE_MESON_ARGS := \
++ $(GST_LTO) \
++ -Ddoc=disabled \
++ -Dtools=disabled \
+ -Dauto_features=disabled \
+ -Dadder=enabled \
+ -Dapp=enabled \
+@@ -501,6 +529,8 @@ $(eval $(call rules-meson,gst_base,64))
+ ##
+
+ GST_GOOD_MESON_ARGS := \
++ $(GST_LTO) \
++ -Ddoc=disabled \
+ -Dauto_features=disabled \
+ -Daudioparsers=enabled \
+ -Dautodetect=enabled \
+@@ -531,11 +561,15 @@ $(eval $(call rules-meson,gst_good,64))
+
+ FFMPEG_CONFIGURE_ARGS := \
+ --enable-shared \
++ $(FFMPEG_LTO) \
+ --disable-static \
+ --disable-everything \
+ --disable-programs \
+ --disable-doc \
+
++FFMPEG_CONFIGURE_ARGS64 = --optflags="$(COMMON_FLAGS) $(COMMON_FLAGS64)"
++FFMPEG_CONFIGURE_ARGS32 = --optflags="$(COMMON_FLAGS) $(COMMON_FLAGS32)" $(FFMPEG_LTO_OPTS32)
++
+ $(eval $(call rules-source,ffmpeg,$(SRCDIR)/ffmpeg))
+ $(eval $(call rules-configure,ffmpeg,32))
+ $(eval $(call rules-configure,ffmpeg,64))
+@@ -742,7 +776,11 @@ WINE_SOURCE_ARGS = \
--exclude include/config.h.in \
WINE_CONFIGURE_ARGS = \
+ --with-x \
+ --with-gstreamer \
-+ --with-faudio \
--with-mingw \
-+ --without-vkd3d \
+ --without-oss \
+ --disable-win16 \
--disable-tests
WINE_CONFIGURE_ARGS64 = --enable-win64
-@@ -754,6 +767,9 @@ $(OBJ)/.vrclient-post-source:
- DXVK_MESON_ARGS32 = --bindir=$(DXVK_DST32)/lib/wine/dxvk
+@@ -806,6 +844,9 @@ DXVK_MESON_ARGS32 = --bindir=$(DXVK_DST32)/lib/wine/dxvk
DXVK_MESON_ARGS64 = --bindir=$(DXVK_DST64)/lib64/wine/dxvk
+ DXVK_DEPENDS = glslang
+DXVK_CPPFLAGS= -msse -msse2
+DXVK_LDFLAGS= -static -static-libgcc -static-libstdc++
@@ -90,7 +172,7 @@ index 6cfb8c3..454da82 100644
$(eval $(call rules-source,dxvk,$(SRCDIR)/dxvk))
$(eval $(call rules-meson,dxvk,32,CROSS))
$(eval $(call rules-meson,dxvk,64,CROSS))
-@@ -776,6 +792,9 @@ $(OBJ)/.dxvk-post-build32:
+@@ -828,6 +869,9 @@ $(OBJ)/.dxvk-post-build32:
DXVK_NVAPI_MESON_ARGS32 = --bindir=$(DXVK_NVAPI_DST32)/lib/wine/nvapi
DXVK_NVAPI_MESON_ARGS64 = --bindir=$(DXVK_NVAPI_DST64)/lib64/wine/nvapi
@@ -100,14 +182,14 @@ index 6cfb8c3..454da82 100644
$(eval $(call rules-source,dxvk-nvapi,$(SRCDIR)/dxvk-nvapi))
$(eval $(call rules-meson,dxvk-nvapi,32,CROSS))
$(eval $(call rules-meson,dxvk-nvapi,64,CROSS))
-@@ -839,10 +858,13 @@ VKD3D_PROTON_SOURCE_ARGS = \
+@@ -891,10 +935,14 @@ VKD3D_PROTON_SOURCE_ARGS = \
--exclude vkd3d_build.h.in \
--exclude vkd3d_version.h.in \
--VKD3D_PROTON_MESON_ARGS = -Denable_standalone_d3d12=true
+VKD3D_PROTON_MESON_ARGS = -Denable_d3d12=true
VKD3D_PROTON_MESON_ARGS32 = --bindir=$(VKD3D_PROTON_DST32)/lib/wine/vkd3d-proton
VKD3D_PROTON_MESON_ARGS64 = --bindir=$(VKD3D_PROTON_DST64)/lib64/wine/vkd3d-proton
+ VKD3D_PROTON_DEPENDS = glslang
+VKD3D_PROTON_CPPFLAGS= -msse -msse2
+VKD3D_PROTON_LDFLAGS= -static -static-libgcc -static-libstdc++
@@ -115,7 +197,7 @@ index 6cfb8c3..454da82 100644
$(eval $(call rules-source,vkd3d-proton,$(SRCDIR)/vkd3d-proton))
$(eval $(call rules-meson,vkd3d-proton,32,CROSS))
$(eval $(call rules-meson,vkd3d-proton,64,CROSS))
-@@ -1080,14 +1102,14 @@ $(FONTS_OBJ)/source-han/%.ttf: $$(%.ttf_CIDFONT) $$(%.ttf_FEATURES) $$(%.ttf_SEQ
+@@ -1132,14 +1180,14 @@ $(FONTS_OBJ)/source-han/%.ttf: $$(%.ttf_CIDFONT) $$(%.ttf_FEATURES) $$(%.ttf_SEQ
mkdir -p $(FONTS_OBJ)/source-han
# Do not immediately create the target file, so that make is interrupted
# it will restart again
@@ -133,7 +215,7 @@ index 6cfb8c3..454da82 100644
mv $@.tmp $@
$(FONTS_OBJ)/ume-gothic/%.ttf: $$(%.ttf_FONT) $$(%.ttf_NAMETABLE_PATCH)
-@@ -1097,10 +1119,10 @@ $(FONTS_OBJ)/ume-gothic/%.ttf: $$(%.ttf_FONT) $$(%.ttf_NAMETABLE_PATCH)
+@@ -1149,10 +1197,10 @@ $(FONTS_OBJ)/ume-gothic/%.ttf: $$(%.ttf_FONT) $$(%.ttf_NAMETABLE_PATCH)
ttx -o $@ -m $($(notdir $@)_FONT) $(FONTS_OBJ)/ume-gothic/$(notdir $(basename $($(notdir $@)_NAMETABLE_PATCH))).ttx
$(simsun.ttc): $(simsun.ttf) $(nsimsun.ttf)
@@ -146,8 +228,21 @@ index 6cfb8c3..454da82 100644
$(micross.ttf): $(noto_sans.ttf) $(noto_sans_arabic.ttf) $(noto_sans_armenian.ttf) $(noto_sans_bengali.ttf) $(noto_sans_coptic.ttf) \
$(noto_sans_georgian.ttf) $(noto_sans_gujarati.ttf) $(noto_sans_hebrew.ttf) $(noto_sans_khmer.ttf) $(noto_sans_tamil.ttf) \
+diff --git a/compatibilitytool.vdf.template b/compatibilitytool.vdf.template
+index 5ac60e8..e580cd2 100644
+--- a/compatibilitytool.vdf.template
++++ b/compatibilitytool.vdf.template
+@@ -14,7 +14,7 @@
+ "install_path" "."
+
+ // For this template, we're going to substitute the display_name key in here, e.g.:
+- "display_name" "##BUILD_NAME##"
++ "display_name" "##BUILD_NAME## (Unsupported AUR package [native])"
+
+ "from_oslist" "windows"
+ "to_oslist" "linux"
diff --git a/configure.sh b/configure.sh
-index 337781e..0ceabc5 100755
+index d743876..90b7aae 100755
--- a/configure.sh
+++ b/configure.sh
@@ -126,6 +126,7 @@ function configure() {
@@ -215,7 +310,7 @@ index c70751a..1096dc1 100644
endif
endef
diff --git a/make/rules-common.mk b/make/rules-common.mk
-index 78f0f61..1ab144c 100644
+index 115c2b0..c6bf0ef 100644
--- a/make/rules-common.mk
+++ b/make/rules-common.mk
@@ -113,7 +113,11 @@ $(2)_LIBFLAGS$(3) = $$(foreach d,$$($(2)_DEPS$(3)),-L$$($$(d)_LIBDIR$(3))) \
@@ -231,7 +326,7 @@ index 78f0f61..1ab144c 100644
STRIP="$$(STRIP)" \
AR="$$(TARGET_$(4)$(3))-ar" \
@@ -127,7 +131,7 @@ $(2)_ENV$(3) = \
- PATH="$$(call list-join,:,$$(foreach d,$$($(2)_DEPS$(3)),$$($$(d)_BINDIR$(3))),,:):$$(SRC)/glslang/bin:$$$$PATH" \
+ PATH="$$(call list-join,:,$$(foreach d,$$($(2)_DEPS$(3)),$$($$(d)_BINDIR$(3))),,:):$$$$PATH" \
LD_LIBRARY_PATH="$$(call list-join,:,$$(foreach d,$$($(2)_DEPS$(3)),$$($$(d)_LIBDIR$(3))),,:)$$$$LD_LIBRARY_PATH" \
PKG_CONFIG_PATH="$$(call list-join,:,$$(foreach d,$$($(2)_DEPS$(3)),$$($$(d)_LIBDIR$(3))/pkgconfig))" \
- PKG_CONFIG_LIBDIR="/usr/lib/$$(PKG_CONFIG_TARGET_$(4)$(3))/pkgconfig:/usr/share/pkgconfig" \
@@ -285,10 +380,18 @@ index d04a3c5..18ac684 100644
endif
endef
diff --git a/make/rules-meson.mk b/make/rules-meson.mk
-index d603bfd..f798edf 100644
+index d603bfd..3fd3d47 100644
--- a/make/rules-meson.mk
+++ b/make/rules-meson.mk
-@@ -60,7 +60,7 @@ $$(OBJ)/.$(1)-configure$(3): $$($(2)_SRC)/meson.build
+@@ -47,6 +47,7 @@ $$(OBJ)/.$(1)-configure$(3): $$($(2)_SRC)/meson.build
+
+ env $$($(2)_ENV$(3)) \
+ meson "$$($(2)_OBJ$(3))" "$$($(2)_SRC)" \
++ --wrap-mode=nodownload \
+ --prefix="$$($(2)_DST$(3))" \
+ --libdir="lib$(subst 32,,$(3))" \
+ --buildtype=plain \
+@@ -60,7 +61,7 @@ $$(OBJ)/.$(1)-configure$(3): $$($(2)_SRC)/meson.build
$$(OBJ)/.$(1)-build$(3):
@echo ":: building $(3)bit $(1)..." >&2
env $$($(2)_ENV$(3)) \
@@ -310,3 +413,37 @@ index 69688a0..1c0d1d3 100644
cd "$$($(2)_OBJ$(3))" && touch "$(basename $(4)).spec" && env $$($(2)_ENV$(3)) \
winebuild --$(lastword $(subst ., ,$(4))) --fake-module -E "$(basename $(4)).spec" -o "$(4).fake"
mkdir -p $$($(2)_LIBDIR$(3))/$(LIBDIR_WINE_$(3))
+diff --git a/proton b/proton
+index a79f166..f9767bf 100755
+--- a/proton
++++ b/proton
+@@ -417,7 +417,6 @@ class Proton:
+ self.wine_bin = self.bin_dir + "wine"
+ self.wine64_bin = self.bin_dir + "wine64"
+ self.wineserver_bin = self.bin_dir + "wineserver"
+- self.dist_lock = FileLock(self.path("dist.lock"), timeout=-1)
+
+ def path(self, d):
+ return self.base_dir + d
+@@ -1599,8 +1598,6 @@ if __name__ == "__main__":
+
+ g_proton = Proton(os.path.dirname(sys.argv[0]))
+
+- g_proton.cleanup_legacy_dist()
+- g_proton.do_steampipe_fixups()
+
+ g_compatdata = CompatData(os.environ["STEAM_COMPAT_DATA_PATH"])
+
+@@ -1609,7 +1606,8 @@ if __name__ == "__main__":
+ g_session.init_wine()
+
+ if g_proton.missing_default_prefix():
+- g_proton.make_default_prefix()
++ log("Default prefix is missing, something is very wrong.")
++ sys.exit(1)
+
+ g_session.init_session(sys.argv[1] != "runinprefix")
+
+--
+2.38.1
+
diff --git a/wine-25946b48148784e8275c1685f6498ab88f553ca3.patch b/0001-wldap32-25946b48148784e8275c1685f6498ab88f553ca3.patch
index c65a533a7d9c..c65a533a7d9c 100644
--- a/wine-25946b48148784e8275c1685f6498ab88f553ca3.patch
+++ b/0001-wldap32-25946b48148784e8275c1685f6498ab88f553ca3.patch
diff --git a/PKGBUILD b/PKGBUILD
index 55d33ce06a13..0db3c7cdd923 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,13 +1,12 @@
# Maintainer: loathingkernel <loathingkernel _a_ gmail _d_ com>
pkgname=proton-experimental
-_srctag=7.0-20220427c
+_srctag=7.0-20221027
_commit=
pkgver=${_srctag//-/.}
-_geckover=2.47.2
-_monover=7.2.0
-_asyncver=1.10.1
-pkgrel=3
+_geckover=2.47.3
+_monover=7.3.0
+pkgrel=1
epoch=1
pkgdesc="Compatibility tool for Steam Play based on Wine and additional components, experimental branch"
url="https://github.com/ValveSoftware/Proton"
@@ -32,16 +31,31 @@ depends=(
libpcap lib32-libpcap
lzo lib32-lzo
libxkbcommon lib32-libxkbcommon
- faudio lib32-faudio
libvpx lib32-libvpx
'sdl2>=2.0.16' 'lib32-sdl2>=2.0.16'
+ libsoup lib32-libsoup
+ libgudev lib32-libgudev
desktop-file-utils
python
- steam-native-runtime
+ # Steam native runtime listed here because of atk conflict
+ bash steam alsa-lib alsa-plugins at-spi2-core cairo curl dbus-glib fontconfig freetype2 freeglut gdk-pixbuf2 glew1.10 glib2 glu gtk2
+ lib32-alsa-lib lib32-alsa-plugins lib32-at-spi2-core lib32-cairo lib32-curl lib32-dbus-glib lib32-fontconfig lib32-freetype2 lib32-freeglut
+ lib32-gdk-pixbuf2 lib32-glew1.10 lib32-glib2 lib32-glu lib32-gtk2 lib32-libcaca lib32-libcanberra lib32-libcups lib32-libcurl-compat
+ lib32-libcurl-gnutls lib32-dbus lib32-libdrm lib32-libgcrypt15 lib32-libice lib32-libidn11 lib32-libjpeg6 lib32-libnm lib32-pipewire
+ lib32-libpng12 lib32-libpulse lib32-librtmp0 lib32-libsm lib32-libtheora lib32-libtiff4 lib32-libudev0-shim lib32-libusb lib32-libva
+ lib32-libvdpau lib32-libvorbis lib32-libvpx1.3 lib32-libwrap lib32-libxcomposite lib32-libxcursor lib32-libxft lib32-libxi
+ lib32-libxinerama lib32-libxmu lib32-libxrandr lib32-libxrender lib32-libxtst lib32-libxxf86vm lib32-nspr lib32-openal
+ lib32-openssl-1.0 lib32-pango lib32-sdl lib32-sdl2 lib32-sdl2_image lib32-sdl2_mixer lib32-sdl2_ttf lib32-sdl_image lib32-sdl_mixer
+ lib32-sdl_ttf libcaca libcanberra libcups libcurl-compat libcurl-gnutls dbus libdrm libgcrypt15 libice libidn11 libjpeg6 libnm
+ libpng12 libpulse librsvg librtmp0 libsm libtheora libtiff4 libudev0-shim libusb libva libvdpau libvorbis libvpx1.3 libwrap
+ libxcomposite libxcursor libxft libxi libxinerama libxmu libxrandr libxrender libxtst libxxf86vm nspr openal openssl-1.0 pango
+ sdl sdl2 sdl2_image sdl2_mixer sdl2_ttf sdl_image sdl_mixer sdl_ttf vulkan-icd-loader vulkan-driver lib32-vulkan-driver
+ lib32-vulkan-icd-loader lib32-libappindicator-gtk2 lib32-libindicator-gtk2 lib32-libdbusmenu-glib lib32-libdbusmenu-gtk2
+ # End of steam native runtime
)
makedepends=(autoconf bison perl fontforge flex mingw-w64-gcc
- git wget rsync mingw-w64-tools lld nasm meson cmake python-virtualenv python-pip
+ git wget rsync mingw-w64-tools lld nasm meson cmake afdko python-pefile
glslang vulkan-headers
clang
giflib lib32-giflib
@@ -69,7 +83,7 @@ makedepends=(autoconf bison perl fontforge flex mingw-w64-gcc
'sdl2>=2.0.16' 'lib32-sdl2>=2.0.16'
rust lib32-rust-libs
libgphoto2
- gsm
+ gsm lib32-gsm
opencl-headers
)
@@ -94,17 +108,18 @@ optdepends=(
gst-plugins-base-libs lib32-gst-plugins-base-libs
vulkan-icd-loader lib32-vulkan-icd-loader
libgphoto2
- gsm
+ gsm lib32-gsm
dosbox
+ steam-native-runtime
)
makedepends=(${makedepends[@]} ${depends[@]})
provides=('proton')
-#install=${pkgname}.install
+install=${pkgname}.install
source=(
proton::git+https://github.com/ValveSoftware/Proton.git#tag=experimental-${_srctag}
wine-valve::git+https://github.com/ValveSoftware/wine.git
- dxvk-valve::git+https://github.com/ValveSoftware/dxvk.git
+ dxvk::git+https://github.com/doitsujin/dxvk.git
openvr::git+https://github.com/ValveSoftware/openvr.git
liberation-fonts::git+https://github.com/liberationfonts/liberation-fonts.git
gstreamer::git+https://gitlab.freedesktop.org/gstreamer/gstreamer.git
@@ -118,20 +133,17 @@ source=(
Vulkan-Headers::git+https://github.com/KhronosGroup/Vulkan-Headers.git
SPIRV-Headers::git+https://github.com/KhronosGroup/SPIRV-Headers.git
Vulkan-Loader::git+https://github.com/KhronosGroup/Vulkan-Loader.git
+ glslang::git+https://github.com/KhronosGroup/glslang.git
gst-libav::git+https://gitlab.freedesktop.org/gstreamer/gst-libav.git
ffmpeg::git+https://git.ffmpeg.org/ffmpeg.git
dav1d::git+https://code.videolan.org/videolan/dav1d.git
gst-plugins-rs::git+https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
dxil-spirv::git+https://github.com/HansKristian-Work/dxil-spirv.git
+ graphene::git+https://github.com/ebassi/graphene.git
https://dl.winehq.org/wine/wine-gecko/${_geckover}/wine-gecko-${_geckover}-x86{,_64}.tar.xz
https://github.com/madewokherd/wine-mono/releases/download/wine-mono-${_monover}/wine-mono-${_monover}-x86.tar.xz
- dxvk-async-${_asyncver}.patch::https://raw.githubusercontent.com/Sporif/dxvk-async/${_asyncver}/dxvk-async.patch
- wine-25946b48148784e8275c1685f6498ab88f553ca3.patch
- wine-winevulkan_fsr.patch
- wine-more_8x5_res.patch
- proton-sanitize_makefile.patch
- proton-disable_lock.patch
- proton-user_compat_data.patch
+ 0001-wldap32-25946b48148784e8275c1685f6498ab88f553ca3.patch
+ 0001-AUR-pkgbuild-changes.patch
)
noextract=(
wine-gecko-${_geckover}-{x86,x86_64}.tar.xz
@@ -146,7 +158,7 @@ _make_wrappers () {
declare -n _opt
for _opt in "${_opts[@]}"; do
for l in ar ranlib nm; do
- ln -s /usr/bin/$l wrappers/${_opt[0]}-pc-linux-gnu-$l
+ ln -s /usr/bin/gcc-$l wrappers/${_opt[0]}-pc-linux-gnu-$l
done
for t in gcc g++; do
install -Dm755 /dev/stdin wrappers/${_opt[0]}-pc-linux-gnu-$t <<EOF
@@ -170,15 +182,6 @@ EOF
}
prepare() {
- # I know this is fugly and it should NOT be done
- # but the afdko package from AUR breaks regularly.
- # Install it from pip in a virtualenv
- [ -d build_venv ] && rm -rf build_venv
- virtualenv --app-data "$srcdir"/build_venv/cache --no-wheel build_venv
- source build_venv/bin/activate
- pip install --no-cache-dir meson==0.59.3
- pip install --no-cache-dir afdko
- pip install --no-cache-dir pefile
# Provide wrappers to compiler tools
rm -rf wrappers && mkdir wrappers
@@ -195,7 +198,7 @@ prepare() {
_submodules=(
wine-valve::wine
- dxvk-valve::dxvk
+ dxvk
openvr
liberation-fonts::fonts/liberation-fonts
gstreamer
@@ -209,35 +212,46 @@ prepare() {
Vulkan-Headers
SPIRV-Headers
Vulkan-Loader
+ glslang
gst-libav
ffmpeg
dav1d
gst-plugins-rs
+ graphene
)
for submodule in "${_submodules[@]}"; do
git submodule init "${submodule#*::}"
- git config submodule."${submodule#*::}".url "$srcdir"/"${submodule%::*}"
- git submodule update "${submodule#*::}"
+ git submodule set-url "${submodule#*::}" "$srcdir"/"${submodule%::*}"
+ git -c protocol.file.allow=always submodule update "${submodule#*::}"
done
+ pushd dxvk
+ git submodule init include/{vulkan,spirv}
+ git submodule set-url include/vulkan "$srcdir/Vulkan-Headers"
+ git submodule set-url include/spirv "$srcdir/SPIRV-Headers"
+ git -c protocol.file.allow=always submodule update include/{vulkan,spirv}
+ popd
+
pushd vkd3d-proton
for submodule in subprojects/{dxil-spirv,Vulkan-Headers,SPIRV-Headers}; do
git submodule init "${submodule}"
- git config submodule."${submodule}".url "$srcdir"/"${submodule#*/}"
- git submodule update "${submodule}"
+ git submodule set-url "${submodule}" "$srcdir"/"${submodule#*/}"
+ git -c protocol.file.allow=always submodule update "${submodule}"
done
pushd subprojects/dxil-spirv
git submodule init third_party/spirv-headers
- git config submodule.third_party/spirv-headers.url "$srcdir"/SPIRV-Headers
- git submodule update third_party/spirv-headers
+ git submodule set-url third_party/spirv-headers "$srcdir"/SPIRV-Headers
+ git -c protocol.file.allow=always submodule update third_party/spirv-headers
popd
popd
pushd dxvk-nvapi
git submodule init external/Vulkan-Headers
- git config submodule.external/Vulkan-Headers.url "$srcdir"/Vulkan-Headers
- git submodule update external/Vulkan-Headers
+ git submodule set-url external/Vulkan-Headers "$srcdir"/Vulkan-Headers
+ git -c protocol.file.allow=always submodule update external/Vulkan-Headers
+ # GCC 12 build failure
+ git cherry-pick -n 33bf3c7a6a3dc9e330cd338bf1877b5481c655e3
popd
for submodule in gst-plugins-rs media-converter; do
@@ -256,24 +270,10 @@ prepare() {
# Fix openldap 2.5+ detection
sed 's/-lldap_r/-lldap/' -i configure
# Fix wldap32 compilation on 32bit
- patch -p1 -i "$srcdir"/wine-25946b48148784e8275c1685f6498ab88f553ca3.patch
- # Add FSR for fshack
- #patch -p1 -i "$srcdir"/wine-winevulkan_fsr.patch
- # Adds more 16:10 resolutions for use with FSR
- #patch -p1 -i "$srcdir"/wine-more_8x5_res.patch
+ patch -p1 -i "$srcdir"/0001-wldap32-25946b48148784e8275c1685f6498ab88f553ca3.patch
popd
- pushd dxvk
- # Uncomment to enable dxvk async patch.
- # Enable at your own risk. If you don't know what it is,
- # and its implications, leave it as is. You have been warned.
- # I am not liable if anything happens to you by using it.
- #patch -p1 -i "$srcdir"/dxvk-async-${_asyncver}.patch
- popd
-
- patch -p1 -i "$srcdir"/proton-sanitize_makefile.patch
- patch -p1 -i "$srcdir"/proton-disable_lock.patch
- patch -p1 -i "$srcdir"/proton-user_compat_data.patch
+ patch -p1 -i "$srcdir"/0001-AUR-pkgbuild-changes.patch
# Remove repos from srcdir to save space
for submodule in "${_submodules[@]}"; do
@@ -285,7 +285,6 @@ prepare() {
}
build() {
- source build_venv/bin/activate
export PATH="$(pwd)/wrappers:$PATH"
cd build
@@ -297,30 +296,13 @@ build() {
--no-proton-sdk \
--build-name="${pkgname}"
- # Filter known bad flags before applying optimizations
- # Filter fstack-protector{ ,-all,-strong} flag for MingW.
- # https://github.com/Joshua-Ashton/d9vk/issues/476
- export CFLAGS="${CFLAGS// -fstack-protector*([\-all|\-strong])/}"
- export CXXFLAGS="${CXXFLAGS// -fstack-protector*([\-all|\-strong])/}"
- # From wine-staging PKGBUILD
- # Doesn't compile with these flags in MingW so remove them.
- # They are also filtered in Wine PKGBUILDs so remove them
- # for winelib versions too.
- # Doesn't compile without remove these flags as of 4.10
- export CFLAGS="${CFLAGS/ -fno-plt/}"
- export CXXFLAGS="${CXXFLAGS/ -fno-plt/}"
- export LDFLAGS="${LDFLAGS/,-z,now/}"
- # MingW Wine builds fail with relro
- export LDFLAGS="${LDFLAGS/,-z,relro/}"
-
# By default export FLAGS used by proton and ignore makepkg
# This overrides FLAGS from makepkg.conf, if you comment these you are on your own
# If you want the "best" possible optimizations for your system you can use
# `-march=native` and remove the `-mtune=core-avx2` option.
- # `-O2` is adjusted to `-O3` since AVX is disabled
- export CFLAGS="-O3 -march=nocona -mtune=core-avx2 -pipe"
- export CXXFLAGS="-O3 -march=nocona -mtune=core-avx2 -pipe"
- export RUSTFLAGS="-C opt-level=3 -C target-cpu=nocona"
+ export CFLAGS="-O2 -march=nocona -mtune=core-avx2 -pipe"
+ export CXXFLAGS="-O2 -march=nocona -mtune=core-avx2 -pipe"
+ export RUSTFLAGS="-C opt-level=2 -C target-cpu=nocona"
export LDFLAGS="-Wl,-O1,--sort-common,--as-needed"
# If using -march=native and the CPU supports AVX, launching a d3d9
@@ -401,13 +383,10 @@ sha256sums=('SKIP'
'SKIP'
'SKIP'
'SKIP'
- '8fab46ea2110b2b0beed414e3ebb4e038a3da04900e7a28492ca3c3ccf9fea94'
- 'b4476706a4c3f23461da98bed34f355ff623c5d2bb2da1e2fa0c6a310bc33014'
- '25a4d08fee9197be83307e65553da450b6d4446cc9188d0a85212cc2cee2660d'
- 'e6f042cdfd1d20d3bad0e5732696d453efde0502beacc3788e2af3568eeacd68'
+ 'SKIP'
+ 'SKIP'
+ '08d318f3dd6440a8a777cf044ccab039b0d9c8809991d2180eb3c9f903135db3'
+ '0beac419c20ee2e68a1227b6e3fa8d59fec0274ed5e82d0da38613184716ef75'
+ '60314f255031b2f4dc49f22eacfcd2b3b8b2b491120d703b4b62cc1fef0f9bdd'
'11aa65bb6b8da1814557edf18a3cdada80135b021634236feabf93d2a194838b'
- 'd76b87410047f623accc846f15f849fe13275924c685ccfb95a91a8b22943e51'
- '9005d8169266ba0b93be30e1475fe9a3697464796f553886c155ec1d77d71215'
- '1176c3ef75516e2d0f4dad1dc6f8becb36018451a1fd7f59068d529101a046f8'
- '6ba5728332e5ea2b717855b1cd5c6e13ddc5b3ec34bfed4a78dbe3ef8e289806'
- '6126f8c93d73b7309fb22c244dae645c755c1ed8759caac3edc91d81a71e8f45')
+ '6e0b8438dd3e0c56e5b9626ccb47d38a442358b0676335af77afcb86f8391572')
diff --git a/proton-disable_lock.patch b/proton-disable_lock.patch
deleted file mode 100644
index 69ad39ae6da7..000000000000
--- a/proton-disable_lock.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-diff --git a/proton b/proton
-index ad8efaf..a6b9bf1 100755
---- a/proton
-+++ b/proton
-@@ -345,7 +345,6 @@ class Proton:
- self.wine_bin = self.bin_dir + "wine"
- self.wine64_bin = self.bin_dir + "wine64"
- self.wineserver_bin = self.bin_dir + "wineserver"
-- self.dist_lock = FileLock(self.path("dist.lock"), timeout=-1)
-
- def path(self, d):
- return self.base_dir + d
-@@ -1361,8 +1360,6 @@ if __name__ == "__main__":
-
- g_proton = Proton(os.path.dirname(sys.argv[0]))
-
-- g_proton.cleanup_legacy_dist()
-- g_proton.do_steampipe_fixups()
-
- g_compatdata = CompatData(os.environ["STEAM_COMPAT_DATA_PATH"])
-
-@@ -1371,7 +1368,8 @@ if __name__ == "__main__":
- g_session.init_wine()
-
- if g_proton.missing_default_prefix():
-- g_proton.make_default_prefix()
-+ log("Default prefix is missing, something is very wrong.")
-+ sys.exit(1)
-
- g_session.init_session(sys.argv[1] != "runinprefix")
-
diff --git a/proton-experimental.install b/proton-experimental.install
new file mode 100644
index 000000000000..462b81d0fe8d
--- /dev/null
+++ b/proton-experimental.install
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+post_install() {
+ echo ":: This package, due to the way it is built and packaged is officialy UNSUPPORTED"
+ echo " by Valve. Please do not bother them if something doesn't run with it."
+ echo " If something does NOT run with this package, but DOES run with the same official"
+ echo " version, installed according to upstream instructions, feel free to report it through"
+ echo " the AUR comment section."
+ echo " "
+ echo " This version of Proton is meant to be used with \"steam-native\" from the"
+ echo " \"steam-native-rutime\" package on Arch Linux"
+}
+
+post_upgrade() {
+ post_install
+}
diff --git a/proton-user_compat_data.patch b/proton-user_compat_data.patch
deleted file mode 100644
index d14aebcd9d04..000000000000
--- a/proton-user_compat_data.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-diff --git a/proton b/proton
-index ad8efaf..303ab00 100755
---- a/proton
-+++ b/proton
-@@ -1359,6 +1359,15 @@ if __name__ == "__main__":
- log("No compat data path?")
- sys.exit(1)
-
-+ if "PROTON_USER_COMPAT_DATA" in os.environ:
-+ if nonzero(os.environ["PROTON_USER_COMPAT_DATA"]):
-+ compatpath = os.environ["STEAM_COMPAT_DATA_PATH"].split('/')
-+ os.environ["STEAM_COMPAT_DATA_PATH"] = "{}/{}/{}/{}".format(
-+ os.environ["STEAM_COMPAT_CLIENT_INSTALL_PATH"],
-+ compatpath[-3], compatpath[-2], compatpath[-1])
-+ if not os.path.exists(os.environ["STEAM_COMPAT_DATA_PATH"]):
-+ os.makedirs(os.environ["STEAM_COMPAT_DATA_PATH"])
-+
- g_proton = Proton(os.path.dirname(sys.argv[0]))
-
- g_proton.cleanup_legacy_dist()
diff --git a/wine-futex_waitv.patch b/wine-futex_waitv.patch
deleted file mode 100644
index bf1445fd50d6..000000000000
--- a/wine-futex_waitv.patch
+++ /dev/null
@@ -1,104 +0,0 @@
-From 3196885798787b6a52dbef0f3968f6b5e0216c56 Mon Sep 17 00:00:00 2001
-From: Dmitry Skvortsov <lvb.crd@protonmail.com>
-Date: Sun, 26 Dec 2021 16:32:58 +0300
-Subject: [PATCH 1/2] Separate check for definition of FUTEX_32 and struct futex_waitv
-
----
- dlls/ntdll/unix/fsync.c | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/dlls/ntdll/unix/fsync.c b/dlls/ntdll/unix/fsync.c
-index 39d969f061d..c6869b62b4b 100644
---- a/dlls/ntdll/unix/fsync.c
-+++ b/dlls/ntdll/unix/fsync.c
-@@ -64,8 +64,10 @@ WINE_DEFAULT_DEBUG_CHANNEL(fsync);
- /* futex_waitv interface */
-
- #ifndef __NR_futex_waitv
--
- # define __NR_futex_waitv 449
-+#endif
-+
-+#ifndef FUTEX_32
- # define FUTEX_32 2
- struct futex_waitv {
- uint64_t val;
-@@ -73,7 +75,6 @@ struct futex_waitv {
- uint32_t flags;
- uint32_t __reserved;
- };
--
- #endif
-
- #define u64_to_ptr(x) (void *)(uintptr_t)(x)
---
-2.34.1
-
-From 2c15b20ad7dd57778ad2354a14dd441d1cd6cf4f Mon Sep 17 00:00:00 2001
-From: Dmitry Skvortsov <lvb.crd@protonmail.com>
-Date: Sun, 26 Dec 2021 16:45:21 +0300
-Subject: [PATCH 2/2] Add check for linux/futex.h
-
----
- configure | 6 ++++++
- configure.ac | 1 +
- dlls/ntdll/unix/fsync.c | 3 +++
- include/config.h.in | 3 +++
- 4 files changed, 13 insertions(+)
-
-diff --git a/configure b/configure
-index ab3aa34a922..d2bcd778c59 100755
---- a/configure
-+++ b/configure
-@@ -8317,6 +8317,12 @@ if test "x$ac_cv_header_linux_filter_h" = xyes
- then :
- printf "%s\n" "#define HAVE_LINUX_FILTER_H 1" >>confdefs.h
-
-+fi
-+ac_fn_c_check_header_compile "$LINENO" "linux/futex.h" "ac_cv_header_linux_futex_h" "$ac_includes_default"
-+if test "x$ac_cv_header_linux_futex_h" = xyes
-+then :
-+ printf "%s\n" "#define HAVE_LINUX_FUTEX_H 1" >>confdefs.h
-+
- fi
- ac_fn_c_check_header_compile "$LINENO" "linux/hdreg.h" "ac_cv_header_linux_hdreg_h" "$ac_includes_default"
- if test "x$ac_cv_header_linux_hdreg_h" = xyes
-diff --git a/include/config.h.in b/include/config.h.in
-index 9eb052c6248..910cce10693 100644
---- a/include/config.h.in
-+++ b/include/config.h.in
-@@ -200,6 +200,9 @@
- /* Define to 1 if you have the <linux/filter.h> header file. */
- #undef HAVE_LINUX_FILTER_H
-
-+/* Define to 1 if you have the <linux/futex.h> header file. */
-+#undef HAVE_LINUX_FUTEX_H
-+
- /* Define if Linux-style gethostbyname_r and gethostbyaddr_r are available */
- #undef HAVE_LINUX_GETHOSTBYNAME_R_6
-
-diff --git a/configure.ac b/configure.ac
-index 3071da61b62..cfe27460a96 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -450,2 +450,3 @@ AC_CHECK_HEADERS(\
- linux/filter.h \
-+ linux/futex.h \
- linux/hdreg.h \
-diff --git a/dlls/ntdll/unix/fsync.c b/dlls/ntdll/unix/fsync.c
-index c6869b62b4b..6d69c643244 100644
---- a/dlls/ntdll/unix/fsync.c
-+++ b/dlls/ntdll/unix/fsync.c
-@@ -27,6 +27,9 @@
- #include <assert.h>
- #include <errno.h>
- #include <fcntl.h>
-+#ifdef HAVE_LINUX_FUTEX_H
-+# include <linux/futex.h>
-+#endif
- #include <limits.h>
- #include <stdarg.h>
- #include <stdio.h>
---
-2.34.1
-
diff --git a/wine-more_8x5_res.patch b/wine-more_8x5_res.patch
deleted file mode 100644
index acc09936ffd3..000000000000
--- a/wine-more_8x5_res.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-diff --git a/dlls/winex11.drv/fs.c b/dlls/winex11.drv/fs.c
-index c37899605e7..6470d2ffbb9 100644
---- a/dlls/winex11.drv/fs.c
-+++ b/dlls/winex11.drv/fs.c
-@@ -78,6 +78,10 @@ static struct fs_monitor_size fs_monitor_sizes[] =
- {2880, 1620}, /* 16:9 */
- {2954, 1662}, /* 16:9 - 'FSR 2160p Ultra Quality' */
- {3200, 1800}, /* 16:9 */
-+ {640, 400}, /* 8:5 */
-+ {840, 525}, /* 8:5 */
-+ {960, 600}, /* 8:5 */
-+ {1280, 800}, /* 8:5 */
- {1440, 900}, /* 8:5 */
- {1680, 1050}, /* 8:5 */
- {1920, 1200}, /* 8:5 */
diff --git a/wine-winevulkan_fsr.patch b/wine-winevulkan_fsr.patch
deleted file mode 100644
index edfb00596dcd..000000000000
--- a/wine-winevulkan_fsr.patch
+++ /dev/null
@@ -1,2406 +0,0 @@
-From d22100ebae38b85531d761c2dd5fcb6e3d17961d Mon Sep 17 00:00:00 2001
-From: Georg Lehmann <dadschoorse@gmail.com>
-Date: Sat, 26 Jun 2021 17:46:47 +0200
-Subject: [PATCH] winevulkan: fshack: Enable
- shaderStorageImageWriteWithoutFormat.
-
-Signed-off-by: Georg Lehmann <dadschoorse@gmail.com>
----
- dlls/winevulkan/vulkan.c | 22 ++++++++++++++++++++++
- 1 file changed, 22 insertions(+)
-
-diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c
-index e159c87159c..bcd0dfb9823 100644
---- a/dlls/winevulkan/vulkan.c
-+++ b/dlls/winevulkan/vulkan.c
-@@ -879,6 +879,8 @@ VkResult WINAPI __wine_create_vk_device_with_callback(VkPhysicalDevice phys_dev,
- VkResult (WINAPI *native_vkCreateDevice)(VkPhysicalDevice, const VkDeviceCreateInfo *, const VkAllocationCallbacks *,
- VkDevice *, void * (*)(VkInstance, const char *), void *), void *native_vkCreateDevice_context)
- {
-+ VkPhysicalDeviceFeatures features = {0};
-+ VkPhysicalDeviceFeatures2 *features2;
- VkDeviceCreateInfo create_info_host;
- uint32_t max_queue_families;
- struct VkDevice_T *object;
-@@ -914,6 +916,25 @@ VkResult WINAPI __wine_create_vk_device_with_callback(VkPhysicalDevice phys_dev,
- if (res != VK_SUCCESS)
- goto fail;
-
-+ /* Enable shaderStorageImageWriteWithoutFormat for fshack
-+ * XXX check if available
-+ */
-+ if (create_info_host.pEnabledFeatures)
-+ {
-+ features = *create_info_host.pEnabledFeatures;
-+ features.shaderStorageImageWriteWithoutFormat = VK_TRUE;
-+ create_info_host.pEnabledFeatures = &features;
-+ }
-+ if ((features2 = wine_vk_find_struct(&create_info_host, PHYSICAL_DEVICE_FEATURES_2)))
-+ {
-+ features2->features.shaderStorageImageWriteWithoutFormat = VK_TRUE;
-+ }
-+ else if (!create_info_host.pEnabledFeatures)
-+ {
-+ features.shaderStorageImageWriteWithoutFormat = VK_TRUE;
-+ create_info_host.pEnabledFeatures = &features;
-+ }
-+
- if (native_vkCreateDevice)
- res = native_vkCreateDevice(phys_dev->phys_dev,
- &create_info_host, NULL /* allocator */, &object->device,
-diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan
-index 5a0ef02f98a..59e49a9a92d 100755
---- a/dlls/winevulkan/make_vulkan
-+++ b/dlls/winevulkan/make_vulkan
-@@ -3207,7 +3207,7 @@ class VkGenerator(object):
- f.write(" * resolution; user_sz will contain the app's requested mode; and dst_blit\n")
- f.write(" * will contain the area to blit the user image to in real coordinates.\n")
- f.write(" * All parameters are optional. */\n")
-- f.write(" VkBool32 (*query_fs_hack)(VkSurfaceKHR surface, VkExtent2D *real_sz, VkExtent2D *user_sz, VkRect2D *dst_blit, VkFilter *filter);\n")
-+ f.write(" VkBool32 (*query_fs_hack)(VkSurfaceKHR surface, VkExtent2D *real_sz, VkExtent2D *user_sz, VkRect2D *dst_blit, VkFilter *filter, BOOL *fsr, float *sharpness);\n")
-
- f.write(" VkResult (*create_vk_instance_with_callback)(const VkInstanceCreateInfo *create_info,\n")
- f.write(" const VkAllocationCallbacks *allocator, VkInstance *instance,\n")
-diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c
-index bcd0dfb9823..8bb5b7c04a3 100644
---- a/dlls/winevulkan/vulkan.c
-+++ b/dlls/winevulkan/vulkan.c
-@@ -2006,7 +2006,7 @@ void WINAPI wine_vkGetPrivateDataEXT(VkDevice device, VkObjectType object_type,
- #version 450
-
- layout(binding = 0) uniform sampler2D texSampler;
--layout(binding = 1, rgba8) uniform writeonly image2D outImage;
-+layout(binding = 1) uniform writeonly image2D outImage;
- layout(push_constant) uniform pushConstants {
- //both in real image coords
- vec2 offset;
-@@ -1722,84 +1722,871 @@ void main()
- {
- vec2 texcoord = (vec2(gl_GlobalInvocationID.xy) - constants.offset) / constants.extents;
- vec4 c = texture(texSampler, texcoord);
-- imageStore(outImage, ivec2(gl_GlobalInvocationID.xy), c.bgra);
-+ imageStore(outImage, ivec2(gl_GlobalInvocationID.xy), c);
- }
- */
- const uint32_t blit_comp_spv[] = {
-- 0x07230203,0x00010000,0x00080006,0x00000037,0x00000000,0x00020011,0x00000001,0x0006000b,
-- 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
-- 0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x0000000d,0x00060010,0x00000004,
-- 0x00000011,0x00000008,0x00000008,0x00000001,0x00030003,0x00000002,0x000001c2,0x00040005,
-- 0x00000004,0x6e69616d,0x00000000,0x00050005,0x00000009,0x63786574,0x64726f6f,0x00000000,
-- 0x00080005,0x0000000d,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,0x496e6f69,0x00000044,
-- 0x00060005,0x00000012,0x68737570,0x736e6f43,0x746e6174,0x00000073,0x00050006,0x00000012,
-- 0x00000000,0x7366666f,0x00007465,0x00050006,0x00000012,0x00000001,0x65747865,0x0073746e,
-- 0x00050005,0x00000014,0x736e6f63,0x746e6174,0x00000073,0x00030005,0x00000021,0x00000063,
-- 0x00050005,0x00000025,0x53786574,0x6c706d61,0x00007265,0x00050005,0x0000002c,0x4974756f,
-- 0x6567616d,0x00000000,0x00040047,0x0000000d,0x0000000b,0x0000001c,0x00050048,0x00000012,
-- 0x00000000,0x00000023,0x00000000,0x00050048,0x00000012,0x00000001,0x00000023,0x00000008,
-- 0x00030047,0x00000012,0x00000002,0x00040047,0x00000025,0x00000022,0x00000000,0x00040047,
-- 0x00000025,0x00000021,0x00000000,0x00040047,0x0000002c,0x00000022,0x00000000,0x00040047,
-- 0x0000002c,0x00000021,0x00000001,0x00030047,0x0000002c,0x00000019,0x00040047,0x00000036,
-- 0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,
-- 0x00000006,0x00000020,0x00040017,0x00000007,0x00000006,0x00000002,0x00040020,0x00000008,
-- 0x00000007,0x00000007,0x00040015,0x0000000a,0x00000020,0x00000000,0x00040017,0x0000000b,
-- 0x0000000a,0x00000003,0x00040020,0x0000000c,0x00000001,0x0000000b,0x0004003b,0x0000000c,
-- 0x0000000d,0x00000001,0x00040017,0x0000000e,0x0000000a,0x00000002,0x0004001e,0x00000012,
-- 0x00000007,0x00000007,0x00040020,0x00000013,0x00000009,0x00000012,0x0004003b,0x00000013,
-- 0x00000014,0x00000009,0x00040015,0x00000015,0x00000020,0x00000001,0x0004002b,0x00000015,
-- 0x00000016,0x00000000,0x00040020,0x00000017,0x00000009,0x00000007,0x0004002b,0x00000015,
-- 0x0000001b,0x00000001,0x00040017,0x0000001f,0x00000006,0x00000004,0x00040020,0x00000020,
-- 0x00000007,0x0000001f,0x00090019,0x00000022,0x00000006,0x00000001,0x00000000,0x00000000,
-- 0x00000000,0x00000001,0x00000000,0x0003001b,0x00000023,0x00000022,0x00040020,0x00000024,
-- 0x00000000,0x00000023,0x0004003b,0x00000024,0x00000025,0x00000000,0x0004002b,0x00000006,
-- 0x00000028,0x00000000,0x00090019,0x0000002a,0x00000006,0x00000001,0x00000000,0x00000000,
-- 0x00000000,0x00000002,0x00000004,0x00040020,0x0000002b,0x00000000,0x0000002a,0x0004003b,
-- 0x0000002b,0x0000002c,0x00000000,0x00040017,0x00000030,0x00000015,0x00000002,0x0004002b,
-- 0x0000000a,0x00000034,0x00000008,0x0004002b,0x0000000a,0x00000035,0x00000001,0x0006002c,
-- 0x0000000b,0x00000036,0x00000034,0x00000034,0x00000035,0x00050036,0x00000002,0x00000004,
-- 0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000008,0x00000009,0x00000007,
-- 0x0004003b,0x00000020,0x00000021,0x00000007,0x0004003d,0x0000000b,0x0000000f,0x0000000d,
-- 0x0007004f,0x0000000e,0x00000010,0x0000000f,0x0000000f,0x00000000,0x00000001,0x00040070,
-- 0x00000007,0x00000011,0x00000010,0x00050041,0x00000017,0x00000018,0x00000014,0x00000016,
-- 0x0004003d,0x00000007,0x00000019,0x00000018,0x00050083,0x00000007,0x0000001a,0x00000011,
-- 0x00000019,0x00050041,0x00000017,0x0000001c,0x00000014,0x0000001b,0x0004003d,0x00000007,
-- 0x0000001d,0x0000001c,0x00050088,0x00000007,0x0000001e,0x0000001a,0x0000001d,0x0003003e,
-- 0x00000009,0x0000001e,0x0004003d,0x00000023,0x00000026,0x00000025,0x0004003d,0x00000007,
-- 0x00000027,0x00000009,0x00070058,0x0000001f,0x00000029,0x00000026,0x00000027,0x00000002,
-- 0x00000028,0x0003003e,0x00000021,0x00000029,0x0004003d,0x0000002a,0x0000002d,0x0000002c,
-- 0x0004003d,0x0000000b,0x0000002e,0x0000000d,0x0007004f,0x0000000e,0x0000002f,0x0000002e,
-- 0x0000002e,0x00000000,0x00000001,0x0004007c,0x00000030,0x00000031,0x0000002f,0x0004003d,
-- 0x0000001f,0x00000032,0x00000021,0x0009004f,0x0000001f,0x00000033,0x00000032,0x00000032,
-- 0x00000002,0x00000001,0x00000000,0x00000003,0x00040063,0x0000002d,0x00000031,0x00000033,
-- 0x000100fd,0x00010038
-+ 0x07230203,0x00010000,0x0008000a,0x00000036,0x00000000,0x00020011,0x00000001,0x00020011,
-+ 0x00000038,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,
-+ 0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x0000000d,
-+ 0x00060010,0x00000004,0x00000011,0x00000008,0x00000008,0x00000001,0x00030003,0x00000002,
-+ 0x000001c2,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00050005,0x00000009,0x63786574,
-+ 0x64726f6f,0x00000000,0x00080005,0x0000000d,0x475f6c67,0x61626f6c,0x766e496c,0x7461636f,
-+ 0x496e6f69,0x00000044,0x00060005,0x00000012,0x68737570,0x736e6f43,0x746e6174,0x00000073,
-+ 0x00050006,0x00000012,0x00000000,0x7366666f,0x00007465,0x00050006,0x00000012,0x00000001,
-+ 0x65747865,0x0073746e,0x00050005,0x00000014,0x736e6f63,0x746e6174,0x00000073,0x00030005,
-+ 0x00000021,0x00000063,0x00050005,0x00000025,0x53786574,0x6c706d61,0x00007265,0x00050005,
-+ 0x0000002c,0x4974756f,0x6567616d,0x00000000,0x00040047,0x0000000d,0x0000000b,0x0000001c,
-+ 0x00050048,0x00000012,0x00000000,0x00000023,0x00000000,0x00050048,0x00000012,0x00000001,
-+ 0x00000023,0x00000008,0x00030047,0x00000012,0x00000002,0x00040047,0x00000025,0x00000022,
-+ 0x00000000,0x00040047,0x00000025,0x00000021,0x00000000,0x00040047,0x0000002c,0x00000022,
-+ 0x00000000,0x00040047,0x0000002c,0x00000021,0x00000001,0x00030047,0x0000002c,0x00000019,
-+ 0x00040047,0x00000035,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,
-+ 0x00000002,0x00030016,0x00000006,0x00000020,0x00040017,0x00000007,0x00000006,0x00000002,
-+ 0x00040020,0x00000008,0x00000007,0x00000007,0x00040015,0x0000000a,0x00000020,0x00000000,
-+ 0x00040017,0x0000000b,0x0000000a,0x00000003,0x00040020,0x0000000c,0x00000001,0x0000000b,
-+ 0x0004003b,0x0000000c,0x0000000d,0x00000001,0x00040017,0x0000000e,0x0000000a,0x00000002,
-+ 0x0004001e,0x00000012,0x00000007,0x00000007,0x00040020,0x00000013,0x00000009,0x00000012,
-+ 0x0004003b,0x00000013,0x00000014,0x00000009,0x00040015,0x00000015,0x00000020,0x00000001,
-+ 0x0004002b,0x00000015,0x00000016,0x00000000,0x00040020,0x00000017,0x00000009,0x00000007,
-+ 0x0004002b,0x00000015,0x0000001b,0x00000001,0x00040017,0x0000001f,0x00000006,0x00000004,
-+ 0x00040020,0x00000020,0x00000007,0x0000001f,0x00090019,0x00000022,0x00000006,0x00000001,
-+ 0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x0003001b,0x00000023,0x00000022,
-+ 0x00040020,0x00000024,0x00000000,0x00000023,0x0004003b,0x00000024,0x00000025,0x00000000,
-+ 0x0004002b,0x00000006,0x00000028,0x00000000,0x00090019,0x0000002a,0x00000006,0x00000001,
-+ 0x00000000,0x00000000,0x00000000,0x00000002,0x00000000,0x00040020,0x0000002b,0x00000000,
-+ 0x0000002a,0x0004003b,0x0000002b,0x0000002c,0x00000000,0x00040017,0x00000030,0x00000015,
-+ 0x00000002,0x0004002b,0x0000000a,0x00000033,0x00000008,0x0004002b,0x0000000a,0x00000034,
-+ 0x00000001,0x0006002c,0x0000000b,0x00000035,0x00000033,0x00000033,0x00000034,0x00050036,
-+ 0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000008,
-+ 0x00000009,0x00000007,0x0004003b,0x00000020,0x00000021,0x00000007,0x0004003d,0x0000000b,
-+ 0x0000000f,0x0000000d,0x0007004f,0x0000000e,0x00000010,0x0000000f,0x0000000f,0x00000000,
-+ 0x00000001,0x00040070,0x00000007,0x00000011,0x00000010,0x00050041,0x00000017,0x00000018,
-+ 0x00000014,0x00000016,0x0004003d,0x00000007,0x00000019,0x00000018,0x00050083,0x00000007,
-+ 0x0000001a,0x00000011,0x00000019,0x00050041,0x00000017,0x0000001c,0x00000014,0x0000001b,
-+ 0x0004003d,0x00000007,0x0000001d,0x0000001c,0x00050088,0x00000007,0x0000001e,0x0000001a,
-+ 0x0000001d,0x0003003e,0x00000009,0x0000001e,0x0004003d,0x00000023,0x00000026,0x00000025,
-+ 0x0004003d,0x00000007,0x00000027,0x00000009,0x00070058,0x0000001f,0x00000029,0x00000026,
-+ 0x00000027,0x00000002,0x00000028,0x0003003e,0x00000021,0x00000029,0x0004003d,0x0000002a,
-+ 0x0000002d,0x0000002c,0x0004003d,0x0000000b,0x0000002e,0x0000000d,0x0007004f,0x0000000e,
-+ 0x0000002f,0x0000002e,0x0000002e,0x00000000,0x00000001,0x0004007c,0x00000030,0x00000031,
-+ 0x0000002f,0x0004003d,0x0000001f,0x00000032,0x00000021,0x00040063,0x0000002d,0x00000031,
-+ 0x00000032,0x000100fd,0x00010038
- };
-
--static VkResult create_pipeline(VkDevice device, struct VkSwapchainKHR_T *swapchain, VkShaderModule shaderModule)
-+/*
-+#version 460
-+#extension GL_GOOGLE_include_directive: require
-+
-+layout(local_size_x=8, local_size_y=8, local_size_z=1) in;
-+
-+layout(binding = 0) uniform sampler2D texSampler;
-+layout(binding = 1) uniform writeonly image2D outImage;
-+
-+#define A_GPU 1
-+#define A_GLSL 1
-+//#include "ffx_a.h"
-+#define FSR_EASU_F 1
-+AF4 FsrEasuRF(AF2 p){return AF4(textureGather(texSampler, p, 0));}
-+AF4 FsrEasuGF(AF2 p){return AF4(textureGather(texSampler, p, 1));}
-+AF4 FsrEasuBF(AF2 p){return AF4(textureGather(texSampler, p, 2));}
-+//#include "ffx_fsr1.h"
-+
-+layout(push_constant) uniform pushConstants {
-+ uvec4 c1, c2, c3, c4;
-+};
-+
-+
-+void main()
-+{
-+ vec3 color;
-+
-+ if (any(greaterThanEqual(gl_GlobalInvocationID.xy, c4.zw)))
-+ return;
-+
-+ FsrEasuF(color, uvec2(gl_GlobalInvocationID.xy), c1, c2, c3, c4);
-+
-+ imageStore(outImage, ivec2(gl_GlobalInvocationID.xy), vec4(color, 1.0));
-+}
-+*/
-+const uint32_t fsr_easu_comp_spv[] = {
-+ 0x07230203,0x00010000,0x0008000a,0x0000129e,0x00000000,0x00020011,0x00000001,0x00020011,
-+ 0x00000038,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,
-+ 0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x000004ee,
-+ 0x00060010,0x00000004,0x00000011,0x00000008,0x00000008,0x00000001,0x00030003,0x00000002,
-+ 0x000001cc,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,
-+ 0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,
-+ 0x69645f65,0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00050005,
-+ 0x000000bc,0x53786574,0x6c706d61,0x00007265,0x00080005,0x000004ee,0x475f6c67,0x61626f6c,
-+ 0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00060005,0x000004f1,0x68737570,0x736e6f43,
-+ 0x746e6174,0x00000073,0x00040006,0x000004f1,0x00000000,0x00003163,0x00040006,0x000004f1,
-+ 0x00000001,0x00003263,0x00040006,0x000004f1,0x00000002,0x00003363,0x00040006,0x000004f1,
-+ 0x00000003,0x00003463,0x00030005,0x000004f3,0x00000000,0x00050005,0x00000517,0x4974756f,
-+ 0x6567616d,0x00000000,0x00040047,0x000000bc,0x00000022,0x00000000,0x00040047,0x000000bc,
-+ 0x00000021,0x00000000,0x00040047,0x000004ee,0x0000000b,0x0000001c,0x00050048,0x000004f1,
-+ 0x00000000,0x00000023,0x00000000,0x00050048,0x000004f1,0x00000001,0x00000023,0x00000010,
-+ 0x00050048,0x000004f1,0x00000002,0x00000023,0x00000020,0x00050048,0x000004f1,0x00000003,
-+ 0x00000023,0x00000030,0x00030047,0x000004f1,0x00000002,0x00040047,0x00000517,0x00000022,
-+ 0x00000000,0x00040047,0x00000517,0x00000021,0x00000001,0x00030047,0x00000517,0x00000019,
-+ 0x00040047,0x00000523,0x0000000b,0x00000019,0x00020013,0x00000002,0x00030021,0x00000003,
-+ 0x00000002,0x00030016,0x00000006,0x00000020,0x00040017,0x0000000c,0x00000006,0x00000002,
-+ 0x00040017,0x00000011,0x00000006,0x00000003,0x00040017,0x00000016,0x00000006,0x00000004,
-+ 0x00040015,0x0000001b,0x00000020,0x00000000,0x00020014,0x0000004f,0x00040017,0x00000060,
-+ 0x0000001b,0x00000002,0x00040017,0x00000062,0x0000001b,0x00000004,0x0004002b,0x00000006,
-+ 0x00000093,0x3f800000,0x0004002b,0x00000006,0x0000009b,0x00000000,0x0004002b,0x0000001b,
-+ 0x000000a3,0x7ef07ebb,0x0004002b,0x0000001b,0x000000ac,0x5f347d74,0x0004002b,0x0000001b,
-+ 0x000000b1,0x00000001,0x00090019,0x000000b9,0x00000006,0x00000001,0x00000000,0x00000000,
-+ 0x00000000,0x00000001,0x00000000,0x0003001b,0x000000ba,0x000000b9,0x00040020,0x000000bb,
-+ 0x00000000,0x000000ba,0x0004003b,0x000000bb,0x000000bc,0x00000000,0x00040015,0x000000bf,
-+ 0x00000020,0x00000001,0x0004002b,0x000000bf,0x000000c0,0x00000000,0x0004002b,0x000000bf,
-+ 0x000000cb,0x00000001,0x0004002b,0x000000bf,0x000000d6,0x00000002,0x0004002b,0x0000001b,
-+ 0x000000e0,0x00000000,0x0004002b,0x00000006,0x0000010d,0x3ecccccd,0x0004002b,0x00000006,
-+ 0x00000112,0xbf800000,0x0004002b,0x00000006,0x00000123,0x3fc80000,0x0004002b,0x00000006,
-+ 0x00000128,0xbf100000,0x0004002b,0x00000006,0x00000230,0x3f000000,0x0004002b,0x00000006,
-+ 0x000002f5,0x38000000,0x0004002b,0x00000006,0x0000033e,0xbf000000,0x0004002b,0x00000006,
-+ 0x00000348,0xbe947ae1,0x0005002c,0x0000000c,0x0000039c,0x0000009b,0x00000112,0x0005002c,
-+ 0x0000000c,0x000003b7,0x00000093,0x00000112,0x0005002c,0x0000000c,0x000003d2,0x00000112,
-+ 0x00000093,0x0005002c,0x0000000c,0x000003ed,0x0000009b,0x00000093,0x0005002c,0x0000000c,
-+ 0x00000423,0x00000112,0x0000009b,0x0005002c,0x0000000c,0x0000043e,0x00000093,0x00000093,
-+ 0x0004002b,0x00000006,0x00000459,0x40000000,0x0005002c,0x0000000c,0x0000045a,0x00000459,
-+ 0x00000093,0x0005002c,0x0000000c,0x00000475,0x00000459,0x0000009b,0x0005002c,0x0000000c,
-+ 0x00000490,0x00000093,0x0000009b,0x0005002c,0x0000000c,0x000004ab,0x00000093,0x00000459,
-+ 0x0005002c,0x0000000c,0x000004c6,0x0000009b,0x00000459,0x00040017,0x000004ec,0x0000001b,
-+ 0x00000003,0x00040020,0x000004ed,0x00000001,0x000004ec,0x0004003b,0x000004ed,0x000004ee,
-+ 0x00000001,0x0006001e,0x000004f1,0x00000062,0x00000062,0x00000062,0x00000062,0x00040020,
-+ 0x000004f2,0x00000009,0x000004f1,0x0004003b,0x000004f2,0x000004f3,0x00000009,0x0004002b,
-+ 0x000000bf,0x000004f4,0x00000003,0x00040020,0x000004f5,0x00000009,0x00000062,0x00040017,
-+ 0x000004f9,0x0000004f,0x00000002,0x00090019,0x00000515,0x00000006,0x00000001,0x00000000,
-+ 0x00000000,0x00000000,0x00000002,0x00000000,0x00040020,0x00000516,0x00000000,0x00000515,
-+ 0x0004003b,0x00000516,0x00000517,0x00000000,0x00040017,0x0000051b,0x000000bf,0x00000002,
-+ 0x0004002b,0x0000001b,0x00000522,0x00000008,0x0006002c,0x000004ec,0x00000523,0x00000522,
-+ 0x00000522,0x000000b1,0x0007002c,0x00000016,0x0000127a,0x00000230,0x00000230,0x00000230,
-+ 0x00000230,0x00030001,0x0000000c,0x0000129d,0x00050036,0x00000002,0x00000004,0x00000000,
-+ 0x00000003,0x000200f8,0x00000005,0x000300f7,0x00000524,0x00000000,0x000300fb,0x000000e0,
-+ 0x00000525,0x000200f8,0x00000525,0x0004003d,0x000004ec,0x000004ef,0x000004ee,0x0007004f,
-+ 0x00000060,0x000004f0,0x000004ef,0x000004ef,0x00000000,0x00000001,0x00050041,0x000004f5,
-+ 0x000004f6,0x000004f3,0x000004f4,0x0004003d,0x00000062,0x000004f7,0x000004f6,0x0007004f,
-+ 0x00000060,0x000004f8,0x000004f7,0x000004f7,0x00000002,0x00000003,0x000500ae,0x000004f9,
-+ 0x000004fa,0x000004f0,0x000004f8,0x0004009a,0x0000004f,0x000004fb,0x000004fa,0x000300f7,
-+ 0x000004fd,0x00000000,0x000400fa,0x000004fb,0x000004fc,0x000004fd,0x000200f8,0x000004fc,
-+ 0x000200f9,0x00000524,0x000200f8,0x000004fd,0x00050051,0x0000001b,0x00000502,0x000004ef,
-+ 0x00000000,0x00050051,0x0000001b,0x00000503,0x000004ef,0x00000001,0x00050050,0x00000060,
-+ 0x00000504,0x00000502,0x00000503,0x00050041,0x000004f5,0x00000508,0x000004f3,0x000000c0,
-+ 0x0004003d,0x00000062,0x00000509,0x00000508,0x00050041,0x000004f5,0x0000050b,0x000004f3,
-+ 0x000000cb,0x0004003d,0x00000062,0x0000050c,0x0000050b,0x00050041,0x000004f5,0x0000050e,
-+ 0x000004f3,0x000000d6,0x0004003d,0x00000062,0x0000050f,0x0000050e,0x00040070,0x0000000c,
-+ 0x00000618,0x00000504,0x00050051,0x0000001b,0x0000061b,0x00000509,0x00000000,0x00050051,
-+ 0x0000001b,0x0000061c,0x00000509,0x00000001,0x00050050,0x00000060,0x0000061d,0x0000061b,
-+ 0x0000061c,0x0004007c,0x0000000c,0x0000061e,0x0000061d,0x00050085,0x0000000c,0x0000061f,
-+ 0x00000618,0x0000061e,0x00050051,0x0000001b,0x00000622,0x00000509,0x00000002,0x00050051,
-+ 0x0000001b,0x00000623,0x00000509,0x00000003,0x00050050,0x00000060,0x00000624,0x00000622,
-+ 0x00000623,0x0004007c,0x0000000c,0x00000625,0x00000624,0x00050081,0x0000000c,0x00000626,
-+ 0x0000061f,0x00000625,0x0006000c,0x0000000c,0x00000628,0x00000001,0x00000008,0x00000626,
-+ 0x00050083,0x0000000c,0x0000062b,0x00000626,0x00000628,0x00050051,0x0000001b,0x0000062f,
-+ 0x0000050c,0x00000000,0x00050051,0x0000001b,0x00000630,0x0000050c,0x00000001,0x00050050,
-+ 0x00000060,0x00000631,0x0000062f,0x00000630,0x0004007c,0x0000000c,0x00000632,0x00000631,
-+ 0x00050085,0x0000000c,0x00000633,0x00000628,0x00000632,0x00050051,0x0000001b,0x00000636,
-+ 0x0000050c,0x00000002,0x00050051,0x0000001b,0x00000637,0x0000050c,0x00000003,0x00050050,
-+ 0x00000060,0x00000638,0x00000636,0x00000637,0x0004007c,0x0000000c,0x00000639,0x00000638,
-+ 0x00050081,0x0000000c,0x0000063a,0x00000633,0x00000639,0x00050051,0x0000001b,0x0000063e,
-+ 0x0000050f,0x00000000,0x00050051,0x0000001b,0x0000063f,0x0000050f,0x00000001,0x00050050,
-+ 0x00000060,0x00000640,0x0000063e,0x0000063f,0x0004007c,0x0000000c,0x00000641,0x00000640,
-+ 0x00050081,0x0000000c,0x00000642,0x0000063a,0x00000641,0x00050051,0x0000001b,0x00000646,
-+ 0x0000050f,0x00000002,0x00050051,0x0000001b,0x00000647,0x0000050f,0x00000003,0x00050050,
-+ 0x00000060,0x00000648,0x00000646,0x00000647,0x0004007c,0x0000000c,0x00000649,0x00000648,
-+ 0x00050081,0x0000000c,0x0000064a,0x0000063a,0x00000649,0x00050051,0x0000001b,0x0000064e,
-+ 0x000004f7,0x00000000,0x00050051,0x0000001b,0x0000064f,0x000004f7,0x00000001,0x00050050,
-+ 0x00000060,0x00000650,0x0000064e,0x0000064f,0x0004007c,0x0000000c,0x00000651,0x00000650,
-+ 0x00050081,0x0000000c,0x00000652,0x0000063a,0x00000651,0x0004003d,0x000000ba,0x00000845,
-+ 0x000000bc,0x00060060,0x00000016,0x00000847,0x00000845,0x0000063a,0x000000c0,0x00060060,
-+ 0x00000016,0x00000851,0x00000845,0x0000063a,0x000000cb,0x00060060,0x00000016,0x0000085b,
-+ 0x00000845,0x0000063a,0x000000d6,0x00060060,0x00000016,0x00000865,0x00000845,0x00000642,
-+ 0x000000c0,0x00060060,0x00000016,0x0000086f,0x00000845,0x00000642,0x000000cb,0x00060060,
-+ 0x00000016,0x00000879,0x00000845,0x00000642,0x000000d6,0x00060060,0x00000016,0x00000883,
-+ 0x00000845,0x0000064a,0x000000c0,0x00060060,0x00000016,0x0000088d,0x00000845,0x0000064a,
-+ 0x000000cb,0x00060060,0x00000016,0x00000897,0x00000845,0x0000064a,0x000000d6,0x00060060,
-+ 0x00000016,0x000008a1,0x00000845,0x00000652,0x000000c0,0x00060060,0x00000016,0x000008ab,
-+ 0x00000845,0x00000652,0x000000cb,0x00060060,0x00000016,0x000008b5,0x00000845,0x00000652,
-+ 0x000000d6,0x00050085,0x00000016,0x0000066d,0x0000085b,0x0000127a,0x00050085,0x00000016,
-+ 0x00000670,0x00000847,0x0000127a,0x00050081,0x00000016,0x00000672,0x00000670,0x00000851,
-+ 0x00050081,0x00000016,0x00000673,0x0000066d,0x00000672,0x00050085,0x00000016,0x00000676,
-+ 0x00000879,0x0000127a,0x00050085,0x00000016,0x00000679,0x00000865,0x0000127a,0x00050081,
-+ 0x00000016,0x0000067b,0x00000679,0x0000086f,0x00050081,0x00000016,0x0000067c,0x00000676,
-+ 0x0000067b,0x00050085,0x00000016,0x0000067f,0x00000897,0x0000127a,0x00050085,0x00000016,
-+ 0x00000682,0x00000883,0x0000127a,0x00050081,0x00000016,0x00000684,0x00000682,0x0000088d,
-+ 0x00050081,0x00000016,0x00000685,0x0000067f,0x00000684,0x00050085,0x00000016,0x00000688,
-+ 0x000008b5,0x0000127a,0x00050085,0x00000016,0x0000068b,0x000008a1,0x0000127a,0x00050081,
-+ 0x00000016,0x0000068d,0x0000068b,0x000008ab,0x00050081,0x00000016,0x0000068e,0x00000688,
-+ 0x0000068d,0x00050051,0x00000006,0x00000690,0x00000673,0x00000000,0x00050051,0x00000006,
-+ 0x00000692,0x00000673,0x00000001,0x00050051,0x00000006,0x00000694,0x0000067c,0x00000000,
-+ 0x00050051,0x00000006,0x00000696,0x0000067c,0x00000001,0x00050051,0x00000006,0x00000698,
-+ 0x0000067c,0x00000002,0x00050051,0x00000006,0x0000069a,0x0000067c,0x00000003,0x00050051,
-+ 0x00000006,0x0000069c,0x00000685,0x00000000,0x00050051,0x00000006,0x0000069e,0x00000685,
-+ 0x00000001,0x00050051,0x00000006,0x000006a0,0x00000685,0x00000002,0x00050051,0x00000006,
-+ 0x000006a2,0x00000685,0x00000003,0x00050051,0x00000006,0x000006a4,0x0000068e,0x00000002,
-+ 0x00050051,0x00000006,0x000006a6,0x0000068e,0x00000003,0x00050051,0x00000006,0x00000913,
-+ 0x0000062b,0x00000000,0x00050083,0x00000006,0x00000914,0x00000093,0x00000913,0x00050051,
-+ 0x00000006,0x00000917,0x0000062b,0x00000001,0x00050083,0x00000006,0x00000918,0x00000093,
-+ 0x00000917,0x00050085,0x00000006,0x00000919,0x00000914,0x00000918,0x00050083,0x00000006,
-+ 0x00000939,0x000006a2,0x00000698,0x00050083,0x00000006,0x0000093c,0x00000698,0x0000069a,
-+ 0x0006000c,0x00000006,0x0000093e,0x00000001,0x00000004,0x00000939,0x0006000c,0x00000006,
-+ 0x00000940,0x00000001,0x00000004,0x0000093c,0x0007000c,0x00000006,0x00000941,0x00000001,
-+ 0x00000028,0x0000093e,0x00000940,0x0004007c,0x0000001b,0x00000993,0x00000941,0x00050082,
-+ 0x0000001b,0x00000994,0x000000a3,0x00000993,0x0004007c,0x00000006,0x00000995,0x00000994,
-+ 0x00050083,0x00000006,0x00000946,0x000006a2,0x0000069a,0x00050085,0x00000006,0x00000949,
-+ 0x00000946,0x00000919,0x0006000c,0x00000006,0x0000094f,0x00000001,0x00000004,0x00000946,
-+ 0x00050085,0x00000006,0x00000951,0x0000094f,0x00000995,0x0008000c,0x00000006,0x000009a0,
-+ 0x00000001,0x0000002b,0x00000951,0x0000009b,0x00000093,0x00050085,0x00000006,0x00000955,
-+ 0x000009a0,0x000009a0,0x00050085,0x00000006,0x00000958,0x00000955,0x00000919,0x00050083,
-+ 0x00000006,0x0000095d,0x00000696,0x00000698,0x00050083,0x00000006,0x00000960,0x00000698,
-+ 0x00000690,0x0006000c,0x00000006,0x00000962,0x00000001,0x00000004,0x0000095d,0x0006000c,
-+ 0x00000006,0x00000964,0x00000001,0x00000004,0x00000960,0x0007000c,0x00000006,0x00000965,
-+ 0x00000001,0x00000028,0x00000962,0x00000964,0x0004007c,0x0000001b,0x000009ac,0x00000965,
-+ 0x00050082,0x0000001b,0x000009ad,0x000000a3,0x000009ac,0x0004007c,0x00000006,0x000009ae,
-+ 0x000009ad,0x00050083,0x00000006,0x0000096a,0x00000696,0x00000690,0x00050085,0x00000006,
-+ 0x0000096d,0x0000096a,0x00000919,0x0006000c,0x00000006,0x00000973,0x00000001,0x00000004,
-+ 0x0000096a,0x00050085,0x00000006,0x00000975,0x00000973,0x000009ae,0x0008000c,0x00000006,
-+ 0x000009b9,0x00000001,0x0000002b,0x00000975,0x0000009b,0x00000093,0x00050085,0x00000006,
-+ 0x00000979,0x000009b9,0x000009b9,0x00050085,0x00000006,0x0000097c,0x00000979,0x00000919,
-+ 0x00050081,0x00000006,0x0000097e,0x00000958,0x0000097c,0x00050085,0x00000006,0x000009e8,
-+ 0x00000913,0x00000918,0x00050083,0x00000006,0x000009fe,0x000006a0,0x000006a2,0x0006000c,
-+ 0x00000006,0x00000a03,0x00000001,0x00000004,0x000009fe,0x0007000c,0x00000006,0x00000a06,
-+ 0x00000001,0x00000028,0x00000a03,0x0000093e,0x0004007c,0x0000001b,0x00000a58,0x00000a06,
-+ 0x00050082,0x0000001b,0x00000a59,0x000000a3,0x00000a58,0x0004007c,0x00000006,0x00000a5a,
-+ 0x00000a59,0x00050083,0x00000006,0x00000a0b,0x000006a0,0x00000698,0x00050085,0x00000006,
-+ 0x00000a0e,0x00000a0b,0x000009e8,0x00050081,0x00000006,0x00000a11,0x00000949,0x00000a0e,
-+ 0x0006000c,0x00000006,0x00000a14,0x00000001,0x00000004,0x00000a0b,0x00050085,0x00000006,
-+ 0x00000a16,0x00000a14,0x00000a5a,0x0008000c,0x00000006,0x00000a65,0x00000001,0x0000002b,
-+ 0x00000a16,0x0000009b,0x00000093,0x00050085,0x00000006,0x00000a1a,0x00000a65,0x00000a65,
-+ 0x00050085,0x00000006,0x00000a1d,0x00000a1a,0x000009e8,0x00050081,0x00000006,0x00000a1f,
-+ 0x0000097e,0x00000a1d,0x00050083,0x00000006,0x00000a22,0x0000069c,0x000006a2,0x00050083,
-+ 0x00000006,0x00000a25,0x000006a2,0x00000692,0x0006000c,0x00000006,0x00000a27,0x00000001,
-+ 0x00000004,0x00000a22,0x0006000c,0x00000006,0x00000a29,0x00000001,0x00000004,0x00000a25,
-+ 0x0007000c,0x00000006,0x00000a2a,0x00000001,0x00000028,0x00000a27,0x00000a29,0x0004007c,
-+ 0x0000001b,0x00000a71,0x00000a2a,0x00050082,0x0000001b,0x00000a72,0x000000a3,0x00000a71,
-+ 0x0004007c,0x00000006,0x00000a73,0x00000a72,0x00050083,0x00000006,0x00000a2f,0x0000069c,
-+ 0x00000692,0x00050085,0x00000006,0x00000a32,0x00000a2f,0x000009e8,0x00050081,0x00000006,
-+ 0x00000a35,0x0000096d,0x00000a32,0x0006000c,0x00000006,0x00000a38,0x00000001,0x00000004,
-+ 0x00000a2f,0x00050085,0x00000006,0x00000a3a,0x00000a38,0x00000a73,0x0008000c,0x00000006,
-+ 0x00000a7e,0x00000001,0x0000002b,0x00000a3a,0x0000009b,0x00000093,0x00050085,0x00000006,
-+ 0x00000a3e,0x00000a7e,0x00000a7e,0x00050085,0x00000006,0x00000a41,0x00000a3e,0x000009e8,
-+ 0x00050081,0x00000006,0x00000a43,0x00000a1f,0x00000a41,0x00050085,0x00000006,0x00000ab7,
-+ 0x00000914,0x00000917,0x00050083,0x00000006,0x00000ac3,0x0000069c,0x00000696,0x00050083,
-+ 0x00000006,0x00000ac6,0x00000696,0x00000694,0x0006000c,0x00000006,0x00000ac8,0x00000001,
-+ 0x00000004,0x00000ac3,0x0006000c,0x00000006,0x00000aca,0x00000001,0x00000004,0x00000ac6,
-+ 0x0007000c,0x00000006,0x00000acb,0x00000001,0x00000028,0x00000ac8,0x00000aca,0x0004007c,
-+ 0x0000001b,0x00000b1d,0x00000acb,0x00050082,0x0000001b,0x00000b1e,0x000000a3,0x00000b1d,
-+ 0x0004007c,0x00000006,0x00000b1f,0x00000b1e,0x00050083,0x00000006,0x00000ad0,0x0000069c,
-+ 0x00000694,0x00050085,0x00000006,0x00000ad3,0x00000ad0,0x00000ab7,0x00050081,0x00000006,
-+ 0x00000ad6,0x00000a11,0x00000ad3,0x0006000c,0x00000006,0x00000ad9,0x00000001,0x00000004,
-+ 0x00000ad0,0x00050085,0x00000006,0x00000adb,0x00000ad9,0x00000b1f,0x0008000c,0x00000006,
-+ 0x00000b2a,0x00000001,0x0000002b,0x00000adb,0x0000009b,0x00000093,0x00050085,0x00000006,
-+ 0x00000adf,0x00000b2a,0x00000b2a,0x00050085,0x00000006,0x00000ae2,0x00000adf,0x00000ab7,
-+ 0x00050081,0x00000006,0x00000ae4,0x00000a43,0x00000ae2,0x00050083,0x00000006,0x00000ae7,
-+ 0x000006a6,0x00000696,0x0006000c,0x00000006,0x00000aec,0x00000001,0x00000004,0x00000ae7,
-+ 0x0007000c,0x00000006,0x00000aef,0x00000001,0x00000028,0x00000aec,0x00000962,0x0004007c,
-+ 0x0000001b,0x00000b36,0x00000aef,0x00050082,0x0000001b,0x00000b37,0x000000a3,0x00000b36,
-+ 0x0004007c,0x00000006,0x00000b38,0x00000b37,0x00050083,0x00000006,0x00000af4,0x000006a6,
-+ 0x00000698,0x00050085,0x00000006,0x00000af7,0x00000af4,0x00000ab7,0x00050081,0x00000006,
-+ 0x00000afa,0x00000a35,0x00000af7,0x0006000c,0x00000006,0x00000afd,0x00000001,0x00000004,
-+ 0x00000af4,0x00050085,0x00000006,0x00000aff,0x00000afd,0x00000b38,0x0008000c,0x00000006,
-+ 0x00000b43,0x00000001,0x0000002b,0x00000aff,0x0000009b,0x00000093,0x00050085,0x00000006,
-+ 0x00000b03,0x00000b43,0x00000b43,0x00050085,0x00000006,0x00000b06,0x00000b03,0x00000ab7,
-+ 0x00050081,0x00000006,0x00000b08,0x00000ae4,0x00000b06,0x00050085,0x00000006,0x00000b84,
-+ 0x00000913,0x00000917,0x00050083,0x00000006,0x00000b88,0x0000069e,0x0000069c,0x0006000c,
-+ 0x00000006,0x00000b8d,0x00000001,0x00000004,0x00000b88,0x0007000c,0x00000006,0x00000b90,
-+ 0x00000001,0x00000028,0x00000b8d,0x00000ac8,0x0004007c,0x0000001b,0x00000be2,0x00000b90,
-+ 0x00050082,0x0000001b,0x00000be3,0x000000a3,0x00000be2,0x0004007c,0x00000006,0x00000be4,
-+ 0x00000be3,0x00050083,0x00000006,0x00000b95,0x0000069e,0x00000696,0x00050085,0x00000006,
-+ 0x00000b98,0x00000b95,0x00000b84,0x00050081,0x00000006,0x00000b9b,0x00000ad6,0x00000b98,
-+ 0x00060052,0x0000000c,0x0000116f,0x00000b9b,0x0000129d,0x00000000,0x0006000c,0x00000006,
-+ 0x00000b9e,0x00000001,0x00000004,0x00000b95,0x00050085,0x00000006,0x00000ba0,0x00000b9e,
-+ 0x00000be4,0x0008000c,0x00000006,0x00000bef,0x00000001,0x0000002b,0x00000ba0,0x0000009b,
-+ 0x00000093,0x00050085,0x00000006,0x00000ba4,0x00000bef,0x00000bef,0x00050085,0x00000006,
-+ 0x00000ba7,0x00000ba4,0x00000b84,0x00050081,0x00000006,0x00000ba9,0x00000b08,0x00000ba7,
-+ 0x00050083,0x00000006,0x00000bac,0x000006a4,0x0000069c,0x0006000c,0x00000006,0x00000bb1,
-+ 0x00000001,0x00000004,0x00000bac,0x0007000c,0x00000006,0x00000bb4,0x00000001,0x00000028,
-+ 0x00000bb1,0x00000a27,0x0004007c,0x0000001b,0x00000bfb,0x00000bb4,0x00050082,0x0000001b,
-+ 0x00000bfc,0x000000a3,0x00000bfb,0x0004007c,0x00000006,0x00000bfd,0x00000bfc,0x00050083,
-+ 0x00000006,0x00000bb9,0x000006a4,0x000006a2,0x00050085,0x00000006,0x00000bbc,0x00000bb9,
-+ 0x00000b84,0x00050081,0x00000006,0x00000bbf,0x00000afa,0x00000bbc,0x00060052,0x0000000c,
-+ 0x00001172,0x00000bbf,0x0000116f,0x00000001,0x0006000c,0x00000006,0x00000bc2,0x00000001,
-+ 0x00000004,0x00000bb9,0x00050085,0x00000006,0x00000bc4,0x00000bc2,0x00000bfd,0x0008000c,
-+ 0x00000006,0x00000c08,0x00000001,0x0000002b,0x00000bc4,0x0000009b,0x00000093,0x00050085,
-+ 0x00000006,0x00000bc8,0x00000c08,0x00000c08,0x00050085,0x00000006,0x00000bcb,0x00000bc8,
-+ 0x00000b84,0x00050081,0x00000006,0x00000bcd,0x00000ba9,0x00000bcb,0x00050085,0x0000000c,
-+ 0x000006d7,0x00001172,0x00001172,0x00050051,0x00000006,0x000006d9,0x000006d7,0x00000000,
-+ 0x00050051,0x00000006,0x000006db,0x000006d7,0x00000001,0x00050081,0x00000006,0x000006dc,
-+ 0x000006d9,0x000006db,0x000500b8,0x0000004f,0x000006df,0x000006dc,0x000002f5,0x0004007c,
-+ 0x0000001b,0x00000c18,0x000006dc,0x000500c2,0x0000001b,0x00000c1a,0x00000c18,0x000000b1,
-+ 0x00050082,0x0000001b,0x00000c1b,0x000000ac,0x00000c1a,0x0004007c,0x00000006,0x00000c1c,
-+ 0x00000c1b,0x000200f9,0x000006e7,0x000200f8,0x000006e7,0x000600a9,0x00000006,0x0000129c,
-+ 0x000006df,0x00000093,0x00000c1c,0x000300f7,0x000006ef,0x00000000,0x000400fa,0x000006df,
-+ 0x000006ea,0x000006ec,0x000200f8,0x000006ec,0x000200f9,0x000006ef,0x000200f8,0x000006ea,
-+ 0x000200f9,0x000006ef,0x000200f8,0x000006ef,0x000700f5,0x00000006,0x0000127e,0x00000b9b,
-+ 0x000006ec,0x00000093,0x000006ea,0x00060052,0x0000000c,0x00001177,0x0000127e,0x00001172,
-+ 0x00000000,0x00050050,0x0000000c,0x00000c2d,0x0000129c,0x0000129c,0x00050085,0x0000000c,
-+ 0x000006f5,0x00001177,0x00000c2d,0x00050085,0x00000006,0x000006f8,0x00000bcd,0x00000230,
-+ 0x00050085,0x00000006,0x000006fb,0x000006f8,0x000006f8,0x00050051,0x00000006,0x000006fd,
-+ 0x000006f5,0x00000000,0x00050085,0x00000006,0x00000700,0x000006fd,0x000006fd,0x00050051,
-+ 0x00000006,0x00000702,0x000006f5,0x00000001,0x00050085,0x00000006,0x00000705,0x00000702,
-+ 0x00000702,0x00050081,0x00000006,0x00000706,0x00000700,0x00000705,0x0006000c,0x00000006,
-+ 0x00000709,0x00000001,0x00000004,0x000006fd,0x0006000c,0x00000006,0x0000070c,0x00000001,
-+ 0x00000004,0x00000702,0x0007000c,0x00000006,0x0000070d,0x00000001,0x00000028,0x00000709,
-+ 0x0000070c,0x0004007c,0x0000001b,0x00000c36,0x0000070d,0x00050082,0x0000001b,0x00000c37,
-+ 0x000000a3,0x00000c36,0x0004007c,0x00000006,0x00000c38,0x00000c37,0x00050085,0x00000006,
-+ 0x0000070f,0x00000706,0x00000c38,0x00050083,0x00000006,0x00000713,0x0000070f,0x00000093,
-+ 0x00050085,0x00000006,0x00000715,0x00000713,0x000006fb,0x00050081,0x00000006,0x00000716,
-+ 0x00000093,0x00000715,0x00050085,0x00000006,0x0000071a,0x0000033e,0x000006fb,0x00050081,
-+ 0x00000006,0x0000071b,0x00000093,0x0000071a,0x00050050,0x0000000c,0x0000071c,0x00000716,
-+ 0x0000071b,0x00050085,0x00000006,0x00000720,0x00000348,0x000006fb,0x00050081,0x00000006,
-+ 0x00000721,0x00000230,0x00000720,0x0004007c,0x0000001b,0x00000c53,0x00000721,0x00050082,
-+ 0x0000001b,0x00000c54,0x000000a3,0x00000c53,0x0004007c,0x00000006,0x00000c55,0x00000c54,
-+ 0x00050051,0x00000006,0x00000725,0x00000865,0x00000002,0x00050051,0x00000006,0x00000727,
-+ 0x0000086f,0x00000002,0x00050051,0x00000006,0x00000729,0x00000879,0x00000002,0x00060050,
-+ 0x00000011,0x0000072a,0x00000725,0x00000727,0x00000729,0x00050051,0x00000006,0x0000072c,
-+ 0x00000883,0x00000003,0x00050051,0x00000006,0x0000072e,0x0000088d,0x00000003,0x00050051,
-+ 0x00000006,0x00000730,0x00000897,0x00000003,0x00060050,0x00000011,0x00000731,0x0000072c,
-+ 0x0000072e,0x00000730,0x00050051,0x00000006,0x00000733,0x00000865,0x00000001,0x00050051,
-+ 0x00000006,0x00000735,0x0000086f,0x00000001,0x00050051,0x00000006,0x00000737,0x00000879,
-+ 0x00000001,0x00060050,0x00000011,0x00000738,0x00000733,0x00000735,0x00000737,0x0007000c,
-+ 0x00000011,0x00000c5e,0x00000001,0x00000025,0x00000731,0x00000738,0x0007000c,0x00000011,
-+ 0x00000c5f,0x00000001,0x00000025,0x0000072a,0x00000c5e,0x00050051,0x00000006,0x0000073b,
-+ 0x00000883,0x00000000,0x00050051,0x00000006,0x0000073d,0x0000088d,0x00000000,0x00050051,
-+ 0x00000006,0x0000073f,0x00000897,0x00000000,0x00060050,0x00000011,0x00000740,0x0000073b,
-+ 0x0000073d,0x0000073f,0x0007000c,0x00000011,0x00000741,0x00000001,0x00000025,0x00000c5f,
-+ 0x00000740,0x0007000c,0x00000011,0x00000c65,0x00000001,0x00000028,0x00000731,0x00000738,
-+ 0x0007000c,0x00000011,0x00000c66,0x00000001,0x00000028,0x0000072a,0x00000c65,0x0007000c,
-+ 0x00000011,0x0000075f,0x00000001,0x00000028,0x00000c66,0x00000740,0x00050083,0x0000000c,
-+ 0x00000763,0x0000039c,0x0000062b,0x00050051,0x00000006,0x00000765,0x00000847,0x00000000,
-+ 0x00050051,0x00000006,0x00000767,0x00000851,0x00000000,0x00050051,0x00000006,0x00000769,
-+ 0x0000085b,0x00000000,0x00060050,0x00000011,0x0000076a,0x00000765,0x00000767,0x00000769,
-+ 0x00050051,0x00000006,0x00000c7c,0x00000763,0x00000000,0x00050085,0x00000006,0x00000c7f,
-+ 0x00000c7c,0x000006fd,0x00050051,0x00000006,0x00000c81,0x00000763,0x00000001,0x00050085,
-+ 0x00000006,0x00000c84,0x00000c81,0x00000702,0x00050081,0x00000006,0x00000c85,0x00000c7f,
-+ 0x00000c84,0x00060052,0x0000000c,0x0000119e,0x00000c85,0x0000129d,0x00000000,0x0004007f,
-+ 0x00000006,0x00000c8b,0x00000702,0x00050085,0x00000006,0x00000c8c,0x00000c7c,0x00000c8b,
-+ 0x00050085,0x00000006,0x00000c91,0x00000c81,0x000006fd,0x00050081,0x00000006,0x00000c92,
-+ 0x00000c8c,0x00000c91,0x00060052,0x0000000c,0x000011a4,0x00000c92,0x0000119e,0x00000001,
-+ 0x00050085,0x0000000c,0x00000c96,0x000011a4,0x0000071c,0x00050051,0x00000006,0x00000c98,
-+ 0x00000c96,0x00000000,0x00050085,0x00000006,0x00000c9b,0x00000c98,0x00000c98,0x00050051,
-+ 0x00000006,0x00000c9d,0x00000c96,0x00000001,0x00050085,0x00000006,0x00000ca0,0x00000c9d,
-+ 0x00000c9d,0x00050081,0x00000006,0x00000ca1,0x00000c9b,0x00000ca0,0x0007000c,0x00000006,
-+ 0x00000ca4,0x00000001,0x00000025,0x00000ca1,0x00000c55,0x00050085,0x00000006,0x00000ca7,
-+ 0x0000010d,0x00000ca4,0x00050081,0x00000006,0x00000ca9,0x00000ca7,0x00000112,0x00050085,
-+ 0x00000006,0x00000cac,0x00000721,0x00000ca4,0x00050081,0x00000006,0x00000cae,0x00000cac,
-+ 0x00000112,0x00050085,0x00000006,0x00000cb1,0x00000ca9,0x00000ca9,0x00050085,0x00000006,
-+ 0x00000cb4,0x00000cae,0x00000cae,0x00050085,0x00000006,0x00000cb7,0x00000123,0x00000cb1,
-+ 0x00050081,0x00000006,0x00000cb9,0x00000cb7,0x00000128,0x00050085,0x00000006,0x00000cbc,
-+ 0x00000cb9,0x00000cb4,0x0005008e,0x00000011,0x00000cbf,0x0000076a,0x00000cbc,0x00050083,
-+ 0x0000000c,0x00000775,0x000003b7,0x0000062b,0x00050051,0x00000006,0x00000777,0x00000847,
-+ 0x00000001,0x00050051,0x00000006,0x00000779,0x00000851,0x00000001,0x00050051,0x00000006,
-+ 0x0000077b,0x0000085b,0x00000001,0x00060050,0x00000011,0x0000077c,0x00000777,0x00000779,
-+ 0x0000077b,0x00050051,0x00000006,0x00000ce0,0x00000775,0x00000000,0x00050085,0x00000006,
-+ 0x00000ce3,0x00000ce0,0x000006fd,0x00050051,0x00000006,0x00000ce5,0x00000775,0x00000001,
-+ 0x00050085,0x00000006,0x00000ce8,0x00000ce5,0x00000702,0x00050081,0x00000006,0x00000ce9,
-+ 0x00000ce3,0x00000ce8,0x00060052,0x0000000c,0x000011b1,0x00000ce9,0x0000129d,0x00000000,
-+ 0x00050085,0x00000006,0x00000cf0,0x00000ce0,0x00000c8b,0x00050085,0x00000006,0x00000cf5,
-+ 0x00000ce5,0x000006fd,0x00050081,0x00000006,0x00000cf6,0x00000cf0,0x00000cf5,0x00060052,
-+ 0x0000000c,0x000011b7,0x00000cf6,0x000011b1,0x00000001,0x00050085,0x0000000c,0x00000cfa,
-+ 0x000011b7,0x0000071c,0x00050051,0x00000006,0x00000cfc,0x00000cfa,0x00000000,0x00050085,
-+ 0x00000006,0x00000cff,0x00000cfc,0x00000cfc,0x00050051,0x00000006,0x00000d01,0x00000cfa,
-+ 0x00000001,0x00050085,0x00000006,0x00000d04,0x00000d01,0x00000d01,0x00050081,0x00000006,
-+ 0x00000d05,0x00000cff,0x00000d04,0x0007000c,0x00000006,0x00000d08,0x00000001,0x00000025,
-+ 0x00000d05,0x00000c55,0x00050085,0x00000006,0x00000d0b,0x0000010d,0x00000d08,0x00050081,
-+ 0x00000006,0x00000d0d,0x00000d0b,0x00000112,0x00050085,0x00000006,0x00000d10,0x00000721,
-+ 0x00000d08,0x00050081,0x00000006,0x00000d12,0x00000d10,0x00000112,0x00050085,0x00000006,
-+ 0x00000d15,0x00000d0d,0x00000d0d,0x00050085,0x00000006,0x00000d18,0x00000d12,0x00000d12,
-+ 0x00050085,0x00000006,0x00000d1b,0x00000123,0x00000d15,0x00050081,0x00000006,0x00000d1d,
-+ 0x00000d1b,0x00000128,0x00050085,0x00000006,0x00000d20,0x00000d1d,0x00000d18,0x0005008e,
-+ 0x00000011,0x00000d23,0x0000077c,0x00000d20,0x00050081,0x00000011,0x00000d25,0x00000cbf,
-+ 0x00000d23,0x00050081,0x00000006,0x00000d28,0x00000cbc,0x00000d20,0x00050083,0x0000000c,
-+ 0x00000787,0x000003d2,0x0000062b,0x00050051,0x00000006,0x00000789,0x00000865,0x00000000,
-+ 0x00050051,0x00000006,0x0000078b,0x0000086f,0x00000000,0x00050051,0x00000006,0x0000078d,
-+ 0x00000879,0x00000000,0x00060050,0x00000011,0x0000078e,0x00000789,0x0000078b,0x0000078d,
-+ 0x00050051,0x00000006,0x00000d44,0x00000787,0x00000000,0x00050085,0x00000006,0x00000d47,
-+ 0x00000d44,0x000006fd,0x00050051,0x00000006,0x00000d49,0x00000787,0x00000001,0x00050085,
-+ 0x00000006,0x00000d4c,0x00000d49,0x00000702,0x00050081,0x00000006,0x00000d4d,0x00000d47,
-+ 0x00000d4c,0x00060052,0x0000000c,0x000011c4,0x00000d4d,0x0000129d,0x00000000,0x00050085,
-+ 0x00000006,0x00000d54,0x00000d44,0x00000c8b,0x00050085,0x00000006,0x00000d59,0x00000d49,
-+ 0x000006fd,0x00050081,0x00000006,0x00000d5a,0x00000d54,0x00000d59,0x00060052,0x0000000c,
-+ 0x000011ca,0x00000d5a,0x000011c4,0x00000001,0x00050085,0x0000000c,0x00000d5e,0x000011ca,
-+ 0x0000071c,0x00050051,0x00000006,0x00000d60,0x00000d5e,0x00000000,0x00050085,0x00000006,
-+ 0x00000d63,0x00000d60,0x00000d60,0x00050051,0x00000006,0x00000d65,0x00000d5e,0x00000001,
-+ 0x00050085,0x00000006,0x00000d68,0x00000d65,0x00000d65,0x00050081,0x00000006,0x00000d69,
-+ 0x00000d63,0x00000d68,0x0007000c,0x00000006,0x00000d6c,0x00000001,0x00000025,0x00000d69,
-+ 0x00000c55,0x00050085,0x00000006,0x00000d6f,0x0000010d,0x00000d6c,0x00050081,0x00000006,
-+ 0x00000d71,0x00000d6f,0x00000112,0x00050085,0x00000006,0x00000d74,0x00000721,0x00000d6c,
-+ 0x00050081,0x00000006,0x00000d76,0x00000d74,0x00000112,0x00050085,0x00000006,0x00000d79,
-+ 0x00000d71,0x00000d71,0x00050085,0x00000006,0x00000d7c,0x00000d76,0x00000d76,0x00050085,
-+ 0x00000006,0x00000d7f,0x00000123,0x00000d79,0x00050081,0x00000006,0x00000d81,0x00000d7f,
-+ 0x00000128,0x00050085,0x00000006,0x00000d84,0x00000d81,0x00000d7c,0x0005008e,0x00000011,
-+ 0x00000d87,0x0000078e,0x00000d84,0x00050081,0x00000011,0x00000d89,0x00000d25,0x00000d87,
-+ 0x00050081,0x00000006,0x00000d8c,0x00000d28,0x00000d84,0x00050083,0x0000000c,0x00000799,
-+ 0x000003ed,0x0000062b,0x00050051,0x00000006,0x00000da8,0x00000799,0x00000000,0x00050085,
-+ 0x00000006,0x00000dab,0x00000da8,0x000006fd,0x00050051,0x00000006,0x00000dad,0x00000799,
-+ 0x00000001,0x00050085,0x00000006,0x00000db0,0x00000dad,0x00000702,0x00050081,0x00000006,
-+ 0x00000db1,0x00000dab,0x00000db0,0x00060052,0x0000000c,0x000011d7,0x00000db1,0x0000129d,
-+ 0x00000000,0x00050085,0x00000006,0x00000db8,0x00000da8,0x00000c8b,0x00050085,0x00000006,
-+ 0x00000dbd,0x00000dad,0x000006fd,0x00050081,0x00000006,0x00000dbe,0x00000db8,0x00000dbd,
-+ 0x00060052,0x0000000c,0x000011dd,0x00000dbe,0x000011d7,0x00000001,0x00050085,0x0000000c,
-+ 0x00000dc2,0x000011dd,0x0000071c,0x00050051,0x00000006,0x00000dc4,0x00000dc2,0x00000000,
-+ 0x00050085,0x00000006,0x00000dc7,0x00000dc4,0x00000dc4,0x00050051,0x00000006,0x00000dc9,
-+ 0x00000dc2,0x00000001,0x00050085,0x00000006,0x00000dcc,0x00000dc9,0x00000dc9,0x00050081,
-+ 0x00000006,0x00000dcd,0x00000dc7,0x00000dcc,0x0007000c,0x00000006,0x00000dd0,0x00000001,
-+ 0x00000025,0x00000dcd,0x00000c55,0x00050085,0x00000006,0x00000dd3,0x0000010d,0x00000dd0,
-+ 0x00050081,0x00000006,0x00000dd5,0x00000dd3,0x00000112,0x00050085,0x00000006,0x00000dd8,
-+ 0x00000721,0x00000dd0,0x00050081,0x00000006,0x00000dda,0x00000dd8,0x00000112,0x00050085,
-+ 0x00000006,0x00000ddd,0x00000dd5,0x00000dd5,0x00050085,0x00000006,0x00000de0,0x00000dda,
-+ 0x00000dda,0x00050085,0x00000006,0x00000de3,0x00000123,0x00000ddd,0x00050081,0x00000006,
-+ 0x00000de5,0x00000de3,0x00000128,0x00050085,0x00000006,0x00000de8,0x00000de5,0x00000de0,
-+ 0x0005008e,0x00000011,0x00000deb,0x00000738,0x00000de8,0x00050081,0x00000011,0x00000ded,
-+ 0x00000d89,0x00000deb,0x00050081,0x00000006,0x00000df0,0x00000d8c,0x00000de8,0x0004007f,
-+ 0x0000000c,0x000007ab,0x0000062b,0x00050051,0x00000006,0x00000e0c,0x000007ab,0x00000000,
-+ 0x00050085,0x00000006,0x00000e0f,0x00000e0c,0x000006fd,0x00050051,0x00000006,0x00000e11,
-+ 0x000007ab,0x00000001,0x00050085,0x00000006,0x00000e14,0x00000e11,0x00000702,0x00050081,
-+ 0x00000006,0x00000e15,0x00000e0f,0x00000e14,0x00060052,0x0000000c,0x000011ea,0x00000e15,
-+ 0x0000129d,0x00000000,0x00050085,0x00000006,0x00000e1c,0x00000e0c,0x00000c8b,0x00050085,
-+ 0x00000006,0x00000e21,0x00000e11,0x000006fd,0x00050081,0x00000006,0x00000e22,0x00000e1c,
-+ 0x00000e21,0x00060052,0x0000000c,0x000011f0,0x00000e22,0x000011ea,0x00000001,0x00050085,
-+ 0x0000000c,0x00000e26,0x000011f0,0x0000071c,0x00050051,0x00000006,0x00000e28,0x00000e26,
-+ 0x00000000,0x00050085,0x00000006,0x00000e2b,0x00000e28,0x00000e28,0x00050051,0x00000006,
-+ 0x00000e2d,0x00000e26,0x00000001,0x00050085,0x00000006,0x00000e30,0x00000e2d,0x00000e2d,
-+ 0x00050081,0x00000006,0x00000e31,0x00000e2b,0x00000e30,0x0007000c,0x00000006,0x00000e34,
-+ 0x00000001,0x00000025,0x00000e31,0x00000c55,0x00050085,0x00000006,0x00000e37,0x0000010d,
-+ 0x00000e34,0x00050081,0x00000006,0x00000e39,0x00000e37,0x00000112,0x00050085,0x00000006,
-+ 0x00000e3c,0x00000721,0x00000e34,0x00050081,0x00000006,0x00000e3e,0x00000e3c,0x00000112,
-+ 0x00050085,0x00000006,0x00000e41,0x00000e39,0x00000e39,0x00050085,0x00000006,0x00000e44,
-+ 0x00000e3e,0x00000e3e,0x00050085,0x00000006,0x00000e47,0x00000123,0x00000e41,0x00050081,
-+ 0x00000006,0x00000e49,0x00000e47,0x00000128,0x00050085,0x00000006,0x00000e4c,0x00000e49,
-+ 0x00000e44,0x0005008e,0x00000011,0x00000e4f,0x0000072a,0x00000e4c,0x00050081,0x00000011,
-+ 0x00000e51,0x00000ded,0x00000e4f,0x00050081,0x00000006,0x00000e54,0x00000df0,0x00000e4c,
-+ 0x00050083,0x0000000c,0x000007bd,0x00000423,0x0000062b,0x00050051,0x00000006,0x000007bf,
-+ 0x00000865,0x00000003,0x00050051,0x00000006,0x000007c1,0x0000086f,0x00000003,0x00050051,
-+ 0x00000006,0x000007c3,0x00000879,0x00000003,0x00060050,0x00000011,0x000007c4,0x000007bf,
-+ 0x000007c1,0x000007c3,0x00050051,0x00000006,0x00000e70,0x000007bd,0x00000000,0x00050085,
-+ 0x00000006,0x00000e73,0x00000e70,0x000006fd,0x00050051,0x00000006,0x00000e75,0x000007bd,
-+ 0x00000001,0x00050085,0x00000006,0x00000e78,0x00000e75,0x00000702,0x00050081,0x00000006,
-+ 0x00000e79,0x00000e73,0x00000e78,0x00060052,0x0000000c,0x000011fd,0x00000e79,0x0000129d,
-+ 0x00000000,0x00050085,0x00000006,0x00000e80,0x00000e70,0x00000c8b,0x00050085,0x00000006,
-+ 0x00000e85,0x00000e75,0x000006fd,0x00050081,0x00000006,0x00000e86,0x00000e80,0x00000e85,
-+ 0x00060052,0x0000000c,0x00001203,0x00000e86,0x000011fd,0x00000001,0x00050085,0x0000000c,
-+ 0x00000e8a,0x00001203,0x0000071c,0x00050051,0x00000006,0x00000e8c,0x00000e8a,0x00000000,
-+ 0x00050085,0x00000006,0x00000e8f,0x00000e8c,0x00000e8c,0x00050051,0x00000006,0x00000e91,
-+ 0x00000e8a,0x00000001,0x00050085,0x00000006,0x00000e94,0x00000e91,0x00000e91,0x00050081,
-+ 0x00000006,0x00000e95,0x00000e8f,0x00000e94,0x0007000c,0x00000006,0x00000e98,0x00000001,
-+ 0x00000025,0x00000e95,0x00000c55,0x00050085,0x00000006,0x00000e9b,0x0000010d,0x00000e98,
-+ 0x00050081,0x00000006,0x00000e9d,0x00000e9b,0x00000112,0x00050085,0x00000006,0x00000ea0,
-+ 0x00000721,0x00000e98,0x00050081,0x00000006,0x00000ea2,0x00000ea0,0x00000112,0x00050085,
-+ 0x00000006,0x00000ea5,0x00000e9d,0x00000e9d,0x00050085,0x00000006,0x00000ea8,0x00000ea2,
-+ 0x00000ea2,0x00050085,0x00000006,0x00000eab,0x00000123,0x00000ea5,0x00050081,0x00000006,
-+ 0x00000ead,0x00000eab,0x00000128,0x00050085,0x00000006,0x00000eb0,0x00000ead,0x00000ea8,
-+ 0x0005008e,0x00000011,0x00000eb3,0x000007c4,0x00000eb0,0x00050081,0x00000011,0x00000eb5,
-+ 0x00000e51,0x00000eb3,0x00050081,0x00000006,0x00000eb8,0x00000e54,0x00000eb0,0x00050083,
-+ 0x0000000c,0x000007cf,0x0000043e,0x0000062b,0x00050051,0x00000006,0x00000ed4,0x000007cf,
-+ 0x00000000,0x00050085,0x00000006,0x00000ed7,0x00000ed4,0x000006fd,0x00050051,0x00000006,
-+ 0x00000ed9,0x000007cf,0x00000001,0x00050085,0x00000006,0x00000edc,0x00000ed9,0x00000702,
-+ 0x00050081,0x00000006,0x00000edd,0x00000ed7,0x00000edc,0x00060052,0x0000000c,0x00001210,
-+ 0x00000edd,0x0000129d,0x00000000,0x00050085,0x00000006,0x00000ee4,0x00000ed4,0x00000c8b,
-+ 0x00050085,0x00000006,0x00000ee9,0x00000ed9,0x000006fd,0x00050081,0x00000006,0x00000eea,
-+ 0x00000ee4,0x00000ee9,0x00060052,0x0000000c,0x00001216,0x00000eea,0x00001210,0x00000001,
-+ 0x00050085,0x0000000c,0x00000eee,0x00001216,0x0000071c,0x00050051,0x00000006,0x00000ef0,
-+ 0x00000eee,0x00000000,0x00050085,0x00000006,0x00000ef3,0x00000ef0,0x00000ef0,0x00050051,
-+ 0x00000006,0x00000ef5,0x00000eee,0x00000001,0x00050085,0x00000006,0x00000ef8,0x00000ef5,
-+ 0x00000ef5,0x00050081,0x00000006,0x00000ef9,0x00000ef3,0x00000ef8,0x0007000c,0x00000006,
-+ 0x00000efc,0x00000001,0x00000025,0x00000ef9,0x00000c55,0x00050085,0x00000006,0x00000eff,
-+ 0x0000010d,0x00000efc,0x00050081,0x00000006,0x00000f01,0x00000eff,0x00000112,0x00050085,
-+ 0x00000006,0x00000f04,0x00000721,0x00000efc,0x00050081,0x00000006,0x00000f06,0x00000f04,
-+ 0x00000112,0x00050085,0x00000006,0x00000f09,0x00000f01,0x00000f01,0x00050085,0x00000006,
-+ 0x00000f0c,0x00000f06,0x00000f06,0x00050085,0x00000006,0x00000f0f,0x00000123,0x00000f09,
-+ 0x00050081,0x00000006,0x00000f11,0x00000f0f,0x00000128,0x00050085,0x00000006,0x00000f14,
-+ 0x00000f11,0x00000f0c,0x0005008e,0x00000011,0x00000f17,0x00000740,0x00000f14,0x00050081,
-+ 0x00000011,0x00000f19,0x00000eb5,0x00000f17,0x00050081,0x00000006,0x00000f1c,0x00000eb8,
-+ 0x00000f14,0x00050083,0x0000000c,0x000007e1,0x0000045a,0x0000062b,0x00050051,0x00000006,
-+ 0x000007e3,0x00000883,0x00000001,0x00050051,0x00000006,0x000007e5,0x0000088d,0x00000001,
-+ 0x00050051,0x00000006,0x000007e7,0x00000897,0x00000001,0x00060050,0x00000011,0x000007e8,
-+ 0x000007e3,0x000007e5,0x000007e7,0x00050051,0x00000006,0x00000f38,0x000007e1,0x00000000,
-+ 0x00050085,0x00000006,0x00000f3b,0x00000f38,0x000006fd,0x00050051,0x00000006,0x00000f3d,
-+ 0x000007e1,0x00000001,0x00050085,0x00000006,0x00000f40,0x00000f3d,0x00000702,0x00050081,
-+ 0x00000006,0x00000f41,0x00000f3b,0x00000f40,0x00060052,0x0000000c,0x00001223,0x00000f41,
-+ 0x0000129d,0x00000000,0x00050085,0x00000006,0x00000f48,0x00000f38,0x00000c8b,0x00050085,
-+ 0x00000006,0x00000f4d,0x00000f3d,0x000006fd,0x00050081,0x00000006,0x00000f4e,0x00000f48,
-+ 0x00000f4d,0x00060052,0x0000000c,0x00001229,0x00000f4e,0x00001223,0x00000001,0x00050085,
-+ 0x0000000c,0x00000f52,0x00001229,0x0000071c,0x00050051,0x00000006,0x00000f54,0x00000f52,
-+ 0x00000000,0x00050085,0x00000006,0x00000f57,0x00000f54,0x00000f54,0x00050051,0x00000006,
-+ 0x00000f59,0x00000f52,0x00000001,0x00050085,0x00000006,0x00000f5c,0x00000f59,0x00000f59,
-+ 0x00050081,0x00000006,0x00000f5d,0x00000f57,0x00000f5c,0x0007000c,0x00000006,0x00000f60,
-+ 0x00000001,0x00000025,0x00000f5d,0x00000c55,0x00050085,0x00000006,0x00000f63,0x0000010d,
-+ 0x00000f60,0x00050081,0x00000006,0x00000f65,0x00000f63,0x00000112,0x00050085,0x00000006,
-+ 0x00000f68,0x00000721,0x00000f60,0x00050081,0x00000006,0x00000f6a,0x00000f68,0x00000112,
-+ 0x00050085,0x00000006,0x00000f6d,0x00000f65,0x00000f65,0x00050085,0x00000006,0x00000f70,
-+ 0x00000f6a,0x00000f6a,0x00050085,0x00000006,0x00000f73,0x00000123,0x00000f6d,0x00050081,
-+ 0x00000006,0x00000f75,0x00000f73,0x00000128,0x00050085,0x00000006,0x00000f78,0x00000f75,
-+ 0x00000f70,0x0005008e,0x00000011,0x00000f7b,0x000007e8,0x00000f78,0x00050081,0x00000011,
-+ 0x00000f7d,0x00000f19,0x00000f7b,0x00050081,0x00000006,0x00000f80,0x00000f1c,0x00000f78,
-+ 0x00050083,0x0000000c,0x000007f3,0x00000475,0x0000062b,0x00050051,0x00000006,0x000007f5,
-+ 0x00000883,0x00000002,0x00050051,0x00000006,0x000007f7,0x0000088d,0x00000002,0x00050051,
-+ 0x00000006,0x000007f9,0x00000897,0x00000002,0x00060050,0x00000011,0x000007fa,0x000007f5,
-+ 0x000007f7,0x000007f9,0x00050051,0x00000006,0x00000f9c,0x000007f3,0x00000000,0x00050085,
-+ 0x00000006,0x00000f9f,0x00000f9c,0x000006fd,0x00050051,0x00000006,0x00000fa1,0x000007f3,
-+ 0x00000001,0x00050085,0x00000006,0x00000fa4,0x00000fa1,0x00000702,0x00050081,0x00000006,
-+ 0x00000fa5,0x00000f9f,0x00000fa4,0x00060052,0x0000000c,0x00001236,0x00000fa5,0x0000129d,
-+ 0x00000000,0x00050085,0x00000006,0x00000fac,0x00000f9c,0x00000c8b,0x00050085,0x00000006,
-+ 0x00000fb1,0x00000fa1,0x000006fd,0x00050081,0x00000006,0x00000fb2,0x00000fac,0x00000fb1,
-+ 0x00060052,0x0000000c,0x0000123c,0x00000fb2,0x00001236,0x00000001,0x00050085,0x0000000c,
-+ 0x00000fb6,0x0000123c,0x0000071c,0x00050051,0x00000006,0x00000fb8,0x00000fb6,0x00000000,
-+ 0x00050085,0x00000006,0x00000fbb,0x00000fb8,0x00000fb8,0x00050051,0x00000006,0x00000fbd,
-+ 0x00000fb6,0x00000001,0x00050085,0x00000006,0x00000fc0,0x00000fbd,0x00000fbd,0x00050081,
-+ 0x00000006,0x00000fc1,0x00000fbb,0x00000fc0,0x0007000c,0x00000006,0x00000fc4,0x00000001,
-+ 0x00000025,0x00000fc1,0x00000c55,0x00050085,0x00000006,0x00000fc7,0x0000010d,0x00000fc4,
-+ 0x00050081,0x00000006,0x00000fc9,0x00000fc7,0x00000112,0x00050085,0x00000006,0x00000fcc,
-+ 0x00000721,0x00000fc4,0x00050081,0x00000006,0x00000fce,0x00000fcc,0x00000112,0x00050085,
-+ 0x00000006,0x00000fd1,0x00000fc9,0x00000fc9,0x00050085,0x00000006,0x00000fd4,0x00000fce,
-+ 0x00000fce,0x00050085,0x00000006,0x00000fd7,0x00000123,0x00000fd1,0x00050081,0x00000006,
-+ 0x00000fd9,0x00000fd7,0x00000128,0x00050085,0x00000006,0x00000fdc,0x00000fd9,0x00000fd4,
-+ 0x0005008e,0x00000011,0x00000fdf,0x000007fa,0x00000fdc,0x00050081,0x00000011,0x00000fe1,
-+ 0x00000f7d,0x00000fdf,0x00050081,0x00000006,0x00000fe4,0x00000f80,0x00000fdc,0x00050083,
-+ 0x0000000c,0x00000805,0x00000490,0x0000062b,0x00050051,0x00000006,0x00001000,0x00000805,
-+ 0x00000000,0x00050085,0x00000006,0x00001003,0x00001000,0x000006fd,0x00050051,0x00000006,
-+ 0x00001005,0x00000805,0x00000001,0x00050085,0x00000006,0x00001008,0x00001005,0x00000702,
-+ 0x00050081,0x00000006,0x00001009,0x00001003,0x00001008,0x00060052,0x0000000c,0x00001249,
-+ 0x00001009,0x0000129d,0x00000000,0x00050085,0x00000006,0x00001010,0x00001000,0x00000c8b,
-+ 0x00050085,0x00000006,0x00001015,0x00001005,0x000006fd,0x00050081,0x00000006,0x00001016,
-+ 0x00001010,0x00001015,0x00060052,0x0000000c,0x0000124f,0x00001016,0x00001249,0x00000001,
-+ 0x00050085,0x0000000c,0x0000101a,0x0000124f,0x0000071c,0x00050051,0x00000006,0x0000101c,
-+ 0x0000101a,0x00000000,0x00050085,0x00000006,0x0000101f,0x0000101c,0x0000101c,0x00050051,
-+ 0x00000006,0x00001021,0x0000101a,0x00000001,0x00050085,0x00000006,0x00001024,0x00001021,
-+ 0x00001021,0x00050081,0x00000006,0x00001025,0x0000101f,0x00001024,0x0007000c,0x00000006,
-+ 0x00001028,0x00000001,0x00000025,0x00001025,0x00000c55,0x00050085,0x00000006,0x0000102b,
-+ 0x0000010d,0x00001028,0x00050081,0x00000006,0x0000102d,0x0000102b,0x00000112,0x00050085,
-+ 0x00000006,0x00001030,0x00000721,0x00001028,0x00050081,0x00000006,0x00001032,0x00001030,
-+ 0x00000112,0x00050085,0x00000006,0x00001035,0x0000102d,0x0000102d,0x00050085,0x00000006,
-+ 0x00001038,0x00001032,0x00001032,0x00050085,0x00000006,0x0000103b,0x00000123,0x00001035,
-+ 0x00050081,0x00000006,0x0000103d,0x0000103b,0x00000128,0x00050085,0x00000006,0x00001040,
-+ 0x0000103d,0x00001038,0x0005008e,0x00000011,0x00001043,0x00000731,0x00001040,0x00050081,
-+ 0x00000011,0x00001045,0x00000fe1,0x00001043,0x00050081,0x00000006,0x00001048,0x00000fe4,
-+ 0x00001040,0x00050083,0x0000000c,0x00000817,0x000004ab,0x0000062b,0x00050051,0x00000006,
-+ 0x00000819,0x000008a1,0x00000002,0x00050051,0x00000006,0x0000081b,0x000008ab,0x00000002,
-+ 0x00050051,0x00000006,0x0000081d,0x000008b5,0x00000002,0x00060050,0x00000011,0x0000081e,
-+ 0x00000819,0x0000081b,0x0000081d,0x00050051,0x00000006,0x00001064,0x00000817,0x00000000,
-+ 0x00050085,0x00000006,0x00001067,0x00001064,0x000006fd,0x00050051,0x00000006,0x00001069,
-+ 0x00000817,0x00000001,0x00050085,0x00000006,0x0000106c,0x00001069,0x00000702,0x00050081,
-+ 0x00000006,0x0000106d,0x00001067,0x0000106c,0x00060052,0x0000000c,0x0000125c,0x0000106d,
-+ 0x0000129d,0x00000000,0x00050085,0x00000006,0x00001074,0x00001064,0x00000c8b,0x00050085,
-+ 0x00000006,0x00001079,0x00001069,0x000006fd,0x00050081,0x00000006,0x0000107a,0x00001074,
-+ 0x00001079,0x00060052,0x0000000c,0x00001262,0x0000107a,0x0000125c,0x00000001,0x00050085,
-+ 0x0000000c,0x0000107e,0x00001262,0x0000071c,0x00050051,0x00000006,0x00001080,0x0000107e,
-+ 0x00000000,0x00050085,0x00000006,0x00001083,0x00001080,0x00001080,0x00050051,0x00000006,
-+ 0x00001085,0x0000107e,0x00000001,0x00050085,0x00000006,0x00001088,0x00001085,0x00001085,
-+ 0x00050081,0x00000006,0x00001089,0x00001083,0x00001088,0x0007000c,0x00000006,0x0000108c,
-+ 0x00000001,0x00000025,0x00001089,0x00000c55,0x00050085,0x00000006,0x0000108f,0x0000010d,
-+ 0x0000108c,0x00050081,0x00000006,0x00001091,0x0000108f,0x00000112,0x00050085,0x00000006,
-+ 0x00001094,0x00000721,0x0000108c,0x00050081,0x00000006,0x00001096,0x00001094,0x00000112,
-+ 0x00050085,0x00000006,0x00001099,0x00001091,0x00001091,0x00050085,0x00000006,0x0000109c,
-+ 0x00001096,0x00001096,0x00050085,0x00000006,0x0000109f,0x00000123,0x00001099,0x00050081,
-+ 0x00000006,0x000010a1,0x0000109f,0x00000128,0x00050085,0x00000006,0x000010a4,0x000010a1,
-+ 0x0000109c,0x0005008e,0x00000011,0x000010a7,0x0000081e,0x000010a4,0x00050081,0x00000011,
-+ 0x000010a9,0x00001045,0x000010a7,0x00050081,0x00000006,0x000010ac,0x00001048,0x000010a4,
-+ 0x00050083,0x0000000c,0x00000829,0x000004c6,0x0000062b,0x00050051,0x00000006,0x0000082b,
-+ 0x000008a1,0x00000003,0x00050051,0x00000006,0x0000082d,0x000008ab,0x00000003,0x00050051,
-+ 0x00000006,0x0000082f,0x000008b5,0x00000003,0x00060050,0x00000011,0x00000830,0x0000082b,
-+ 0x0000082d,0x0000082f,0x00050051,0x00000006,0x000010c8,0x00000829,0x00000000,0x00050085,
-+ 0x00000006,0x000010cb,0x000010c8,0x000006fd,0x00050051,0x00000006,0x000010cd,0x00000829,
-+ 0x00000001,0x00050085,0x00000006,0x000010d0,0x000010cd,0x00000702,0x00050081,0x00000006,
-+ 0x000010d1,0x000010cb,0x000010d0,0x00060052,0x0000000c,0x0000126f,0x000010d1,0x0000129d,
-+ 0x00000000,0x00050085,0x00000006,0x000010d8,0x000010c8,0x00000c8b,0x00050085,0x00000006,
-+ 0x000010dd,0x000010cd,0x000006fd,0x00050081,0x00000006,0x000010de,0x000010d8,0x000010dd,
-+ 0x00060052,0x0000000c,0x00001275,0x000010de,0x0000126f,0x00000001,0x00050085,0x0000000c,
-+ 0x000010e2,0x00001275,0x0000071c,0x00050051,0x00000006,0x000010e4,0x000010e2,0x00000000,
-+ 0x00050085,0x00000006,0x000010e7,0x000010e4,0x000010e4,0x00050051,0x00000006,0x000010e9,
-+ 0x000010e2,0x00000001,0x00050085,0x00000006,0x000010ec,0x000010e9,0x000010e9,0x00050081,
-+ 0x00000006,0x000010ed,0x000010e7,0x000010ec,0x0007000c,0x00000006,0x000010f0,0x00000001,
-+ 0x00000025,0x000010ed,0x00000c55,0x00050085,0x00000006,0x000010f3,0x0000010d,0x000010f0,
-+ 0x00050081,0x00000006,0x000010f5,0x000010f3,0x00000112,0x00050085,0x00000006,0x000010f8,
-+ 0x00000721,0x000010f0,0x00050081,0x00000006,0x000010fa,0x000010f8,0x00000112,0x00050085,
-+ 0x00000006,0x000010fd,0x000010f5,0x000010f5,0x00050085,0x00000006,0x00001100,0x000010fa,
-+ 0x000010fa,0x00050085,0x00000006,0x00001103,0x00000123,0x000010fd,0x00050081,0x00000006,
-+ 0x00001105,0x00001103,0x00000128,0x00050085,0x00000006,0x00001108,0x00001105,0x00001100,
-+ 0x0005008e,0x00000011,0x0000110b,0x00000830,0x00001108,0x00050081,0x00000011,0x0000110d,
-+ 0x000010a9,0x0000110b,0x00050081,0x00000006,0x00001110,0x000010ac,0x00001108,0x00050088,
-+ 0x00000006,0x00001125,0x00000093,0x00001110,0x00060050,0x00000011,0x0000112e,0x00001125,
-+ 0x00001125,0x00001125,0x00050085,0x00000011,0x00000840,0x0000110d,0x0000112e,0x0007000c,
-+ 0x00000011,0x00000841,0x00000001,0x00000028,0x00000741,0x00000840,0x0007000c,0x00000011,
-+ 0x00000842,0x00000001,0x00000025,0x0000075f,0x00000841,0x0004003d,0x00000515,0x00000518,
-+ 0x00000517,0x0004007c,0x0000051b,0x0000051c,0x000004f0,0x00050051,0x00000006,0x0000051e,
-+ 0x00000842,0x00000000,0x00050051,0x00000006,0x0000051f,0x00000842,0x00000001,0x00050051,
-+ 0x00000006,0x00000520,0x00000842,0x00000002,0x00070050,0x00000016,0x00000521,0x0000051e,
-+ 0x0000051f,0x00000520,0x00000093,0x00040063,0x00000518,0x0000051c,0x00000521,0x000200f9,
-+ 0x00000524,0x000200f8,0x00000524,0x000100fd,0x00010038
-+};
-+
-+/*
-+#version 460
-+#extension GL_GOOGLE_include_directive: require
-+
-+layout(local_size_x=8, local_size_y=8, local_size_z=1) in;
-+
-+layout(binding = 0) uniform sampler2D texSampler;
-+layout(binding = 1) uniform writeonly image2D outImage;
-+
-+layout(push_constant) uniform pushConstants {
-+ uvec2 c1;
-+ ivec2 extent;
-+ ivec4 viewport;
-+};
-+
-+#define A_GPU 1
-+#define A_GLSL 1
-+//#include "ffx_a.h"
-+#define FSR_RCAS_F 1
-+vec4 FsrRcasLoadF(ivec2 p) { return texelFetch(texSampler, clamp(p, ivec2(0), extent), 0); }
-+void FsrRcasInputF(inout float r, inout float g, inout float b) {}
-+//#include "ffx_fsr1.h"
-+
-+
-+void main()
-+{
-+ vec3 color;
-+
-+ if (any(lessThan(gl_GlobalInvocationID.xy, uvec2(viewport.xy))) ||
-+ any(greaterThan(gl_GlobalInvocationID.xy, uvec2(viewport.zw))))
-+ {
-+ color = vec3(0.0, 0.0, 0.0);
-+ }
-+ else
-+ {
-+ FsrRcasF(color.r, color.g, color.b, uvec2(gl_GlobalInvocationID.xy - viewport.xy), c1.xyxx);
-+ }
-+
-+ imageStore(outImage, ivec2(gl_GlobalInvocationID.xy), vec4(color, 1.0));
-+}
-+*/
-+const uint32_t fsr_rcas_comp_spv[] = {
-+ 0x07230203,0x00010000,0x0008000a,0x0000061e,0x00000000,0x00020011,0x00000001,0x00020011,
-+ 0x00000038,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,
-+ 0x00000000,0x00000001,0x0006000f,0x00000005,0x00000004,0x6e69616d,0x00000000,0x00000287,
-+ 0x00060010,0x00000004,0x00000011,0x00000008,0x00000008,0x00000001,0x00030003,0x00000002,
-+ 0x000001cc,0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,
-+ 0x7269645f,0x69746365,0x00006576,0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,
-+ 0x69645f65,0x74636572,0x00657669,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00050005,
-+ 0x0000007b,0x53786574,0x6c706d61,0x00007265,0x00060005,0x00000081,0x68737570,0x736e6f43,
-+ 0x746e6174,0x00000073,0x00040006,0x00000081,0x00000000,0x00003163,0x00050006,0x00000081,
-+ 0x00000001,0x65747865,0x0000746e,0x00060006,0x00000081,0x00000002,0x77656976,0x74726f70,
-+ 0x00000000,0x00030005,0x00000083,0x00000000,0x00080005,0x00000287,0x475f6c67,0x61626f6c,
-+ 0x766e496c,0x7461636f,0x496e6f69,0x00000044,0x00050005,0x000002c0,0x4974756f,0x6567616d,
-+ 0x00000000,0x00040047,0x0000007b,0x00000022,0x00000000,0x00040047,0x0000007b,0x00000021,
-+ 0x00000000,0x00050048,0x00000081,0x00000000,0x00000023,0x00000000,0x00050048,0x00000081,
-+ 0x00000001,0x00000023,0x00000008,0x00050048,0x00000081,0x00000002,0x00000023,0x00000010,
-+ 0x00030047,0x00000081,0x00000002,0x00040047,0x00000287,0x0000000b,0x0000001c,0x00040047,
-+ 0x000002c0,0x00000022,0x00000000,0x00040047,0x000002c0,0x00000021,0x00000001,0x00030047,
-+ 0x000002c0,0x00000019,0x00040047,0x000002cb,0x0000000b,0x00000019,0x00020013,0x00000002,
-+ 0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040015,0x0000000c,
-+ 0x00000020,0x00000000,0x00040015,0x00000026,0x00000020,0x00000001,0x00040017,0x00000027,
-+ 0x00000026,0x00000002,0x00040017,0x00000029,0x00000006,0x00000004,0x00040017,0x00000034,
-+ 0x0000000c,0x00000002,0x0004002b,0x00000006,0x00000054,0x3f800000,0x0004002b,0x00000006,
-+ 0x0000005c,0x00000000,0x0004002b,0x0000000c,0x00000065,0x7ef19fff,0x0004002b,0x00000006,
-+ 0x00000071,0x40000000,0x00090019,0x00000078,0x00000006,0x00000001,0x00000000,0x00000000,
-+ 0x00000000,0x00000001,0x00000000,0x0003001b,0x00000079,0x00000078,0x00040020,0x0000007a,
-+ 0x00000000,0x00000079,0x0004003b,0x0000007a,0x0000007b,0x00000000,0x0004002b,0x00000026,
-+ 0x0000007e,0x00000000,0x0005002c,0x00000027,0x0000007f,0x0000007e,0x0000007e,0x00040017,
-+ 0x00000080,0x00000026,0x00000004,0x0005001e,0x00000081,0x00000034,0x00000027,0x00000080,
-+ 0x00040020,0x00000082,0x00000009,0x00000081,0x0004003b,0x00000082,0x00000083,0x00000009,
-+ 0x0004002b,0x00000026,0x00000084,0x00000001,0x00040020,0x00000085,0x00000009,0x00000027,
-+ 0x00040017,0x00000090,0x00000006,0x00000003,0x0004002b,0x00000026,0x00000094,0xffffffff,
-+ 0x0005002c,0x00000027,0x00000095,0x0000007e,0x00000094,0x0005002c,0x00000027,0x0000009c,
-+ 0x00000094,0x0000007e,0x0005002c,0x00000027,0x000000a8,0x00000084,0x0000007e,0x0005002c,
-+ 0x00000027,0x000000af,0x0000007e,0x00000084,0x0004002b,0x0000000c,0x000000b9,0x00000001,
-+ 0x0004002b,0x00000006,0x00000154,0x3e800000,0x0004002b,0x00000006,0x000001d3,0xc0800000,
-+ 0x0004002b,0x00000006,0x000001d7,0x40800000,0x0004002b,0x00000006,0x0000022e,0xbe400000,
-+ 0x00020014,0x00000284,0x00040017,0x00000285,0x0000000c,0x00000003,0x00040020,0x00000286,
-+ 0x00000001,0x00000285,0x0004003b,0x00000286,0x00000287,0x00000001,0x0004002b,0x00000026,
-+ 0x0000028a,0x00000002,0x00040020,0x0000028b,0x00000009,0x00000080,0x00040017,0x00000290,
-+ 0x00000284,0x00000002,0x0006002c,0x00000090,0x000002a2,0x0000005c,0x0000005c,0x0000005c,
-+ 0x00040020,0x000002b3,0x00000009,0x00000034,0x00090019,0x000002be,0x00000006,0x00000001,
-+ 0x00000000,0x00000000,0x00000000,0x00000002,0x00000000,0x00040020,0x000002bf,0x00000000,
-+ 0x000002be,0x0004003b,0x000002bf,0x000002c0,0x00000000,0x0004002b,0x0000000c,0x000002ca,
-+ 0x00000008,0x0006002c,0x00000285,0x000002cb,0x000002ca,0x000002ca,0x000000b9,0x00030001,
-+ 0x00000090,0x0000061d,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,
-+ 0x00000005,0x0004003d,0x00000285,0x00000288,0x00000287,0x0007004f,0x00000034,0x00000289,
-+ 0x00000288,0x00000288,0x00000000,0x00000001,0x00050041,0x0000028b,0x0000028c,0x00000083,
-+ 0x0000028a,0x0004003d,0x00000080,0x0000028d,0x0000028c,0x0007004f,0x00000027,0x0000028e,
-+ 0x0000028d,0x0000028d,0x00000000,0x00000001,0x0004007c,0x00000034,0x0000028f,0x0000028e,
-+ 0x000500b0,0x00000290,0x00000291,0x00000289,0x0000028f,0x0004009a,0x00000284,0x00000292,
-+ 0x00000291,0x000400a8,0x00000284,0x00000293,0x00000292,0x000300f7,0x00000295,0x00000000,
-+ 0x000400fa,0x00000293,0x00000294,0x00000295,0x000200f8,0x00000294,0x0007004f,0x00000027,
-+ 0x0000029a,0x0000028d,0x0000028d,0x00000002,0x00000003,0x0004007c,0x00000034,0x0000029b,
-+ 0x0000029a,0x000500ac,0x00000290,0x0000029c,0x00000289,0x0000029b,0x0004009a,0x00000284,
-+ 0x0000029d,0x0000029c,0x000200f9,0x00000295,0x000200f8,0x00000295,0x000700f5,0x00000284,
-+ 0x0000029e,0x00000292,0x00000005,0x0000029d,0x00000294,0x000300f7,0x000002a0,0x00000000,
-+ 0x000400fa,0x0000029e,0x0000029f,0x000002a3,0x000200f8,0x0000029f,0x000200f9,0x000002a0,
-+ 0x000200f8,0x000002a3,0x00050082,0x00000034,0x000002aa,0x00000289,0x0000028f,0x00050041,
-+ 0x000002b3,0x000002b4,0x00000083,0x0000007e,0x0004003d,0x00000034,0x000002b5,0x000002b4,
-+ 0x0004007c,0x00000027,0x00000353,0x000002aa,0x00050080,0x00000027,0x00000355,0x00000353,
-+ 0x00000095,0x0004003d,0x00000079,0x000004b3,0x0000007b,0x00050041,0x00000085,0x000004b5,
-+ 0x00000083,0x00000084,0x0004003d,0x00000027,0x000004b6,0x000004b5,0x0008000c,0x00000027,
-+ 0x000004b7,0x00000001,0x0000002d,0x00000355,0x0000007f,0x000004b6,0x00040064,0x00000078,
-+ 0x000004b8,0x000004b3,0x0007005f,0x00000029,0x000004b9,0x000004b8,0x000004b7,0x00000002,
-+ 0x0000007e,0x00050080,0x00000027,0x00000359,0x00000353,0x0000009c,0x0008000c,0x00000027,
-+ 0x000004c0,0x00000001,0x0000002d,0x00000359,0x0000007f,0x000004b6,0x00040064,0x00000078,
-+ 0x000004c1,0x000004b3,0x0007005f,0x00000029,0x000004c2,0x000004c1,0x000004c0,0x00000002,
-+ 0x0000007e,0x0008000c,0x00000027,0x000004c9,0x00000001,0x0000002d,0x00000353,0x0000007f,
-+ 0x000004b6,0x00040064,0x00000078,0x000004ca,0x000004b3,0x0007005f,0x00000029,0x000004cb,
-+ 0x000004ca,0x000004c9,0x00000002,0x0000007e,0x00050080,0x00000027,0x00000360,0x00000353,
-+ 0x000000a8,0x0008000c,0x00000027,0x000004d2,0x00000001,0x0000002d,0x00000360,0x0000007f,
-+ 0x000004b6,0x00040064,0x00000078,0x000004d3,0x000004b3,0x0007005f,0x00000029,0x000004d4,
-+ 0x000004d3,0x000004d2,0x00000002,0x0000007e,0x00050080,0x00000027,0x00000364,0x00000353,
-+ 0x000000af,0x0008000c,0x00000027,0x000004db,0x00000001,0x0000002d,0x00000364,0x0000007f,
-+ 0x000004b6,0x00040064,0x00000078,0x000004dc,0x000004b3,0x0007005f,0x00000029,0x000004dd,
-+ 0x000004dc,0x000004db,0x00000002,0x0000007e,0x00050051,0x00000006,0x00000368,0x000004b9,
-+ 0x00000000,0x00050051,0x00000006,0x0000036a,0x000004b9,0x00000001,0x00050051,0x00000006,
-+ 0x0000036c,0x000004b9,0x00000002,0x00050051,0x00000006,0x0000036e,0x000004c2,0x00000000,
-+ 0x00050051,0x00000006,0x00000370,0x000004c2,0x00000001,0x00050051,0x00000006,0x00000372,
-+ 0x000004c2,0x00000002,0x00050051,0x00000006,0x00000374,0x000004cb,0x00000000,0x00050051,
-+ 0x00000006,0x00000376,0x000004cb,0x00000001,0x00050051,0x00000006,0x00000378,0x000004cb,
-+ 0x00000002,0x00050051,0x00000006,0x0000037a,0x000004d4,0x00000000,0x00050051,0x00000006,
-+ 0x0000037c,0x000004d4,0x00000001,0x00050051,0x00000006,0x0000037e,0x000004d4,0x00000002,
-+ 0x00050051,0x00000006,0x00000380,0x000004dd,0x00000000,0x00050051,0x00000006,0x00000382,
-+ 0x000004dd,0x00000001,0x00050051,0x00000006,0x00000384,0x000004dd,0x00000002,0x0007000c,
-+ 0x00000006,0x0000055a,0x00000001,0x00000025,0x0000036e,0x0000037a,0x0007000c,0x00000006,
-+ 0x0000055b,0x00000001,0x00000025,0x00000368,0x0000055a,0x0007000c,0x00000006,0x00000404,
-+ 0x00000001,0x00000025,0x0000055b,0x00000380,0x0007000c,0x00000006,0x00000561,0x00000001,
-+ 0x00000025,0x00000370,0x0000037c,0x0007000c,0x00000006,0x00000562,0x00000001,0x00000025,
-+ 0x0000036a,0x00000561,0x0007000c,0x00000006,0x0000040a,0x00000001,0x00000025,0x00000562,
-+ 0x00000382,0x0007000c,0x00000006,0x00000568,0x00000001,0x00000025,0x00000372,0x0000037e,
-+ 0x0007000c,0x00000006,0x00000569,0x00000001,0x00000025,0x0000036c,0x00000568,0x0007000c,
-+ 0x00000006,0x00000410,0x00000001,0x00000025,0x00000569,0x00000384,0x0007000c,0x00000006,
-+ 0x0000056f,0x00000001,0x00000028,0x0000036e,0x0000037a,0x0007000c,0x00000006,0x00000570,
-+ 0x00000001,0x00000028,0x00000368,0x0000056f,0x0007000c,0x00000006,0x00000416,0x00000001,
-+ 0x00000028,0x00000570,0x00000380,0x0007000c,0x00000006,0x00000576,0x00000001,0x00000028,
-+ 0x00000370,0x0000037c,0x0007000c,0x00000006,0x00000577,0x00000001,0x00000028,0x0000036a,
-+ 0x00000576,0x0007000c,0x00000006,0x0000041c,0x00000001,0x00000028,0x00000577,0x00000382,
-+ 0x0007000c,0x00000006,0x0000057d,0x00000001,0x00000028,0x00000372,0x0000037e,0x0007000c,
-+ 0x00000006,0x0000057e,0x00000001,0x00000028,0x0000036c,0x0000057d,0x0007000c,0x00000006,
-+ 0x00000422,0x00000001,0x00000028,0x0000057e,0x00000384,0x00050088,0x00000006,0x00000587,
-+ 0x00000154,0x00000416,0x00050085,0x00000006,0x00000428,0x00000404,0x00000587,0x00050088,
-+ 0x00000006,0x00000593,0x00000154,0x0000041c,0x00050085,0x00000006,0x0000042e,0x0000040a,
-+ 0x00000593,0x00050088,0x00000006,0x0000059f,0x00000154,0x00000422,0x00050085,0x00000006,
-+ 0x00000434,0x00000410,0x0000059f,0x00050083,0x00000006,0x00000438,0x00000054,0x00000416,
-+ 0x00050085,0x00000006,0x0000043b,0x000001d7,0x00000404,0x00050081,0x00000006,0x0000043e,
-+ 0x0000043b,0x000001d3,0x00050088,0x00000006,0x000005ab,0x00000054,0x0000043e,0x00050085,
-+ 0x00000006,0x00000440,0x00000438,0x000005ab,0x00050083,0x00000006,0x00000444,0x00000054,
-+ 0x0000041c,0x00050085,0x00000006,0x00000447,0x000001d7,0x0000040a,0x00050081,0x00000006,
-+ 0x0000044a,0x00000447,0x000001d3,0x00050088,0x00000006,0x000005b7,0x00000054,0x0000044a,
-+ 0x00050085,0x00000006,0x0000044c,0x00000444,0x000005b7,0x00050083,0x00000006,0x00000450,
-+ 0x00000054,0x00000422,0x00050085,0x00000006,0x00000453,0x000001d7,0x00000410,0x00050081,
-+ 0x00000006,0x00000456,0x00000453,0x000001d3,0x00050088,0x00000006,0x000005c3,0x00000054,
-+ 0x00000456,0x00050085,0x00000006,0x00000458,0x00000450,0x000005c3,0x0004007f,0x00000006,
-+ 0x0000045a,0x00000428,0x0007000c,0x00000006,0x0000045c,0x00000001,0x00000028,0x0000045a,
-+ 0x00000440,0x0004007f,0x00000006,0x0000045e,0x0000042e,0x0007000c,0x00000006,0x00000460,
-+ 0x00000001,0x00000028,0x0000045e,0x0000044c,0x0004007f,0x00000006,0x00000462,0x00000434,
-+ 0x0007000c,0x00000006,0x00000464,0x00000001,0x00000028,0x00000462,0x00000458,0x0007000c,
-+ 0x00000006,0x000005cf,0x00000001,0x00000028,0x00000460,0x00000464,0x0007000c,0x00000006,
-+ 0x000005d0,0x00000001,0x00000028,0x0000045c,0x000005cf,0x0007000c,0x00000006,0x0000046b,
-+ 0x00000001,0x00000025,0x000005d0,0x0000005c,0x0007000c,0x00000006,0x0000046c,0x00000001,
-+ 0x00000028,0x0000022e,0x0000046b,0x00050051,0x0000000c,0x0000046e,0x000002b5,0x00000000,
-+ 0x0004007c,0x00000006,0x0000046f,0x0000046e,0x00050085,0x00000006,0x00000470,0x0000046c,
-+ 0x0000046f,0x00050085,0x00000006,0x00000473,0x000001d7,0x00000470,0x00050081,0x00000006,
-+ 0x00000475,0x00000473,0x00000054,0x0004007c,0x0000000c,0x000005e1,0x00000475,0x00050082,
-+ 0x0000000c,0x000005e2,0x00000065,0x000005e1,0x0004007c,0x00000006,0x000005e3,0x000005e2,
-+ 0x0004007f,0x00000006,0x000005e6,0x000005e3,0x00050085,0x00000006,0x000005e8,0x000005e6,
-+ 0x00000475,0x00050081,0x00000006,0x000005ea,0x000005e8,0x00000071,0x00050085,0x00000006,
-+ 0x000005eb,0x000005e3,0x000005ea,0x00050081,0x00000006,0x00000611,0x00000368,0x0000036e,
-+ 0x00050081,0x00000006,0x00000612,0x00000611,0x00000380,0x00050081,0x00000006,0x00000613,
-+ 0x00000612,0x0000037a,0x00050085,0x00000006,0x00000485,0x00000470,0x00000613,0x00050081,
-+ 0x00000006,0x00000487,0x00000485,0x00000374,0x00050085,0x00000006,0x00000489,0x00000487,
-+ 0x000005eb,0x00050081,0x00000006,0x00000614,0x0000036a,0x00000370,0x00050081,0x00000006,
-+ 0x00000615,0x00000614,0x00000382,0x00050081,0x00000006,0x00000616,0x00000615,0x0000037c,
-+ 0x00050085,0x00000006,0x00000498,0x00000470,0x00000616,0x00050081,0x00000006,0x0000049a,
-+ 0x00000498,0x00000376,0x00050085,0x00000006,0x0000049c,0x0000049a,0x000005eb,0x00050081,
-+ 0x00000006,0x00000617,0x0000036c,0x00000372,0x00050081,0x00000006,0x00000618,0x00000617,
-+ 0x00000384,0x00050081,0x00000006,0x00000619,0x00000618,0x0000037e,0x00050085,0x00000006,
-+ 0x000004ab,0x00000470,0x00000619,0x00050081,0x00000006,0x000004ad,0x000004ab,0x00000378,
-+ 0x00050085,0x00000006,0x000004af,0x000004ad,0x000005eb,0x00060052,0x00000090,0x00000609,
-+ 0x00000489,0x0000061d,0x00000000,0x00060052,0x00000090,0x0000060b,0x0000049c,0x00000609,
-+ 0x00000001,0x00060052,0x00000090,0x0000060d,0x000004af,0x0000060b,0x00000002,0x000200f9,
-+ 0x000002a0,0x000200f8,0x000002a0,0x000700f5,0x00000090,0x0000061c,0x000002a2,0x0000029f,
-+ 0x0000060d,0x000002a3,0x0004003d,0x000002be,0x000002c1,0x000002c0,0x0004007c,0x00000027,
-+ 0x000002c4,0x00000289,0x00050051,0x00000006,0x000002c6,0x0000061c,0x00000000,0x00050051,
-+ 0x00000006,0x000002c7,0x0000061c,0x00000001,0x00050051,0x00000006,0x000002c8,0x0000061c,
-+ 0x00000002,0x00070050,0x00000029,0x000002c9,0x000002c6,0x000002c7,0x000002c8,0x00000054,
-+ 0x00040063,0x000002c1,0x000002c4,0x000002c9,0x000100fd,0x00010038
-+};
-+
-+static void destroy_pipeline(VkDevice device, struct fs_comp_pipeline *pipeline)
-+{
-+ device->funcs.p_vkDestroyPipeline(device->device, pipeline->pipeline, NULL);
-+ pipeline->pipeline = VK_NULL_HANDLE;
-+
-+ device->funcs.p_vkDestroyPipelineLayout(device->device, pipeline->pipeline_layout, NULL);
-+ pipeline->pipeline_layout = VK_NULL_HANDLE;
-+}
-+
-+static VkResult create_pipeline(VkDevice device, struct VkSwapchainKHR_T *swapchain,
-+ const uint32_t *code, uint32_t code_size, uint32_t push_size, struct fs_comp_pipeline *pipeline)
- {
-- VkResult res;
- #if defined(USE_STRUCT_CONVERSION)
- VkComputePipelineCreateInfo_host pipelineInfo = {0};
- #else
- VkComputePipelineCreateInfo pipelineInfo = {0};
- #endif
-+ VkPipelineLayoutCreateInfo pipelineLayoutInfo = {0};
-+ VkShaderModuleCreateInfo shaderInfo = {0};
-+ VkPushConstantRange pushConstants;
-+ VkShaderModule shaderModule = 0;
-+ VkResult res;
-+
-+ pipeline->push_size = push_size;
-+
-+ pushConstants.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
-+ pushConstants.offset = 0;
-+ pushConstants.size = push_size;
-+
-+ pipelineLayoutInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
-+ pipelineLayoutInfo.setLayoutCount = 1;
-+ pipelineLayoutInfo.pSetLayouts = &swapchain->descriptor_set_layout;
-+ pipelineLayoutInfo.pushConstantRangeCount = 1;
-+ pipelineLayoutInfo.pPushConstantRanges = &pushConstants;
-+
-+ res = device->funcs.p_vkCreatePipelineLayout(device->device, &pipelineLayoutInfo, NULL, &pipeline->pipeline_layout);
-+ if(res != VK_SUCCESS)
-+ {
-+ ERR("vkCreatePipelineLayout: %d\n", res);
-+ goto fail;
-+ }
-+
-+ shaderInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
-+ shaderInfo.codeSize = code_size;
-+ shaderInfo.pCode = code;
-+
-+ res = device->funcs.p_vkCreateShaderModule(device->device, &shaderInfo, NULL, &shaderModule);
-+ if(res != VK_SUCCESS)
-+ {
-+ ERR("vkCreateShaderModule: %d\n", res);
-+ goto fail;
-+ }
-
- pipelineInfo.sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO;
- pipelineInfo.stage.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
- pipelineInfo.stage.stage = VK_SHADER_STAGE_COMPUTE_BIT;
- pipelineInfo.stage.module = shaderModule;
- pipelineInfo.stage.pName = "main";
-- pipelineInfo.layout = swapchain->pipeline_layout;
-+ pipelineInfo.layout = pipeline->pipeline_layout;
- pipelineInfo.basePipelineHandle = VK_NULL_HANDLE;
- pipelineInfo.basePipelineIndex = -1;
-
-- res = device->funcs.p_vkCreateComputePipelines(device->device, VK_NULL_HANDLE, 1, &pipelineInfo, NULL, &swapchain->pipeline);
-- if(res != VK_SUCCESS){
-- ERR("vkCreateComputePipelines: %d\n", res);
-- return res;
-- }
-+ res = device->funcs.p_vkCreateComputePipelines(device->device, VK_NULL_HANDLE, 1, &pipelineInfo, NULL, &pipeline->pipeline);
-+ if(res == VK_SUCCESS)
-+ goto out;
-
-- return VK_SUCCESS;
-+ ERR("vkCreateComputePipelines: %d\n", res);
-+
-+fail:
-+ destroy_pipeline(device, pipeline);
-+
-+out:
-+ device->funcs.p_vkDestroyShaderModule(device->device, shaderModule, NULL);
-+
-+ return res;
- }
-
- static VkResult create_descriptor_set(VkDevice device, struct VkSwapchainKHR_T *swapchain, struct fs_hack_image *hack)
-@@ -2118,7 +2905,8 @@ static VkResult create_descriptor_set(VkDevice device, struct VkSwapchainKHR_T *
- descriptorAllocInfo.pSetLayouts = &swapchain->descriptor_set_layout;
-
- res = device->funcs.p_vkAllocateDescriptorSets(device->device, &descriptorAllocInfo, &hack->descriptor_set);
-- if(res != VK_SUCCESS){
-+ if (res != VK_SUCCESS)
-+ {
- ERR("vkAllocateDescriptorSets: %d\n", res);
- return res;
- }
-@@ -2128,7 +2916,7 @@ static VkResult create_descriptor_set(VkDevice device, struct VkSwapchainKHR_T *
- userDescriptorImageInfo.sampler = swapchain->sampler;
-
- realDescriptorImageInfo.imageLayout = VK_IMAGE_LAYOUT_GENERAL;
-- realDescriptorImageInfo.imageView = hack->blit_view;
-+ realDescriptorImageInfo.imageView = swapchain->fsr ? hack->fsr_view : hack->swapchain_view;
-
- descriptorWrites[0].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
- descriptorWrites[0].dstSet = hack->descriptor_set;
-@@ -2148,10 +2936,29 @@ static VkResult create_descriptor_set(VkDevice device, struct VkSwapchainKHR_T *
-
- device->funcs.p_vkUpdateDescriptorSets(device->device, 2, descriptorWrites, 0, NULL);
-
-+ if (swapchain->fsr)
-+ {
-+ res = device->funcs.p_vkAllocateDescriptorSets(device->device, &descriptorAllocInfo, &hack->fsr_set);
-+ if (res != VK_SUCCESS)
-+ {
-+ ERR("vkAllocateDescriptorSets: %d\n", res);
-+ return res;
-+ }
-+
-+ userDescriptorImageInfo.imageView = hack->fsr_view;
-+
-+ realDescriptorImageInfo.imageView = hack->swapchain_view;
-+
-+ descriptorWrites[0].dstSet = hack->fsr_set;
-+ descriptorWrites[1].dstSet = hack->fsr_set;
-+
-+ device->funcs.p_vkUpdateDescriptorSets(device->device, 2, descriptorWrites, 0, NULL);
-+ }
-+
- return VK_SUCCESS;
- }
-
--static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapchain)
-+static VkResult init_compute_state(VkDevice device, struct VkSwapchainKHR_T *swapchain)
- {
- VkResult res;
- VkSamplerCreateInfo samplerInfo = {0};
-@@ -2159,31 +2966,27 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc
- VkDescriptorPoolCreateInfo poolInfo = {0};
- VkDescriptorSetLayoutBinding layoutBindings[2] = {{0}, {0}};
- VkDescriptorSetLayoutCreateInfo descriptorLayoutInfo = {0};
-- VkPipelineLayoutCreateInfo pipelineLayoutInfo = {0};
-- VkPushConstantRange pushConstants;
-- VkShaderModuleCreateInfo shaderInfo = {0};
-- VkShaderModule shaderModule = 0;
-- VkDeviceSize blitMemTotal = 0, offs;
-+ VkDeviceSize fsrMemTotal = 0, offs;
- VkImageCreateInfo imageInfo = {0};
- #if defined(USE_STRUCT_CONVERSION)
-- VkMemoryRequirements_host blitMemReq;
-+ VkMemoryRequirements_host fsrMemReq;
- VkMemoryAllocateInfo_host allocInfo = {0};
- VkPhysicalDeviceMemoryProperties_host memProperties;
- VkImageViewCreateInfo_host viewInfo = {0};
- #else
-- VkMemoryRequirements blitMemReq;
-+ VkMemoryRequirements fsrMemReq;
- VkMemoryAllocateInfo allocInfo = {0};
- VkPhysicalDeviceMemoryProperties memProperties;
- VkImageViewCreateInfo viewInfo = {0};
- #endif
-- uint32_t blit_memory_type = -1, i;
-+ uint32_t fsr_memory_type = -1, i;
-
- samplerInfo.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
- samplerInfo.magFilter = swapchain->fs_hack_filter;
- samplerInfo.minFilter = swapchain->fs_hack_filter;
-- samplerInfo.addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER;
-- samplerInfo.addressModeV = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER;
-- samplerInfo.addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER;
-+ samplerInfo.addressModeU = swapchain->fsr ? VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE : VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER;
-+ samplerInfo.addressModeV = swapchain->fsr ? VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE : VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER;
-+ samplerInfo.addressModeW = swapchain->fsr ? VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE : VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER;
- samplerInfo.anisotropyEnable = VK_FALSE;
- samplerInfo.maxAnisotropy = 1;
- samplerInfo.borderColor = VK_BORDER_COLOR_INT_OPAQUE_BLACK;
-@@ -2196,7 +2999,7 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc
- samplerInfo.maxLod = 0.0f;
-
- res = device->funcs.p_vkCreateSampler(device->device, &samplerInfo, NULL, &swapchain->sampler);
-- if(res != VK_SUCCESS)
-+ if (res != VK_SUCCESS)
- {
- WARN("vkCreateSampler failed, res=%d\n", res);
- return res;
-@@ -2212,8 +3015,16 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc
- poolInfo.pPoolSizes = poolSizes;
- poolInfo.maxSets = swapchain->n_images;
-
-+ if (swapchain->fsr)
-+ {
-+ poolSizes[0].descriptorCount *= 2;
-+ poolSizes[1].descriptorCount *= 2;
-+ poolInfo.maxSets *= 2;
-+ }
-+
- res = device->funcs.p_vkCreateDescriptorPool(device->device, &poolInfo, NULL, &swapchain->descriptor_pool);
-- if(res != VK_SUCCESS){
-+ if (res != VK_SUCCESS)
-+ {
- ERR("vkCreateDescriptorPool: %d\n", res);
- goto fail;
- }
-@@ -2235,142 +3046,154 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc
- descriptorLayoutInfo.pBindings = layoutBindings;
-
- res = device->funcs.p_vkCreateDescriptorSetLayout(device->device, &descriptorLayoutInfo, NULL, &swapchain->descriptor_set_layout);
-- if(res != VK_SUCCESS){
-+ if (res != VK_SUCCESS)
-+ {
- ERR("vkCreateDescriptorSetLayout: %d\n", res);
- goto fail;
- }
-
-- pushConstants.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
-- pushConstants.offset = 0;
-- pushConstants.size = 4 * sizeof(float); /* 2 * vec2 */
--
-- pipelineLayoutInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
-- pipelineLayoutInfo.setLayoutCount = 1;
-- pipelineLayoutInfo.pSetLayouts = &swapchain->descriptor_set_layout;
-- pipelineLayoutInfo.pushConstantRangeCount = 1;
-- pipelineLayoutInfo.pPushConstantRanges = &pushConstants;
--
-- res = device->funcs.p_vkCreatePipelineLayout(device->device, &pipelineLayoutInfo, NULL, &swapchain->pipeline_layout);
-- if(res != VK_SUCCESS){
-- ERR("vkCreatePipelineLayout: %d\n", res);
-- goto fail;
-- }
--
-- shaderInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
-- shaderInfo.codeSize = sizeof(blit_comp_spv);
-- shaderInfo.pCode = blit_comp_spv;
--
-- res = device->funcs.p_vkCreateShaderModule(device->device, &shaderInfo, NULL, &shaderModule);
-- if(res != VK_SUCCESS){
-- ERR("vkCreateShaderModule: %d\n", res);
-- goto fail;
-- }
--
-- res = create_pipeline(device, swapchain, shaderModule);
-+ res = create_pipeline(device, swapchain, blit_comp_spv, sizeof(blit_comp_spv), 4 * sizeof(float) /* 2 * vec2 */, &swapchain->blit_pipeline);
- if(res != VK_SUCCESS)
- goto fail;
-
-- device->funcs.p_vkDestroyShaderModule(device->device, shaderModule, NULL);
-+ if (swapchain->fsr)
-+ {
-+ res = create_pipeline(device, swapchain, fsr_easu_comp_spv, sizeof(fsr_easu_comp_spv), 16 * sizeof(uint32_t) /* 4 * uvec4 */, &swapchain->fsr_easu_pipeline);
-+ if (res != VK_SUCCESS)
-+ goto fail;
-+ res = create_pipeline(device, swapchain, fsr_rcas_comp_spv, sizeof(fsr_rcas_comp_spv), 8 * sizeof(uint32_t) /* uvec4 + ivec4 */, &swapchain->fsr_rcas_pipeline);
-+ if (res != VK_SUCCESS)
-+ goto fail;
-
-- if(!(swapchain->surface_usage & VK_IMAGE_USAGE_STORAGE_BIT)){
-- TRACE("using intermediate blit images\n");
-- /* create intermediate blit images */
-- for(i = 0; i < swapchain->n_images; ++i){
-+ /* create intermediate fsr images */
-+ for (i = 0; i < swapchain->n_images; ++i)
-+ {
- struct fs_hack_image *hack = &swapchain->fs_hack_images[i];
-
- imageInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
- imageInfo.imageType = VK_IMAGE_TYPE_2D;
-- imageInfo.extent.width = swapchain->real_extent.width;
-- imageInfo.extent.height = swapchain->real_extent.height;
-+ imageInfo.extent.width = swapchain->blit_dst.extent.width;
-+ imageInfo.extent.height = swapchain->blit_dst.extent.height;
- imageInfo.extent.depth = 1;
- imageInfo.mipLevels = 1;
- imageInfo.arrayLayers = 1;
- imageInfo.format = VK_FORMAT_R8G8B8A8_UNORM;
- imageInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
- imageInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
-- imageInfo.usage = VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT;
-+ imageInfo.usage = VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_SAMPLED_BIT;
- imageInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
- imageInfo.samples = VK_SAMPLE_COUNT_1_BIT;
-- res = device->funcs.p_vkCreateImage(device->device, &imageInfo, NULL, &hack->blit_image);
-- if(res != VK_SUCCESS){
-+ res = device->funcs.p_vkCreateImage(device->device, &imageInfo, NULL, &hack->fsr_image);
-+ if (res != VK_SUCCESS)
-+ {
- ERR("vkCreateImage failed: %d\n", res);
- goto fail;
- }
-
-- device->funcs.p_vkGetImageMemoryRequirements(device->device, hack->blit_image, &blitMemReq);
-+ device->funcs.p_vkGetImageMemoryRequirements(device->device, hack->fsr_image, &fsrMemReq);
-
-- offs = blitMemTotal % blitMemReq.alignment;
-+ offs = fsrMemTotal % fsrMemReq.alignment;
- if(offs)
-- blitMemTotal += blitMemReq.alignment - offs;
-+ fsrMemTotal += fsrMemReq.alignment - offs;
-
-- blitMemTotal += blitMemReq.size;
-+ fsrMemTotal += fsrMemReq.size;
- }
-
- /* allocate backing memory */
- device->phys_dev->instance->funcs.p_vkGetPhysicalDeviceMemoryProperties(device->phys_dev->phys_dev, &memProperties);
-
-- for(i = 0; i < memProperties.memoryTypeCount; i++){
-- if((memProperties.memoryTypes[i].propertyFlags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) == VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT){
-- if(blitMemReq.memoryTypeBits & (1 << i)){
-- blit_memory_type = i;
-+ for (i = 0; i < memProperties.memoryTypeCount; i++)
-+ {
-+ if ((memProperties.memoryTypes[i].propertyFlags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) == VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
-+ {
-+ if (fsrMemReq.memoryTypeBits & (1 << i))
-+ {
-+ fsr_memory_type = i;
- break;
- }
- }
- }
-
-- if(blit_memory_type == -1){
-+ if (fsr_memory_type == -1)
-+ {
- ERR("unable to find suitable memory type\n");
- res = VK_ERROR_OUT_OF_HOST_MEMORY;
- goto fail;
- }
-
- allocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
-- allocInfo.allocationSize = blitMemTotal;
-- allocInfo.memoryTypeIndex = blit_memory_type;
-+ allocInfo.allocationSize = fsrMemTotal;
-+ allocInfo.memoryTypeIndex = fsr_memory_type;
-
-- res = device->funcs.p_vkAllocateMemory(device->device, &allocInfo, NULL, &swapchain->blit_image_memory);
-- if(res != VK_SUCCESS){
-+ res = device->funcs.p_vkAllocateMemory(device->device, &allocInfo, NULL, &swapchain->fsr_image_memory);
-+ if (res != VK_SUCCESS)
-+ {
- ERR("vkAllocateMemory: %d\n", res);
- goto fail;
- }
-
- /* bind backing memory and create imageviews */
-- blitMemTotal = 0;
-- for(i = 0; i < swapchain->n_images; ++i){
-+ fsrMemTotal = 0;
-+ for (i = 0; i < swapchain->n_images; ++i)
-+ {
- struct fs_hack_image *hack = &swapchain->fs_hack_images[i];
-
-- device->funcs.p_vkGetImageMemoryRequirements(device->device, hack->blit_image, &blitMemReq);
-+ device->funcs.p_vkGetImageMemoryRequirements(device->device, hack->fsr_image, &fsrMemReq);
-
-- offs = blitMemTotal % blitMemReq.alignment;
-+ offs = fsrMemTotal % fsrMemReq.alignment;
- if(offs)
-- blitMemTotal += blitMemReq.alignment - offs;
-+ fsrMemTotal += fsrMemReq.alignment - offs;
-
-- res = device->funcs.p_vkBindImageMemory(device->device, hack->blit_image, swapchain->blit_image_memory, blitMemTotal);
-- if(res != VK_SUCCESS){
-+ res = device->funcs.p_vkBindImageMemory(device->device, hack->fsr_image, swapchain->fsr_image_memory, fsrMemTotal);
-+ if(res != VK_SUCCESS)
-+ {
- ERR("vkBindImageMemory: %d\n", res);
- goto fail;
- }
-
-- blitMemTotal += blitMemReq.size;
-+ fsrMemTotal += fsrMemReq.size;
- }
-- }else
-- TRACE("blitting directly to swapchain images\n");
-+
-+ /* create imageviews */
-+ for (i = 0; i < swapchain->n_images; ++i)
-+ {
-+ struct fs_hack_image *hack = &swapchain->fs_hack_images[i];
-+
-+ viewInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
-+ viewInfo.image = hack->fsr_image;
-+ viewInfo.viewType = VK_IMAGE_VIEW_TYPE_2D;
-+ viewInfo.format = VK_FORMAT_R8G8B8A8_UNORM;
-+ viewInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
-+ viewInfo.subresourceRange.baseMipLevel = 0;
-+ viewInfo.subresourceRange.levelCount = 1;
-+ viewInfo.subresourceRange.baseArrayLayer = 0;
-+ viewInfo.subresourceRange.layerCount = 1;
-+
-+ res = device->funcs.p_vkCreateImageView(device->device, &viewInfo, NULL, &hack->fsr_view);
-+ if(res != VK_SUCCESS)
-+ {
-+ ERR("vkCreateImageView(blit): %d\n", res);
-+ goto fail;
-+ }
-+ }
-+ }
-+
-
- /* create imageviews */
- for(i = 0; i < swapchain->n_images; ++i){
- struct fs_hack_image *hack = &swapchain->fs_hack_images[i];
-
- viewInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
-- viewInfo.image = hack->blit_image ? hack->blit_image : hack->swapchain_image;
-+ viewInfo.image = hack->swapchain_image;
- viewInfo.viewType = VK_IMAGE_VIEW_TYPE_2D;
-- viewInfo.format = VK_FORMAT_R8G8B8A8_UNORM;
-+ viewInfo.format = swapchain->format;
- viewInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
- viewInfo.subresourceRange.baseMipLevel = 0;
- viewInfo.subresourceRange.levelCount = 1;
- viewInfo.subresourceRange.baseArrayLayer = 0;
- viewInfo.subresourceRange.layerCount = 1;
-
-- res = device->funcs.p_vkCreateImageView(device->device, &viewInfo, NULL, &hack->blit_view);
-+ res = device->funcs.p_vkCreateImageView(device->device, &viewInfo, NULL, &hack->swapchain_view);
- if(res != VK_SUCCESS){
- ERR("vkCreateImageView(blit): %d\n", res);
- goto fail;
-@@ -2387,20 +3210,19 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc
- for(i = 0; i < swapchain->n_images; ++i){
- struct fs_hack_image *hack = &swapchain->fs_hack_images[i];
-
-- device->funcs.p_vkDestroyImageView(device->device, hack->blit_view, NULL);
-- hack->blit_view = VK_NULL_HANDLE;
-+ device->funcs.p_vkDestroyImageView(device->device, hack->fsr_view, NULL);
-+ hack->fsr_view = VK_NULL_HANDLE;
-
-- device->funcs.p_vkDestroyImage(device->device, hack->blit_image, NULL);
-- hack->blit_image = VK_NULL_HANDLE;
-- }
-+ device->funcs.p_vkDestroyImageView(device->device, hack->swapchain_view, NULL);
-+ hack->swapchain_view = VK_NULL_HANDLE;
-
-- device->funcs.p_vkDestroyShaderModule(device->device, shaderModule, NULL);
--
-- device->funcs.p_vkDestroyPipeline(device->device, swapchain->pipeline, NULL);
-- swapchain->pipeline = VK_NULL_HANDLE;
-+ device->funcs.p_vkDestroyImage(device->device, hack->fsr_image, NULL);
-+ hack->fsr_image = VK_NULL_HANDLE;
-+ }
-
-- device->funcs.p_vkDestroyPipelineLayout(device->device, swapchain->pipeline_layout, NULL);
-- swapchain->pipeline_layout = VK_NULL_HANDLE;
-+ destroy_pipeline(device, &swapchain->blit_pipeline);
-+ destroy_pipeline(device, &swapchain->fsr_easu_pipeline);
-+ destroy_pipeline(device, &swapchain->fsr_rcas_pipeline);
-
- device->funcs.p_vkDestroyDescriptorSetLayout(device->device, swapchain->descriptor_set_layout, NULL);
- swapchain->descriptor_set_layout = VK_NULL_HANDLE;
-@@ -2408,8 +3230,8 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc
- device->funcs.p_vkDestroyDescriptorPool(device->device, swapchain->descriptor_pool, NULL);
- swapchain->descriptor_pool = VK_NULL_HANDLE;
-
-- device->funcs.p_vkFreeMemory(device->device, swapchain->blit_image_memory, NULL);
-- swapchain->blit_image_memory = VK_NULL_HANDLE;
-+ device->funcs.p_vkFreeMemory(device->device, swapchain->fsr_image_memory, NULL);
-+ swapchain->fsr_image_memory = VK_NULL_HANDLE;
-
- device->funcs.p_vkDestroySampler(device->device, swapchain->sampler, NULL);
- swapchain->sampler = VK_NULL_HANDLE;
-@@ -2420,9 +3242,10 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc
- static void destroy_fs_hack_image(VkDevice device, struct VkSwapchainKHR_T *swapchain, struct fs_hack_image *hack)
- {
- device->funcs.p_vkDestroyImageView(device->device, hack->user_view, NULL);
-- device->funcs.p_vkDestroyImageView(device->device, hack->blit_view, NULL);
-+ device->funcs.p_vkDestroyImageView(device->device, hack->swapchain_view, NULL);
-+ device->funcs.p_vkDestroyImageView(device->device, hack->fsr_view, NULL);
- device->funcs.p_vkDestroyImage(device->device, hack->user_image, NULL);
-- device->funcs.p_vkDestroyImage(device->device, hack->blit_image, NULL);
-+ device->funcs.p_vkDestroyImage(device->device, hack->fsr_image, NULL);
- if(hack->cmd)
- device->funcs.p_vkFreeCommandBuffers(device->device,
- swapchain->cmd_pools[hack->cmd_queue_idx],
-@@ -2649,7 +3472,7 @@ VkResult WINAPI wine_vkCreateSwapchainKHR(VkDevice device, const VkSwapchainCrea
- native_info.oldSwapchain = ((struct VkSwapchainKHR_T *)(UINT_PTR)native_info.oldSwapchain)->swapchain;
-
- if(vk_funcs->query_fs_hack &&
-- vk_funcs->query_fs_hack(native_info.surface, &object->real_extent, &user_sz, &object->blit_dst, &object->fs_hack_filter) &&
-+ vk_funcs->query_fs_hack(native_info.surface, &object->real_extent, &user_sz, &object->blit_dst, &object->fs_hack_filter, &object->fsr, &object->sharpness) &&
- native_info.imageExtent.width == user_sz.width &&
- native_info.imageExtent.height == user_sz.height)
- {
-@@ -2674,7 +3497,9 @@ VkResult WINAPI wine_vkCreateSwapchainKHR(VkDevice device, const VkSwapchainCrea
- TRACE("surface usage flags: 0x%x\n", object->surface_usage);
-
- native_info.imageExtent = object->real_extent;
-- native_info.imageUsage |= VK_IMAGE_USAGE_TRANSFER_DST_BIT; /* XXX: check if supported by surface */
-+ native_info.imageUsage = VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT; /* XXX: check if supported by surface */
-+
-+ object->format = native_info.imageFormat;
-
- if(native_info.imageFormat != VK_FORMAT_B8G8R8A8_UNORM &&
- native_info.imageFormat != VK_FORMAT_B8G8R8A8_SRGB){
-@@ -2811,7 +3636,7 @@ VkResult WINAPI wine_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice
- adjust_max_image_count(phys_dev, capabilities);
-
- if (res == VK_SUCCESS && vk_funcs->query_fs_hack &&
-- vk_funcs->query_fs_hack(wine_surface_from_handle(surface)->driver_surface, NULL, &user_res, NULL, NULL)){
-+ vk_funcs->query_fs_hack(wine_surface_from_handle(surface)->driver_surface, NULL, &user_res, NULL, NULL, NULL, NULL)){
- capabilities->currentExtent = user_res;
- capabilities->minImageExtent = user_res;
- capabilities->maxImageExtent = user_res;
-@@ -2838,7 +3663,7 @@ VkResult WINAPI wine_vkGetPhysicalDeviceSurfaceCapabilities2KHR(VkPhysicalDevice
- adjust_max_image_count(phys_dev, &capabilities->surfaceCapabilities);
-
- if (res == VK_SUCCESS && vk_funcs->query_fs_hack &&
-- vk_funcs->query_fs_hack(wine_surface_from_handle(surface_info->surface)->driver_surface, NULL, &user_res, NULL, NULL)){
-+ vk_funcs->query_fs_hack(wine_surface_from_handle(surface_info->surface)->driver_surface, NULL, &user_res, NULL, NULL, NULL, NULL)){
- capabilities->surfaceCapabilities.currentExtent = user_res;
- capabilities->surfaceCapabilities.minImageExtent = user_res;
- capabilities->surfaceCapabilities.maxImageExtent = user_res;
-@@ -3197,13 +4022,14 @@ void WINAPI wine_vkDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain
- if(object->cmd_pools[i])
- device->funcs.p_vkDestroyCommandPool(device->device, object->cmd_pools[i], NULL);
-
-- device->funcs.p_vkDestroyPipeline(device->device, object->pipeline, NULL);
-- device->funcs.p_vkDestroyPipelineLayout(device->device, object->pipeline_layout, NULL);
-+ destroy_pipeline(device, &object->blit_pipeline);
-+ destroy_pipeline(device, &object->fsr_easu_pipeline);
-+ destroy_pipeline(device, &object->fsr_rcas_pipeline);
- device->funcs.p_vkDestroyDescriptorSetLayout(device->device, object->descriptor_set_layout, NULL);
- device->funcs.p_vkDestroyDescriptorPool(device->device, object->descriptor_pool, NULL);
- device->funcs.p_vkDestroySampler(device->device, object->sampler, NULL);
- device->funcs.p_vkFreeMemory(device->device, object->user_image_memory, NULL);
-- device->funcs.p_vkFreeMemory(device->device, object->blit_image_memory, NULL);
-+ device->funcs.p_vkFreeMemory(device->device, object->fsr_image_memory, NULL);
- free(object->cmd_pools);
- free(object->fs_hack_images);
- }
-@@ -3280,29 +4106,54 @@ static VkCommandBuffer create_hack_cmd(VkQueue queue, struct VkSwapchainKHR_T *s
- return cmd;
- }
-
-+static void bind_pipeline(VkDevice device, VkCommandBuffer cmd, struct fs_comp_pipeline *pipeline, VkDescriptorSet set, void *push_data)
-+{
-+ device->funcs.p_vkCmdBindPipeline(cmd,
-+ VK_PIPELINE_BIND_POINT_COMPUTE, pipeline->pipeline);
-+
-+ device->funcs.p_vkCmdBindDescriptorSets(cmd,
-+ VK_PIPELINE_BIND_POINT_COMPUTE, pipeline->pipeline_layout,
-+ 0, 1, &set, 0, NULL);
-+
-+ device->funcs.p_vkCmdPushConstants(cmd,
-+ pipeline->pipeline_layout, VK_SHADER_STAGE_COMPUTE_BIT,
-+ 0, pipeline->push_size, push_data);
-+}
-+
-+#if defined(USE_STRUCT_CONVERSION)
-+static void init_barrier(VkImageMemoryBarrier_host *barrier)
-+#else
-+static void init_barrier(VkImageMemoryBarrier *barrier)
-+#endif
-+{
-+ barrier->sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
-+ barrier->pNext = NULL;
-+ barrier->srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
-+ barrier->dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
-+ barrier->subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
-+ barrier->subresourceRange.baseMipLevel = 0;
-+ barrier->subresourceRange.levelCount = 1;
-+ barrier->subresourceRange.baseArrayLayer = 0;
-+ barrier->subresourceRange.layerCount = 1;
-+}
-+
-+
- static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swapchain, struct fs_hack_image *hack)
- {
-- VkResult result;
-- VkImageCopy region = {0};
- #if defined(USE_STRUCT_CONVERSION)
-- VkImageMemoryBarrier_host barriers[3] = {{0}};
-+ VkImageMemoryBarrier_host barriers[2] = {{0}};
- VkCommandBufferBeginInfo_host beginInfo = {0};
- #else
-- VkImageMemoryBarrier barriers[3] = {{0}};
-+ VkImageMemoryBarrier barriers[2] = {{0}};
- VkCommandBufferBeginInfo beginInfo = {0};
- #endif
- float constants[4];
-+ VkResult result;
-
- TRACE("recording compute command\n");
-
--#if 0
-- /* DOOM runs out of memory when allocating blit images after loading. */
-- if(!swapchain->blit_image_memory){
-- result = init_blit_images(device, swapchain);
-- if(result != VK_SUCCESS)
-- return result;
-- }
--#endif
-+ init_barrier(&barriers[0]);
-+ init_barrier(&barriers[1]);
-
- beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
- beginInfo.flags = VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT;
-@@ -3311,35 +4162,19 @@ static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swa
-
- /* for the cs we run... */
- /* transition user image from PRESENT_SRC to SHADER_READ */
-- barriers[0].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
- barriers[0].oldLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
- barriers[0].newLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
-- barriers[0].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
-- barriers[0].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
- barriers[0].image = hack->user_image;
-- barriers[0].subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
-- barriers[0].subresourceRange.baseMipLevel = 0;
-- barriers[0].subresourceRange.levelCount = 1;
-- barriers[0].subresourceRange.baseArrayLayer = 0;
-- barriers[0].subresourceRange.layerCount = 1;
- barriers[0].srcAccessMask = 0;
- barriers[0].dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
-
- /* storage image... */
-- /* transition blit image from whatever to GENERAL */
-- barriers[1].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
-+ /* transition swapchain image from whatever to GENERAL */
- barriers[1].oldLayout = VK_IMAGE_LAYOUT_UNDEFINED;
- barriers[1].newLayout = VK_IMAGE_LAYOUT_GENERAL;
-- barriers[1].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
-- barriers[1].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
-- barriers[1].image = hack->blit_image ? hack->blit_image : hack->swapchain_image;
-- barriers[1].subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
-- barriers[1].subresourceRange.baseMipLevel = 0;
-- barriers[1].subresourceRange.levelCount = 1;
-- barriers[1].subresourceRange.baseArrayLayer = 0;
-- barriers[1].subresourceRange.layerCount = 1;
-+ barriers[1].image = hack->swapchain_image;
- barriers[1].srcAccessMask = 0;
-- barriers[1].dstAccessMask = VK_ACCESS_SHADER_WRITE_BIT;
-+ barriers[1].dstAccessMask = 0;
-
- device->funcs.p_vkCmdPipelineBarrier(
- hack->cmd,
-@@ -3352,12 +4187,6 @@ static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swa
- );
-
- /* perform blit shader */
-- device->funcs.p_vkCmdBindPipeline(hack->cmd,
-- VK_PIPELINE_BIND_POINT_COMPUTE, swapchain->pipeline);
--
-- device->funcs.p_vkCmdBindDescriptorSets(hack->cmd,
-- VK_PIPELINE_BIND_POINT_COMPUTE, swapchain->pipeline_layout,
-- 0, 1, &hack->descriptor_set, 0, NULL);
-
- /* vec2: blit dst offset in real coords */
- constants[0] = swapchain->blit_dst.offset.x;
-@@ -3365,29 +4194,27 @@ static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swa
- /* vec2: blit dst extents in real coords */
- constants[2] = swapchain->blit_dst.extent.width;
- constants[3] = swapchain->blit_dst.extent.height;
-- device->funcs.p_vkCmdPushConstants(hack->cmd,
-- swapchain->pipeline_layout, VK_SHADER_STAGE_COMPUTE_BIT,
-- 0, sizeof(constants), constants);
-+
-+ bind_pipeline(device, hack->cmd, &swapchain->blit_pipeline, hack->descriptor_set, constants);
-
- /* local sizes in shader are 8 */
- device->funcs.p_vkCmdDispatch(hack->cmd, ceil(swapchain->real_extent.width / 8.),
- ceil(swapchain->real_extent.height / 8.), 1);
-
- /* transition user image from SHADER_READ back to PRESENT_SRC */
-- barriers[0].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
- barriers[0].oldLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
- barriers[0].newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
-- barriers[0].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
-- barriers[0].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
- barriers[0].image = hack->user_image;
-- barriers[0].subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
-- barriers[0].subresourceRange.baseMipLevel = 0;
-- barriers[0].subresourceRange.levelCount = 1;
-- barriers[0].subresourceRange.baseArrayLayer = 0;
-- barriers[0].subresourceRange.layerCount = 1;
-- barriers[0].srcAccessMask = VK_ACCESS_SHADER_READ_BIT;
-+ barriers[0].srcAccessMask = 0;
- barriers[0].dstAccessMask = 0;
-
-+ /* transition swapchain image from GENERAL to PRESENT_SRC */
-+ barriers[1].oldLayout = VK_IMAGE_LAYOUT_GENERAL;
-+ barriers[1].newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
-+ barriers[1].image = hack->swapchain_image;
-+ barriers[1].srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT;
-+ barriers[1].dstAccessMask = 0;
-+
- device->funcs.p_vkCmdPipelineBarrier(
- hack->cmd,
- VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
-@@ -3395,123 +4222,9 @@ static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swa
- 0,
- 0, NULL,
- 0, NULL,
-- 1, barriers
-+ 2, barriers
- );
-
-- if(hack->blit_image){
-- /* for the copy... */
-- /* no transition, just a barrier for our access masks (w -> r) */
-- barriers[0].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
-- barriers[0].oldLayout = VK_IMAGE_LAYOUT_GENERAL;
-- barriers[0].newLayout = VK_IMAGE_LAYOUT_GENERAL;
-- barriers[0].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
-- barriers[0].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
-- barriers[0].image = hack->blit_image;
-- barriers[0].subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
-- barriers[0].subresourceRange.baseMipLevel = 0;
-- barriers[0].subresourceRange.levelCount = 1;
-- barriers[0].subresourceRange.baseArrayLayer = 0;
-- barriers[0].subresourceRange.layerCount = 1;
-- barriers[0].srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT;
-- barriers[0].dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT;
--
-- /* for the copy... */
-- /* transition swapchain image from whatever to TRANSFER_DST
-- * we don't care about the contents... */
-- barriers[1].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
-- barriers[1].oldLayout = VK_IMAGE_LAYOUT_UNDEFINED;
-- barriers[1].newLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
-- barriers[1].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
-- barriers[1].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
-- barriers[1].image = hack->swapchain_image;
-- barriers[1].subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
-- barriers[1].subresourceRange.baseMipLevel = 0;
-- barriers[1].subresourceRange.levelCount = 1;
-- barriers[1].subresourceRange.baseArrayLayer = 0;
-- barriers[1].subresourceRange.layerCount = 1;
-- barriers[1].srcAccessMask = 0;
-- barriers[1].dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
--
-- device->funcs.p_vkCmdPipelineBarrier(
-- hack->cmd,
-- VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
-- VK_PIPELINE_STAGE_TRANSFER_BIT,
-- 0,
-- 0, NULL,
-- 0, NULL,
-- 2, barriers
-- );
--
-- /* copy from blit image to swapchain image */
-- region.srcSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
-- region.srcSubresource.layerCount = 1;
-- region.srcOffset.x = 0;
-- region.srcOffset.y = 0;
-- region.srcOffset.z = 0;
-- region.dstSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
-- region.dstSubresource.layerCount = 1;
-- region.dstOffset.x = 0;
-- region.dstOffset.y = 0;
-- region.dstOffset.z = 0;
-- region.extent.width = swapchain->real_extent.width;
-- region.extent.height = swapchain->real_extent.height;
-- region.extent.depth = 1;
--
-- device->funcs.p_vkCmdCopyImage(hack->cmd,
-- hack->blit_image, VK_IMAGE_LAYOUT_GENERAL,
-- hack->swapchain_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
-- 1, &region);
--
-- /* transition swapchain image from TRANSFER_DST_OPTIMAL to PRESENT_SRC */
-- barriers[0].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
-- barriers[0].oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
-- barriers[0].newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
-- barriers[0].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
-- barriers[0].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
-- barriers[0].image = hack->swapchain_image;
-- barriers[0].subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
-- barriers[0].subresourceRange.baseMipLevel = 0;
-- barriers[0].subresourceRange.levelCount = 1;
-- barriers[0].subresourceRange.baseArrayLayer = 0;
-- barriers[0].subresourceRange.layerCount = 1;
-- barriers[0].srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
-- barriers[0].dstAccessMask = 0;
--
-- device->funcs.p_vkCmdPipelineBarrier(
-- hack->cmd,
-- VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
-- VK_PIPELINE_STAGE_TRANSFER_BIT,
-- 0,
-- 0, NULL,
-- 0, NULL,
-- 1, barriers
-- );
-- }else{
-- /* transition swapchain image from GENERAL to PRESENT_SRC */
-- barriers[0].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
-- barriers[0].oldLayout = VK_IMAGE_LAYOUT_GENERAL;
-- barriers[0].newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
-- barriers[0].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
-- barriers[0].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
-- barriers[0].image = hack->swapchain_image;
-- barriers[0].subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
-- barriers[0].subresourceRange.baseMipLevel = 0;
-- barriers[0].subresourceRange.levelCount = 1;
-- barriers[0].subresourceRange.baseArrayLayer = 0;
-- barriers[0].subresourceRange.layerCount = 1;
-- barriers[0].srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT;
-- barriers[0].dstAccessMask = 0;
--
-- device->funcs.p_vkCmdPipelineBarrier(
-- hack->cmd,
-- VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
-- VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
-- 0,
-- 0, NULL,
-- 0, NULL,
-- 1, barriers
-- );
-- }
-
- result = device->funcs.p_vkEndCommandBuffer(hack->cmd);
- if(result != VK_SUCCESS){
-@@ -3538,38 +4251,25 @@ static VkResult record_graphics_cmd(VkDevice device, struct VkSwapchainKHR_T *sw
-
- TRACE("recording graphics command\n");
-
-+ init_barrier(&barriers[0]);
-+ init_barrier(&barriers[1]);
-+
- beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
- beginInfo.flags = VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT;
-
- device->funcs.p_vkBeginCommandBuffer(hack->cmd, &beginInfo);
-
- /* transition real image from whatever to TRANSFER_DST_OPTIMAL */
-- barriers[0].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
- barriers[0].oldLayout = VK_IMAGE_LAYOUT_UNDEFINED;
- barriers[0].newLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
-- barriers[0].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
-- barriers[0].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
- barriers[0].image = hack->swapchain_image;
-- barriers[0].subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
-- barriers[0].subresourceRange.baseMipLevel = 0;
-- barriers[0].subresourceRange.levelCount = 1;
-- barriers[0].subresourceRange.baseArrayLayer = 0;
-- barriers[0].subresourceRange.layerCount = 1;
- barriers[0].srcAccessMask = 0;
-- barriers[0].dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
-+ barriers[0].dstAccessMask = 0;
-
- /* transition user image from PRESENT_SRC to TRANSFER_SRC_OPTIMAL */
-- barriers[1].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
- barriers[1].oldLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
- barriers[1].newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL;
-- barriers[1].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
-- barriers[1].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
- barriers[1].image = hack->user_image;
-- barriers[1].subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
-- barriers[1].subresourceRange.baseMipLevel = 0;
-- barriers[1].subresourceRange.levelCount = 1;
-- barriers[1].subresourceRange.baseArrayLayer = 0;
-- barriers[1].subresourceRange.layerCount = 1;
- barriers[1].srcAccessMask = 0;
- barriers[1].dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT;
-
-@@ -3619,33 +4319,17 @@ static VkResult record_graphics_cmd(VkDevice device, struct VkSwapchainKHR_T *sw
- 1, &blitregion, swapchain->fs_hack_filter);
-
- /* transition real image from TRANSFER_DST to PRESENT_SRC */
-- barriers[0].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
- barriers[0].oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
- barriers[0].newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
-- barriers[0].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
-- barriers[0].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
- barriers[0].image = hack->swapchain_image;
-- barriers[0].subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
-- barriers[0].subresourceRange.baseMipLevel = 0;
-- barriers[0].subresourceRange.levelCount = 1;
-- barriers[0].subresourceRange.baseArrayLayer = 0;
-- barriers[0].subresourceRange.layerCount = 1;
- barriers[0].srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
- barriers[0].dstAccessMask = 0;
-
- /* transition user image from TRANSFER_SRC_OPTIMAL to back to PRESENT_SRC */
-- barriers[1].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
- barriers[1].oldLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL;
- barriers[1].newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
-- barriers[1].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
-- barriers[1].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
- barriers[1].image = hack->user_image;
-- barriers[1].subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
-- barriers[1].subresourceRange.baseMipLevel = 0;
-- barriers[1].subresourceRange.levelCount = 1;
-- barriers[1].subresourceRange.baseArrayLayer = 0;
-- barriers[1].subresourceRange.layerCount = 1;
-- barriers[1].srcAccessMask = VK_ACCESS_TRANSFER_READ_BIT;
-+ barriers[1].srcAccessMask = 0;
- barriers[1].dstAccessMask = 0;
-
- device->funcs.p_vkCmdPipelineBarrier(
-@@ -3667,6 +4351,175 @@ static VkResult record_graphics_cmd(VkDevice device, struct VkSwapchainKHR_T *sw
- return VK_SUCCESS;
- }
-
-+static VkResult record_fsr_cmd(VkDevice device, struct VkSwapchainKHR_T *swapchain, struct fs_hack_image *hack)
-+{
-+#if defined(USE_STRUCT_CONVERSION)
-+ VkImageMemoryBarrier_host barriers[3] = {{0}};
-+ VkCommandBufferBeginInfo_host beginInfo = {0};
-+#else
-+ VkImageMemoryBarrier barriers[3] = {{0}};
-+ VkCommandBufferBeginInfo beginInfo = {0};
-+#endif
-+ union
-+ {
-+ uint32_t uint[16];
-+ float fp[16];
-+ } c;
-+ VkResult result;
-+
-+ TRACE("recording compute command\n");
-+
-+ init_barrier(&barriers[0]);
-+ init_barrier(&barriers[1]);
-+ init_barrier(&barriers[2]);
-+
-+ beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
-+ beginInfo.flags = VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT;
-+
-+ device->funcs.p_vkBeginCommandBuffer(hack->cmd, &beginInfo);
-+
-+ /* 1st pass (easu) */
-+ /* transition user image from PRESENT_SRC to SHADER_READ */
-+ barriers[0].oldLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
-+ barriers[0].newLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
-+ barriers[0].image = hack->user_image;
-+ barriers[0].srcAccessMask = 0;
-+ barriers[0].dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
-+
-+ /* storage image... */
-+ /* transition fsr image from whatever to GENERAL */
-+ barriers[1].oldLayout = VK_IMAGE_LAYOUT_UNDEFINED;
-+ barriers[1].newLayout = VK_IMAGE_LAYOUT_GENERAL;
-+ barriers[1].image = hack->swapchain_image;
-+ barriers[1].srcAccessMask = 0;
-+ barriers[1].dstAccessMask = 0;
-+
-+ device->funcs.p_vkCmdPipelineBarrier(
-+ hack->cmd,
-+ VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
-+ VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
-+ 0,
-+ 0, NULL,
-+ 0, NULL,
-+ 2, barriers
-+ );
-+
-+ /* perform easu shader */
-+
-+ c.fp[0] = swapchain->user_extent.width * (1.0f / swapchain->blit_dst.extent.width);
-+ c.fp[1] = swapchain->user_extent.height * (1.0f / swapchain->blit_dst.extent.height);
-+ c.fp[2] = 0.5f * c.fp[0] - 0.5f;
-+ c.fp[3] = 0.5f * c.fp[1] - 0.5f;
-+ // Viewport pixel position to normalized image space.
-+ // This is used to get upper-left of 'F' tap.
-+ c.fp[4] = 1.0f / swapchain->user_extent.width;
-+ c.fp[5] = 1.0f / swapchain->user_extent.height;
-+ // Centers of gather4, first offset from upper-left of 'F'.
-+ // +---+---+
-+ // | | |
-+ // +--(0)--+
-+ // | b | c |
-+ // +---F---+---+---+
-+ // | e | f | g | h |
-+ // +--(1)--+--(2)--+
-+ // | i | j | k | l |
-+ // +---+---+---+---+
-+ // | n | o |
-+ // +--(3)--+
-+ // | | |
-+ // +---+---+
-+ c.fp[6] = 1.0f * c.fp[4];
-+ c.fp[7] = -1.0f * c.fp[5];
-+ // These are from (0) instead of 'F'.
-+ c.fp[8] = -1.0f * c.fp[4];
-+ c.fp[9] = 2.0f * c.fp[5];
-+ c.fp[10] = 1.0f * c.fp[4];
-+ c.fp[11] = 2.0f * c.fp[5];
-+ c.fp[12] = 0.0f * c.fp[4];
-+ c.fp[13] = 4.0f * c.fp[5];
-+ c.uint[14] = swapchain->blit_dst.extent.width;
-+ c.uint[15] = swapchain->blit_dst.extent.height;
-+
-+ bind_pipeline(device, hack->cmd, &swapchain->fsr_easu_pipeline, hack->descriptor_set, c.uint);
-+
-+ /* local sizes in shader are 8 */
-+ device->funcs.p_vkCmdDispatch(hack->cmd, ceil(swapchain->blit_dst.extent.width / 8.),
-+ ceil(swapchain->blit_dst.extent.height / 8.), 1);
-+
-+ /* transition user image from SHADER_READ back to PRESENT_SRC */
-+ barriers[0].oldLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
-+ barriers[0].newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
-+ barriers[0].image = hack->user_image;
-+ barriers[0].srcAccessMask = 0;
-+ barriers[0].dstAccessMask = 0;
-+
-+ /* transition fsr image from GENERAL to SHADER_READ */
-+ barriers[1].oldLayout = VK_IMAGE_LAYOUT_GENERAL;
-+ barriers[1].newLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
-+ barriers[1].image = hack->swapchain_image;
-+ barriers[1].srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT;
-+ barriers[1].dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
-+
-+ /* transition swapchain image from whatever to GENERAL */
-+ barriers[2].oldLayout = VK_IMAGE_LAYOUT_UNDEFINED;
-+ barriers[2].newLayout = VK_IMAGE_LAYOUT_GENERAL;
-+ barriers[2].image = hack->swapchain_image;
-+ barriers[2].srcAccessMask = 0;
-+ barriers[2].dstAccessMask = 0;
-+
-+ device->funcs.p_vkCmdPipelineBarrier(
-+ hack->cmd,
-+ VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
-+ VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
-+ 0,
-+ 0, NULL,
-+ 0, NULL,
-+ 3, barriers
-+ );
-+
-+ /* 2nd pass (rcas) */
-+
-+ c.fp[0] = exp2f(-swapchain->sharpness);
-+ c.uint[2] = swapchain->blit_dst.extent.width;
-+ c.uint[3] = swapchain->blit_dst.extent.height;
-+ c.uint[4] = swapchain->blit_dst.offset.x;
-+ c.uint[5] = swapchain->blit_dst.offset.y;
-+ c.uint[6] = swapchain->blit_dst.offset.x + swapchain->blit_dst.extent.width;
-+ c.uint[7] = swapchain->blit_dst.offset.y + swapchain->blit_dst.extent.height;
-+
-+ bind_pipeline(device, hack->cmd, &swapchain->fsr_rcas_pipeline, hack->fsr_set, c.uint);
-+
-+ /* local sizes in shader are 8 */
-+ device->funcs.p_vkCmdDispatch(hack->cmd, ceil(swapchain->real_extent.width / 8.),
-+ ceil(swapchain->real_extent.height / 8.), 1);
-+
-+ /* transition swapchain image from GENERAL to PRESENT_SRC */
-+ barriers[0].oldLayout = VK_IMAGE_LAYOUT_GENERAL;
-+ barriers[0].newLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
-+ barriers[0].image = hack->swapchain_image;
-+ barriers[0].srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT;
-+ barriers[0].dstAccessMask = 0;
-+
-+ device->funcs.p_vkCmdPipelineBarrier(
-+ hack->cmd,
-+ VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
-+ VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
-+ 0,
-+ 0, NULL,
-+ 0, NULL,
-+ 1, barriers
-+ );
-+
-+ result = device->funcs.p_vkEndCommandBuffer(hack->cmd);
-+ if (result != VK_SUCCESS)
-+ {
-+ ERR("vkEndCommandBuffer: %d\n", result);
-+ return result;
-+ }
-+
-+ return VK_SUCCESS;
-+}
-+
- NTSTATUS wine_vkQueuePresentKHR(void *args)
- {
- struct vkQueuePresentKHR_params *params = args;
-@@ -3709,13 +4562,22 @@ VkResult WINAPI wine_vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *pP
- return VK_ERROR_DEVICE_LOST;
- }
-
-- if(queue->device->queue_props[queue_idx].queueFlags & VK_QUEUE_GRAPHICS_BIT)
-- res = record_graphics_cmd(queue->device, swapchain, hack);
-- else if(queue->device->queue_props[queue_idx].queueFlags & VK_QUEUE_COMPUTE_BIT)
-- res = record_compute_cmd(queue->device, swapchain, hack);
-- else{
-- ERR("Present queue is neither graphics nor compute queue!\n");
-- res = VK_ERROR_DEVICE_LOST;
-+ if (swapchain->fsr)
-+ {
-+ if(queue->device->queue_props[queue_idx].queueFlags & VK_QUEUE_COMPUTE_BIT)
-+ res = record_fsr_cmd(queue->device, swapchain, hack);
-+ }
-+ else
-+ {
-+ if(queue->device->queue_props[queue_idx].queueFlags & VK_QUEUE_GRAPHICS_BIT)
-+ res = record_graphics_cmd(queue->device, swapchain, hack);
-+ if(queue->device->queue_props[queue_idx].queueFlags & VK_QUEUE_COMPUTE_BIT)
-+ res = record_compute_cmd(queue->device, swapchain, hack);
-+ else
-+ {
-+ ERR("Present queue is neither graphics nor compute queue!\n");
-+ res = VK_ERROR_DEVICE_LOST;
-+ }
- }
-
- if(res != VK_SUCCESS){
-diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c
-index 9a03c5f6046..e4365466ff4 100644
---- a/dlls/winevulkan/vulkan.c
-+++ b/dlls/winevulkan/vulkan.c
-@@ -3266,9 +3266,7 @@ NTSTATUS wine_vkCreateSwapchainKHR(void *args)
- return result;
- }
-
-- /* FIXME: would be nice to do this on-demand, but games can use up all
-- * memory so we fail to allocate later */
-- result = init_blit_images(device, object);
-+ result = init_compute_state(device, object);
- if(result != VK_SUCCESS){
- ERR("creating blit images failed: %d\n", result);
- device->funcs.p_vkDestroySwapchainKHR(device->device, object->swapchain, NULL);
-diff --git a/dlls/winevulkan/vulkan_private.h b/dlls/winevulkan/vulkan_private.h
-index 39c74ccbcd6..dcbdc83da80 100644
---- a/dlls/winevulkan/vulkan_private.h
-+++ b/dlls/winevulkan/vulkan_private.h
-@@ -102,11 +102,18 @@ struct fs_hack_image
- uint32_t cmd_queue_idx;
- VkCommandBuffer cmd;
- VkImage swapchain_image;
-- VkImage blit_image;
-+ VkImage fsr_image;
- VkImage user_image;
- VkSemaphore blit_finished;
-- VkImageView user_view, blit_view;
-- VkDescriptorSet descriptor_set;
-+ VkImageView user_view, swapchain_view, fsr_view;
-+ VkDescriptorSet descriptor_set, fsr_set;
-+};
-+
-+struct fs_comp_pipeline
-+{
-+ VkPipelineLayout pipeline_layout;
-+ VkPipeline pipeline;
-+ uint32_t push_size;
- };
-
- struct VkSwapchainKHR_T
-@@ -120,15 +127,20 @@ struct VkSwapchainKHR_T
- VkImageUsageFlags surface_usage;
- VkRect2D blit_dst;
- VkCommandPool *cmd_pools; /* VkCommandPool[device->queue_count] */
-- VkDeviceMemory user_image_memory, blit_image_memory;
-+ VkDeviceMemory user_image_memory, fsr_image_memory;
- uint32_t n_images;
- struct fs_hack_image *fs_hack_images; /* struct fs_hack_image[n_images] */
- VkFilter fs_hack_filter;
- VkSampler sampler;
- VkDescriptorPool descriptor_pool;
- VkDescriptorSetLayout descriptor_set_layout;
-- VkPipelineLayout pipeline_layout;
-- VkPipeline pipeline;
-+ VkFormat format;
-+ BOOL fsr;
-+ float sharpness;
-+
-+ struct fs_comp_pipeline blit_pipeline;
-+ struct fs_comp_pipeline fsr_easu_pipeline;
-+ struct fs_comp_pipeline fsr_rcas_pipeline;
-
- struct wine_vk_mapping mapping;
- };
-diff --git a/dlls/winex11.drv/fs.c b/dlls/winex11.drv/fs.c
-index f66f291161c..c424b961284 100644
---- a/dlls/winex11.drv/fs.c
-+++ b/dlls/winex11.drv/fs.c
-@@ -535,6 +535,20 @@ BOOL fs_hack_is_integer(void)
- return is_int;
- }
-
-+BOOL fs_hack_is_fsr(float *sharpness)
-+{
-+ static int is_fsr = -1;
-+ if (is_fsr < 0)
-+ {
-+ const char *e = getenv("WINE_FULLSCREEN_FSR");
-+ is_fsr = e && strcmp(e, "0");
-+ }
-+ if (sharpness)
-+ *sharpness = 0.0f; /* TODO */
-+ TRACE("is_fsr: %s, sharpness: %2.4f\n", is_fsr ? "TRUE" : "FALSE", sharpness ? *sharpness : 0.0f);
-+ return is_fsr;
-+}
-+
- HMONITOR fs_hack_monitor_from_rect(const RECT *in_rect)
- {
- RECT rect = *in_rect;
-diff --git a/dlls/winex11.drv/vulkan.c b/dlls/winex11.drv/vulkan.c
-index 04d7495c2db..4b24932501f 100644
---- a/dlls/winex11.drv/vulkan.c
-+++ b/dlls/winex11.drv/vulkan.c
-@@ -826,7 +826,7 @@ static VkSurfaceKHR X11DRV_wine_get_native_surface(VkSurfaceKHR surface)
- }
-
- static VkBool32 X11DRV_query_fs_hack(VkSurfaceKHR surface, VkExtent2D *real_sz, VkExtent2D *user_sz,
-- VkRect2D *dst_blit, VkFilter *filter)
-+ VkRect2D *dst_blit, VkFilter *filter, BOOL *fsr, float *sharpness)
- {
- struct wine_vk_surface *x11_surface = surface_from_handle(surface);
- HMONITOR monitor;
-@@ -877,6 +877,9 @@ static VkBool32 X11DRV_query_fs_hack(VkSurfaceKHR surface, VkExtent2D *real_sz,
- if (filter)
- *filter = fs_hack_is_integer() ? VK_FILTER_NEAREST : VK_FILTER_LINEAR;
-
-+ if (fsr)
-+ *fsr = fs_hack_is_fsr(sharpness);
-+
- return VK_TRUE;
- }
- else if (fs_hack_enabled(monitor))
-@@ -909,6 +912,9 @@ static VkBool32 X11DRV_query_fs_hack(VkSurfaceKHR surface, VkExtent2D *real_sz,
- if(filter)
- *filter = fs_hack_is_integer() ? VK_FILTER_NEAREST : VK_FILTER_LINEAR;
-
-+ if (fsr)
-+ *fsr = fs_hack_is_fsr(sharpness);
-+
- return VK_TRUE;
- }
-
-diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
-index dc24cf49d36..5c8947b55d6 100644
---- a/dlls/winex11.drv/x11drv.h
-+++ b/dlls/winex11.drv/x11drv.h
-@@ -629,6 +629,7 @@ extern void set_wm_hints( struct x11drv_win_data *data ) DECLSPEC_HIDDEN;
- extern BOOL fs_hack_enabled(HMONITOR monitor) DECLSPEC_HIDDEN;
- extern BOOL fs_hack_mapping_required(HMONITOR monitor) DECLSPEC_HIDDEN;
- extern BOOL fs_hack_is_integer(void) DECLSPEC_HIDDEN;
-+extern BOOL fs_hack_is_fsr(float *sharpness) DECLSPEC_HIDDEN;
- extern HMONITOR fs_hack_monitor_from_hwnd(HWND hwnd) DECLSPEC_HIDDEN;
- extern HMONITOR fs_hack_monitor_from_rect(const RECT *rect) DECLSPEC_HIDDEN;
- extern BOOL fs_hack_matches_current_mode(HMONITOR monitor, INT width, INT height) DECLSPEC_HIDDEN;
-diff --git a/dlls/winex11.drv/fs.c b/dlls/winex11.drv/fs.c
-index c424b961284..6bebc4c42ee 100644
---- a/dlls/winex11.drv/fs.c
-+++ b/dlls/winex11.drv/fs.c
-@@ -538,13 +538,21 @@ BOOL fs_hack_is_integer(void)
- BOOL fs_hack_is_fsr(float *sharpness)
- {
- static int is_fsr = -1;
-+ int sharpness_int = 2;
- if (is_fsr < 0)
- {
- const char *e = getenv("WINE_FULLSCREEN_FSR");
- is_fsr = e && strcmp(e, "0");
- }
- if (sharpness)
-- *sharpness = 0.0f; /* TODO */
-+ {
-+ const char *e = getenv("WINE_FULLSCREEN_FSR_STRENGTH");
-+ if (e)
-+ {
-+ sharpness_int = atoi(e);
-+ }
-+ *sharpness = (float) sharpness_int / 10.0f;
-+ }
- TRACE("is_fsr: %s, sharpness: %2.4f\n", is_fsr ? "TRUE" : "FALSE", sharpness ? *sharpness : 0.0f);
- return is_fsr;
- }
-diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c
-index 8bb5b7c04a3..7f538f90b43 100644
---- a/dlls/winevulkan/vulkan.c
-+++ b/dlls/winevulkan/vulkan.c
-@@ -2958,6 +2958,24 @@ static VkResult create_descriptor_set(VkDevice device, struct VkSwapchainKHR_T *
- return VK_SUCCESS;
- }
-
-+static VkFormat srgb_to_unorm(VkFormat format)
-+{
-+ switch (format)
-+ {
-+ case VK_FORMAT_R8G8B8A8_SRGB: return VK_FORMAT_R8G8B8A8_UNORM;
-+ case VK_FORMAT_B8G8R8A8_SRGB: return VK_FORMAT_B8G8R8A8_UNORM;
-+ case VK_FORMAT_R8G8B8_SRGB: return VK_FORMAT_R8G8B8_UNORM;
-+ case VK_FORMAT_B8G8R8_SRGB: return VK_FORMAT_B8G8R8_UNORM;
-+ case VK_FORMAT_A8B8G8R8_SRGB_PACK32: return VK_FORMAT_A8B8G8R8_UNORM_PACK32;
-+ default: return format;
-+ }
-+}
-+
-+static BOOL is_srgb(VkFormat format)
-+{
-+ return format != srgb_to_unorm(format);
-+}
-+
- static VkResult init_compute_state(VkDevice device, struct VkSwapchainKHR_T *swapchain)
- {
- VkResult res;
-@@ -3077,7 +3095,7 @@ static VkResult init_compute_state(VkDevice device, struct VkSwapchainKHR_T *swa
- imageInfo.extent.depth = 1;
- imageInfo.mipLevels = 1;
- imageInfo.arrayLayers = 1;
-- imageInfo.format = VK_FORMAT_R8G8B8A8_UNORM;
-+ imageInfo.format = VK_FORMAT_A2B10G10R10_UNORM_PACK32;
- imageInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
- imageInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
- imageInfo.usage = VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_SAMPLED_BIT;
-@@ -3162,7 +3180,7 @@ static VkResult init_compute_state(VkDevice device, struct VkSwapchainKHR_T *swa
- viewInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
- viewInfo.image = hack->fsr_image;
- viewInfo.viewType = VK_IMAGE_VIEW_TYPE_2D;
-- viewInfo.format = VK_FORMAT_R8G8B8A8_UNORM;
-+ viewInfo.format = VK_FORMAT_A2B10G10R10_UNORM_PACK32;
- viewInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
- viewInfo.subresourceRange.baseMipLevel = 0;
- viewInfo.subresourceRange.levelCount = 1;
-@@ -3186,7 +3204,7 @@ static VkResult init_compute_state(VkDevice device, struct VkSwapchainKHR_T *swa
- viewInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
- viewInfo.image = hack->swapchain_image;
- viewInfo.viewType = VK_IMAGE_VIEW_TYPE_2D;
-- viewInfo.format = swapchain->format;
-+ viewInfo.format = srgb_to_unorm(swapchain->format);
- viewInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
- viewInfo.subresourceRange.baseMipLevel = 0;
- viewInfo.subresourceRange.levelCount = 1;
-@@ -3326,6 +3344,13 @@ static VkResult init_fs_hack_images(VkDevice device, struct VkSwapchainKHR_T *sw
- imageInfo.samples = VK_SAMPLE_COUNT_1_BIT;
- imageInfo.queueFamilyIndexCount = createinfo->queueFamilyIndexCount;
- imageInfo.pQueueFamilyIndices = createinfo->pQueueFamilyIndices;
-+
-+ if (is_srgb(createinfo->imageFormat))
-+ imageInfo.flags = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT;
-+
-+ if (createinfo->flags & VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR)
-+ imageInfo.flags = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT | VK_IMAGE_CREATE_EXTENDED_USAGE_BIT;
-+
- res = device->funcs.p_vkCreateImage(device->device, &imageInfo, NULL, &hack->user_image);
- if(res != VK_SUCCESS){
- ERR("vkCreateImage failed: %d\n", res);
-@@ -3391,7 +3416,7 @@ static VkResult init_fs_hack_images(VkDevice device, struct VkSwapchainKHR_T *sw
- viewInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
- viewInfo.image = swapchain->fs_hack_images[i].user_image;
- viewInfo.viewType = VK_IMAGE_VIEW_TYPE_2D;
-- viewInfo.format = createinfo->imageFormat;
-+ viewInfo.format = srgb_to_unorm(createinfo->imageFormat);
- viewInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
- viewInfo.subresourceRange.baseMipLevel = 0;
- viewInfo.subresourceRange.levelCount = 1;
-@@ -3501,6 +3526,9 @@ VkResult WINAPI wine_vkCreateSwapchainKHR(VkDevice device, const VkSwapchainCrea
-
- object->format = native_info.imageFormat;
-
-+ if (object->fsr)
-+ native_info.imageFormat = srgb_to_unorm(native_info.imageFormat);
-+
- if(native_info.imageFormat != VK_FORMAT_B8G8R8A8_UNORM &&
- native_info.imageFormat != VK_FORMAT_B8G8R8A8_SRGB){
- FIXME("swapchain image format is not BGRA8 UNORM/SRGB. Things may go badly. %d\n", native_info.imageFormat);
-@@ -4566,16 +4594,21 @@ VkResult WINAPI wine_vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *pP
- {
- if(queue->device->queue_props[queue_idx].queueFlags & VK_QUEUE_COMPUTE_BIT)
- res = record_fsr_cmd(queue->device, swapchain, hack);
-+ else
-+ {
-+ ERR("Present queue is not a compute queue!\n");
-+ res = VK_ERROR_DEVICE_LOST;
-+ }
- }
- else
- {
- if(queue->device->queue_props[queue_idx].queueFlags & VK_QUEUE_GRAPHICS_BIT)
- res = record_graphics_cmd(queue->device, swapchain, hack);
-- if(queue->device->queue_props[queue_idx].queueFlags & VK_QUEUE_COMPUTE_BIT)
-+ if(queue->device->queue_props[queue_idx].queueFlags & VK_QUEUE_COMPUTE_BIT && !is_srgb(swapchain->format))
- res = record_compute_cmd(queue->device, swapchain, hack);
- else
- {
-- ERR("Present queue is neither graphics nor compute queue!\n");
-+ ERR("Present queue is neither graphics nor compute queue with unorm format!\n");
- res = VK_ERROR_DEVICE_LOST;
- }
- }
-From 6cdad4ea774347ddbb14d695784ea62641b69c96 Mon Sep 17 00:00:00 2001
-From: Tk-Glitch <ti3nou@gmail.com>
-Date: Sat, 17 Jul 2021 23:54:42 +0200
-Subject: fractional resolutions
-
-
-diff --git a/dlls/winex11.drv/fs.c b/dlls/winex11.drv/fs.c
-index 282d9dbe5ca..2a1242cb5c5 100644
---- a/dlls/winex11.drv/fs.c
-+++ b/dlls/winex11.drv/fs.c
-@@ -67,6 +67,8 @@ static struct fs_monitor_size fs_monitor_sizes[] =
- {1600, 900}, /* 16:9 */
- {1920, 1080}, /* 16:9 */
- {2560, 1440}, /* 16:9 */
-+ {2304, 1296}, /* 16:9 */
-+ {2048, 1152}, /* 16:9 */
- {2880, 1620}, /* 16:9 */
- {3200, 1800}, /* 16:9 */
- {1440, 900}, /* 8:5 */
-From c7f9f832e966649b232316557653d69a8fa5947b Mon Sep 17 00:00:00 2001
-From: Thomas Crider <gloriouseggroll@gmail.com>
-Date: Wed, 21 Jul 2021 00:34:52 -0600
-Subject: [PATCH] FSR: Add fshack input resolutions
-
-https://www.tomshardware.com/news/amd-fidelityfx-super-resolution-fsr-performance-tested
----
- dlls/winex11.drv/fs.c | 15 +++++++++++----
- 1 file changed, 11 insertions(+), 4 deletions(-)
-
-diff --git a/dlls/winex11.drv/fs.c b/dlls/winex11.drv/fs.c
-index 2a1242cb5c5..756964fe714 100644
---- a/dlls/winex11.drv/fs.c
-+++ b/dlls/winex11.drv/fs.c
-@@ -62,14 +62,21 @@ static struct fs_monitor_size fs_monitor_sizes[] =
- {800, 600}, /* 4:3 */
- {1024, 768}, /* 4:3 */
- {1600, 1200}, /* 4:3 */
-- {960, 540}, /* 16:9 */
-- {1280, 720}, /* 16:9 */
-+ {960, 540}, /* 16:9 - 'FSR 1080p Performance' */
-+ {1130, 635}, /* 16:9 - 'FSR 1080p Balanced' */
-+ {1280, 720}, /* 16:9 - 'FSR 1440p Performance, 1080p Quality' */
-+ {1477, 831}, /* 16:9 - 'FSR 1080p Ultra Quality' */
-+ {1506, 847}, /* 16:9 - 'FSR 1440p Balanced' */
- {1600, 900}, /* 16:9 */
-- {1920, 1080}, /* 16:9 */
-- {2560, 1440}, /* 16:9 */
-+ {1706, 960}, /* 16:9 - 'FSR 1440p Quality' */
-+ {1920, 1080}, /* 16:9 - 'FSR 2160p Performance' */
-+ {1970, 1108}, /* 16:9 - 'FSR 1440p Ultra Quality' */
-+ {2259, 1270}, /* 16:9 - 'FSR 2160p Balanced' */
-+ {2560, 1440}, /* 16:9 - 'FSR 2160p Quality' */
- {2304, 1296}, /* 16:9 */
- {2048, 1152}, /* 16:9 */
- {2880, 1620}, /* 16:9 */
-+ {2954, 1662}, /* 16:9 - 'FSR 2160p Ultra Quality' */
- {3200, 1800}, /* 16:9 */
- {1440, 900}, /* 8:5 */
- {1680, 1050}, /* 8:5 */
---
-2.31.1
-
-From c760fe3301802efffc966ff8b4a99326a76f07ec Mon Sep 17 00:00:00 2001
-From: Thomas Crider <gloriouseggroll@gmail.com>
-Date: Thu, 22 Jul 2021 00:03:31 -0600
-Subject: [PATCH] =?UTF-8?q?fsr:=20add=20ultra-wide=20input=20resolutions?=
- =?UTF-8?q?=20=1B[200~?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-https://gpuopen.com/fidelityfx-superresolution/#quality
----
- dlls/winex11.drv/fs.c | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/dlls/winex11.drv/fs.c b/dlls/winex11.drv/fs.c
-index 756964fe714..6151f43bacf 100644
---- a/dlls/winex11.drv/fs.c
-+++ b/dlls/winex11.drv/fs.c
-@@ -84,9 +84,14 @@ static struct fs_monitor_size fs_monitor_sizes[] =
- {2560, 1600}, /* 8:5 */
- {1440, 960}, /* 3:2 */
- {1920, 1280}, /* 3:2 */
-- {2560, 1080}, /* 21:9 ultra-wide */
- {1920, 800}, /* 12:5 */
- {3840, 1600}, /* 12:5 */
-+ {1720, 720}, /* 21:9 - 'FSR ultra-wide Performance' */
-+ {2024, 847}, /* 21:9 - 'FSR ultra-wide Balanced' */
-+ {2293, 960}, /* 21:9 - 'FSR ultra-wide Quality' */
-+ {2560, 1080}, /* 21:9 ultra-wide */
-+ {2646, 1108}, /* 21:9 - 'FSR ultra-wide Ultra Quality' */
-+ {3440, 1440}, /* 21:9 ultra-wide */
- {1280, 1024}, /* 5:4 */
- };
-
---
-2.31.1
-
-diff --git a/dlls/winevulkan/Makefile.in b/dlls/winevulkan/Makefile.in
-index 38809211308..f7ca282921f 100644
---- a/dlls/winevulkan/Makefile.in
-+++ b/dlls/winevulkan/Makefile.in
-@@ -2,7 +2,7 @@ MODULE = winevulkan.dll
- UNIXLIB = winevulkan.so
- IMPORTLIB = winevulkan
- IMPORTS = user32 gdi32 advapi32 setupapi win32u
--EXTRALIBS = $(PTHREAD_LIBS)
-+EXTRALIBS = -lm $(PTHREAD_LIBS)
-
- C_SRCS = \
- loader.c \