diff options
author | Stelios Tsampas | 2021-09-29 01:50:12 +0300 |
---|---|---|
committer | Stelios Tsampas | 2021-09-29 21:33:37 +0300 |
commit | 71e78dafe535af3d3aa631eab5306c41577865be (patch) | |
tree | b100aab22c510793789dbecfe6a6c4c604c0760f | |
parent | c6496263b1211664fa0aa3ef3d53b2102becee29 (diff) | |
download | aur-71e78dafe535af3d3aa631eab5306c41577865be.tar.gz |
Add FSR patch
-rw-r--r-- | .SRCINFO | 26 | ||||
-rw-r--r-- | PKGBUILD | 112 | ||||
-rw-r--r-- | dxvk-async.patch | 52 | ||||
-rw-r--r-- | proton-unfuck_makefile.patch | 32 | ||||
-rw-r--r-- | wine-more_8x5_res.patch | 15 | ||||
-rw-r--r-- | wine-winevulkan_fsr.patch | 1989 |
6 files changed, 2130 insertions, 96 deletions
@@ -1,7 +1,7 @@ pkgbase = proton-native pkgdesc = Compatibility tool for Steam Play based on Wine and additional components. Monolithic distribution pkgver = 6.3.6c - pkgrel = 1 + pkgrel = 2 epoch = 1 url = https://github.com/ValveSoftware/Proton arch = x86_64 @@ -203,26 +203,28 @@ pkgbase = proton-native source = proton::git+https://github.com/ValveSoftware/Proton.git#tag=proton-6.3-6c source = wine-valve::git+https://github.com/ValveSoftware/wine.git source = dxvk-valve::git+https://github.com/ValveSoftware/dxvk.git - source = dxvk-nvapi::git+https://github.com/jp7677/dxvk-nvapi.git - source = vkd3d-proton::git+https://github.com/HansKristian-Work/vkd3d-proton.git source = openvr::git+https://github.com/ValveSoftware/openvr.git - source = OpenXR-SDK::git+https://github.com/KhronosGroup/OpenXR-SDK.git source = liberation-fonts::git+https://github.com/liberationfonts/liberation-fonts.git - source = SPIRV-Headers::git+https://github.com/KhronosGroup/SPIRV-Headers.git - source = Vulkan-Headers::git+https://github.com/KhronosGroup/Vulkan-Headers.git - source = dxil-spirv::git+https://github.com/HansKristian-Work/dxil-spirv.git source = FAudio::git+https://github.com/FNA-XNA/FAudio.git source = gstreamer::git+https://gitlab.freedesktop.org/gstreamer/gstreamer.git - source = gst-orc::git+https://gitlab.freedesktop.org/gstreamer/orc.git source = gst-plugins-base::git+https://gitlab.freedesktop.org/gstreamer/gst-plugins-base.git source = gst-plugins-good::git+https://gitlab.freedesktop.org/gstreamer/gst-plugins-good.git + source = gst-orc::git+https://gitlab.freedesktop.org/gstreamer/orc.git + source = vkd3d-proton::git+https://github.com/HansKristian-Work/vkd3d-proton.git + source = OpenXR-SDK::git+https://github.com/KhronosGroup/OpenXR-SDK.git + source = dxvk-nvapi::git+https://github.com/jp7677/dxvk-nvapi.git + source = dxil-spirv::git+https://github.com/HansKristian-Work/dxil-spirv.git + source = SPIRV-Headers::git+https://github.com/KhronosGroup/SPIRV-Headers.git + source = Vulkan-Headers::git+https://github.com/KhronosGroup/Vulkan-Headers.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-6.3.0/wine-mono-6.3.0-x86.tar.xz + source = wine-winevulkan_fsr.patch + source = wine-more_8x5_res.patch + source = dxvk-async.patch source = proton-unfuck_makefile.patch source = proton-disable_lock.patch source = proton-user_compat_data.patch - source = dxvk-async.patch sha256sums = SKIP sha256sums = SKIP sha256sums = SKIP @@ -242,9 +244,11 @@ pkgbase = proton-native sha256sums = 8fab46ea2110b2b0beed414e3ebb4e038a3da04900e7a28492ca3c3ccf9fea94 sha256sums = b4476706a4c3f23461da98bed34f355ff623c5d2bb2da1e2fa0c6a310bc33014 sha256sums = eb67426ff60ed6395b70437e838883ee08b6189cad84faf036b1a4d7366a34e2 - sha256sums = 812b2b73bc7b6a88de480f6410970c2454866bb123c3baefd990679c9dd3ef98 + sha256sums = b4e9c0c4959fcb3f7b7f25e35e5e0577dac5d54fe18e6edb15852a2a4196f2a2 + sha256sums = 9005d8169266ba0b93be30e1475fe9a3697464796f553886c155ec1d77d71215 + sha256sums = acdb652830d642829057a035ebc69481697078a734f57ac974ee5b54454470ff + sha256sums = 8399d0684a9c732bf405a37f1f3cc779435f2c68a8d042382e9e0538576ab854 sha256sums = 8263a3ffb7f8e7a5d81bfbffe1843d6f84502d3443fe40f065bcae02b36ba954 sha256sums = 20f7cd3e70fad6f48d2f1a26a485906a36acf30903bf0eefbf82a7c400e248f3 - sha256sums = 36aaba6847e4577df4a496d88c11b4b7049773f1f2b90aa4545093e16d5c6066 pkgname = proton-native @@ -6,7 +6,7 @@ _commit= pkgver=${_srctag//-/.} _geckover=2.47.2 _monover=6.3.0 -pkgrel=1 +pkgrel=2 epoch=1 pkgdesc="Compatibility tool for Steam Play based on Wine and additional components. Monolithic distribution" url="https://github.com/ValveSoftware/Proton" @@ -106,25 +106,27 @@ source=( proton::git+https://github.com/ValveSoftware/Proton.git#tag=proton-${_srctag} wine-valve::git+https://github.com/ValveSoftware/wine.git dxvk-valve::git+https://github.com/ValveSoftware/dxvk.git - dxvk-nvapi::git+https://github.com/jp7677/dxvk-nvapi.git - vkd3d-proton::git+https://github.com/HansKristian-Work/vkd3d-proton.git openvr::git+https://github.com/ValveSoftware/openvr.git - OpenXR-SDK::git+https://github.com/KhronosGroup/OpenXR-SDK.git liberation-fonts::git+https://github.com/liberationfonts/liberation-fonts.git - SPIRV-Headers::git+https://github.com/KhronosGroup/SPIRV-Headers.git - Vulkan-Headers::git+https://github.com/KhronosGroup/Vulkan-Headers.git - dxil-spirv::git+https://github.com/HansKristian-Work/dxil-spirv.git FAudio::git+https://github.com/FNA-XNA/FAudio.git gstreamer::git+https://gitlab.freedesktop.org/gstreamer/gstreamer.git - gst-orc::git+https://gitlab.freedesktop.org/gstreamer/orc.git gst-plugins-base::git+https://gitlab.freedesktop.org/gstreamer/gst-plugins-base.git gst-plugins-good::git+https://gitlab.freedesktop.org/gstreamer/gst-plugins-good.git + gst-orc::git+https://gitlab.freedesktop.org/gstreamer/orc.git + vkd3d-proton::git+https://github.com/HansKristian-Work/vkd3d-proton.git + OpenXR-SDK::git+https://github.com/KhronosGroup/OpenXR-SDK.git + dxvk-nvapi::git+https://github.com/jp7677/dxvk-nvapi.git + dxil-spirv::git+https://github.com/HansKristian-Work/dxil-spirv.git + SPIRV-Headers::git+https://github.com/KhronosGroup/SPIRV-Headers.git + Vulkan-Headers::git+https://github.com/KhronosGroup/Vulkan-Headers.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 + wine-winevulkan_fsr.patch + wine-more_8x5_res.patch + dxvk-async.patch proton-unfuck_makefile.patch proton-disable_lock.patch proton-user_compat_data.patch - dxvk-async.patch ) noextract=( wine-gecko-${_geckover}-{x86,x86_64}.tar.xz @@ -148,57 +150,77 @@ prepare() { [ ! -d build ] && mkdir build cd proton - for submodule in openvr OpenXR-SDK fonts/liberation-fonts FAudio vkd3d-proton dxvk-nvapi; do - git submodule init "${submodule}" - git config submodule."${submodule}".url "$srcdir"/"${submodule#*/}" - git submodule update "${submodule}" - done - for submodule in wine dxvk; do - git submodule init "${submodule}" - git config submodule."${submodule}".url "$srcdir"/"${submodule#*/}"-valve - git submodule update "${submodule}" - done + _submodules=( + wine-valve::wine + dxvk-valve::dxvk + openvr + liberation-fonts::fonts/liberation-fonts + FAudio + gstreamer + gst-plugins-base + gst-plugins-good + gst-orc + vkd3d-proton + OpenXR-SDK + dxvk-nvapi + ) - for submodule in gstreamer gst-{plugins-{base,good},orc}; do - git submodule init "${submodule}" - git config submodule."${submodule}".url "$srcdir"/"${submodule#*/}" - git submodule update "${submodule}" + for submodule in "${_submodules[@]}"; do + git submodule init "${submodule#*::}" + git config submodule."${submodule#*::}".url "$srcdir"/"${submodule%::*}" + git submodule update "${submodule#*::}" done 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}" - 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 - popd + 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}" + 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 + popd popd pushd dxvk-nvapi - for submodule in external/Vulkan-Headers; do - git submodule init "${submodule}" - git config submodule."${submodule}".url "$srcdir"/"${submodule#*/}" - git submodule update "${submodule}" - done + git submodule init external/Vulkan-Headers + git config submodule.external/Vulkan-Headers.url "$srcdir"/Vulkan-Headers + git submodule update external/Vulkan-Headers popd - patch -p1 -i "$srcdir"/proton-unfuck_makefile.patch - patch -p1 -i "$srcdir"/proton-disable_lock.patch - patch -p1 -i "$srcdir"/proton-user_compat_data.patch + pushd media-converter + export CARGO_HOME="${srcdir}"/build/.cargo + cargo update + cargo fetch --locked --target "i686-unknown-linux-gnu" + cargo fetch --locked --target "x86_64-unknown-linux-gnu" + popd + + pushd wine + # 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 + popd # 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.patch + pushd dxvk + patch -p1 -i "$srcdir"/dxvk-async.patch + popd + + patch -p1 -i "$srcdir"/proton-unfuck_makefile.patch + patch -p1 -i "$srcdir"/proton-disable_lock.patch + patch -p1 -i "$srcdir"/proton-user_compat_data.patch } build() { + source build_venv/bin/activate + cd build ROOTLESS_CONTAINER="" \ ../proton/configure.sh \ @@ -307,8 +329,10 @@ sha256sums=('SKIP' '8fab46ea2110b2b0beed414e3ebb4e038a3da04900e7a28492ca3c3ccf9fea94' 'b4476706a4c3f23461da98bed34f355ff623c5d2bb2da1e2fa0c6a310bc33014' 'eb67426ff60ed6395b70437e838883ee08b6189cad84faf036b1a4d7366a34e2' - '812b2b73bc7b6a88de480f6410970c2454866bb123c3baefd990679c9dd3ef98' + 'b4e9c0c4959fcb3f7b7f25e35e5e0577dac5d54fe18e6edb15852a2a4196f2a2' + '9005d8169266ba0b93be30e1475fe9a3697464796f553886c155ec1d77d71215' + 'acdb652830d642829057a035ebc69481697078a734f57ac974ee5b54454470ff' + '8399d0684a9c732bf405a37f1f3cc779435f2c68a8d042382e9e0538576ab854' '8263a3ffb7f8e7a5d81bfbffe1843d6f84502d3443fe40f065bcae02b36ba954' '20f7cd3e70fad6f48d2f1a26a485906a36acf30903bf0eefbf82a7c400e248f3' - '36aaba6847e4577df4a496d88c11b4b7049773f1f2b90aa4545093e16d5c6066' ) diff --git a/dxvk-async.patch b/dxvk-async.patch index fdd505a24686..016f8f06a122 100644 --- a/dxvk-async.patch +++ b/dxvk-async.patch @@ -1,7 +1,7 @@ diff --git a/meson.build b/meson.build index 8fa3ce61..5e4d32d1 100644 ---- a/dxvk/meson.build -+++ b/dxvk/meson.build +--- a/meson.build ++++ b/meson.build @@ -103,7 +103,7 @@ else endif @@ -13,8 +13,8 @@ index 8fa3ce61..5e4d32d1 100644 diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index 797c4e20..bda90275 100644 ---- a/dxvk/src/dxvk/dxvk_context.cpp -+++ b/dxvk/src/dxvk/dxvk_context.cpp +--- a/src/dxvk/dxvk_context.cpp ++++ b/src/dxvk/dxvk_context.cpp @@ -3837,7 +3837,9 @@ namespace dxvk { : DxvkContextFlag::GpDirtyStencilRef); @@ -73,8 +73,8 @@ index 797c4e20..bda90275 100644 const DxvkGraphicsPipelineShaders& shaders) { diff --git a/src/dxvk/dxvk_context.h b/src/dxvk/dxvk_context.h index 2456b20a..d58f1021 100644 ---- a/dxvk/src/dxvk/dxvk_context.h -+++ b/dxvk/src/dxvk/dxvk_context.h +--- a/src/dxvk/dxvk_context.h ++++ b/src/dxvk/dxvk_context.h @@ -1159,7 +1159,7 @@ namespace dxvk { VkDescriptorSet set, const DxvkPipelineLayout* layout); @@ -95,8 +95,8 @@ index 2456b20a..d58f1021 100644 diff --git a/src/dxvk/dxvk_graphics.cpp b/src/dxvk/dxvk_graphics.cpp index 192e340b..96826600 100644 ---- a/dxvk/src/dxvk/dxvk_graphics.cpp -+++ b/dxvk/src/dxvk/dxvk_graphics.cpp +--- a/src/dxvk/dxvk_graphics.cpp ++++ b/src/dxvk/dxvk_graphics.cpp @@ -62,17 +62,21 @@ namespace dxvk { VkPipeline DxvkGraphicsPipeline::getPipelineHandle( @@ -157,8 +157,8 @@ index 192e340b..96826600 100644 return &instance; diff --git a/src/dxvk/dxvk_graphics.h b/src/dxvk/dxvk_graphics.h index 4194599d..c48ee3ed 100644 ---- a/dxvk/src/dxvk/dxvk_graphics.h -+++ b/dxvk/src/dxvk/dxvk_graphics.h +--- a/src/dxvk/dxvk_graphics.h ++++ b/src/dxvk/dxvk_graphics.h @@ -185,11 +185,13 @@ namespace dxvk { * state. If necessary, a new pipeline will be created. * \param [in] state Pipeline state vector @@ -213,8 +213,8 @@ index 4194599d..c48ee3ed 100644 const DxvkGraphicsPipelineStateInfo& state) const; diff --git a/src/dxvk/dxvk_image.h b/src/dxvk/dxvk_image.h index 19b5d85f..3da24c49 100644 ---- a/dxvk/src/dxvk/dxvk_image.h -+++ b/dxvk/src/dxvk/dxvk_image.h +--- a/src/dxvk/dxvk_image.h ++++ b/src/dxvk/dxvk_image.h @@ -465,6 +465,37 @@ namespace dxvk { return result; } @@ -265,8 +265,8 @@ index 19b5d85f..3da24c49 100644 }; diff --git a/src/dxvk/dxvk_options.cpp b/src/dxvk/dxvk_options.cpp index 73dd69d1..c3da6bb5 100644 ---- a/dxvk/src/dxvk/dxvk_options.cpp -+++ b/dxvk/src/dxvk/dxvk_options.cpp +--- a/src/dxvk/dxvk_options.cpp ++++ b/src/dxvk/dxvk_options.cpp @@ -10,6 +10,8 @@ namespace dxvk { useRawSsbo = config.getOption<Tristate>("dxvk.useRawSsbo", Tristate::Auto); useEarlyDiscard = config.getOption<Tristate>("dxvk.useEarlyDiscard", Tristate::Auto); @@ -279,8 +279,8 @@ index 73dd69d1..c3da6bb5 100644 \ No newline at end of file diff --git a/src/dxvk/dxvk_options.h b/src/dxvk/dxvk_options.h index 3c5dde91..52a7be04 100644 ---- a/dxvk/src/dxvk/dxvk_options.h -+++ b/dxvk/src/dxvk/dxvk_options.h +--- a/src/dxvk/dxvk_options.h ++++ b/src/dxvk/dxvk_options.h @@ -21,6 +21,13 @@ namespace dxvk { /// when using the state cache int32_t numCompilerThreads; @@ -299,7 +299,7 @@ diff --git a/src/dxvk/dxvk_pipecompiler.cpp b/src/dxvk/dxvk_pipecompiler.cpp new file mode 100644 index 00000000..40218acd --- /dev/null -+++ b/dxvk/src/dxvk/dxvk_pipecompiler.cpp ++++ b/src/dxvk/dxvk_pipecompiler.cpp @@ -0,0 +1,76 @@ +#include "dxvk_device.h" +#include "dxvk_graphics.h" @@ -381,7 +381,7 @@ diff --git a/src/dxvk/dxvk_pipecompiler.h b/src/dxvk/dxvk_pipecompiler.h new file mode 100644 index 00000000..d7fcc2cf --- /dev/null -+++ b/dxvk/src/dxvk/dxvk_pipecompiler.h ++++ b/src/dxvk/dxvk_pipecompiler.h @@ -0,0 +1,61 @@ +#pragma once + @@ -446,8 +446,8 @@ index 00000000..d7fcc2cf +} diff --git a/src/dxvk/dxvk_pipemanager.cpp b/src/dxvk/dxvk_pipemanager.cpp index 2e29202e..1e767381 100644 ---- a/dxvk/src/dxvk/dxvk_pipemanager.cpp -+++ b/dxvk/src/dxvk/dxvk_pipemanager.cpp +--- a/src/dxvk/dxvk_pipemanager.cpp ++++ b/src/dxvk/dxvk_pipemanager.cpp @@ -9,7 +9,11 @@ namespace dxvk { DxvkRenderPassPool* passManager) : m_device (device), @@ -462,8 +462,8 @@ index 2e29202e..1e767381 100644 m_stateCache = new DxvkStateCache(device, this, passManager); diff --git a/src/dxvk/dxvk_pipemanager.h b/src/dxvk/dxvk_pipemanager.h index 858928ca..4c12a4dc 100644 ---- a/dxvk/src/dxvk/dxvk_pipemanager.h -+++ b/dxvk/src/dxvk/dxvk_pipemanager.h +--- a/src/dxvk/dxvk_pipemanager.h ++++ b/src/dxvk/dxvk_pipemanager.h @@ -6,6 +6,7 @@ #include "dxvk_compute.h" @@ -482,8 +482,8 @@ index 858928ca..4c12a4dc 100644 std::atomic<uint32_t> m_numGraphicsPipelines = { 0 }; diff --git a/src/dxvk/meson.build b/src/dxvk/meson.build index 1dc113c3..003fb1a7 100644 ---- a/dxvk/src/dxvk/meson.build -+++ b/dxvk/src/dxvk/meson.build +--- a/src/dxvk/meson.build ++++ b/src/dxvk/meson.build @@ -83,6 +83,7 @@ dxvk_src = files([ 'dxvk_openvr.cpp', 'dxvk_options.cpp', @@ -494,8 +494,8 @@ index 1dc113c3..003fb1a7 100644 'dxvk_queue.cpp', diff --git a/dxvk.conf b/dxvk.conf index 9ca21a5e..abf0f2bf 100644 ---- a/dxvk/dxvk.conf -+++ b/dxvk/dxvk.conf +--- a/dxvk.conf ++++ b/dxvk.conf @@ -214,6 +214,24 @@ # dxvk.hud = diff --git a/proton-unfuck_makefile.patch b/proton-unfuck_makefile.patch index d89db9d92baa..e63b6912bef1 100644 --- a/proton-unfuck_makefile.patch +++ b/proton-unfuck_makefile.patch @@ -1,16 +1,16 @@ diff --git a/build/makefile_base.mak b/build/makefile_base.mak -index c9f14bc..b5d8063 100644 +index d978a99..9502e3c 100644 --- a/build/makefile_base.mak +++ b/build/makefile_base.mak -@@ -60,7 +60,6 @@ ifeq ($(ENABLE_CCACHE),1) +@@ -63,7 +63,6 @@ ifeq ($(ENABLE_CCACHE),1) export CCACHE_DIR := $(if $(CCACHE_DIR),$(CCACHE_DIR),$(HOME)/.ccache) - DOCKER_OPTS := -v $(CCACHE_DIR):$(CCACHE_DIR) $(CCACHE_ENV) -e CCACHE_DIR=$(CCACHE_DIR) $(DOCKER_OPTS) + DOCKER_OPTS := -v $(CCACHE_DIR):$(CCACHE_DIR)$(CONTAINER_MOUNT_OPTS) $(CCACHE_ENV) -e CCACHE_DIR=$(CCACHE_DIR) $(DOCKER_OPTS) else - export CCACHE_DISABLE := 1 DOCKER_OPTS := $(CCACHE_ENV) -e CCACHE_DISABLE=1 $(DOCKER_OPTS) endif -@@ -168,7 +167,8 @@ else +@@ -171,7 +170,8 @@ else endif CROSSLDFLAGS += -Wl,--file-alignment,4096 @@ -20,7 +20,7 @@ index c9f14bc..b5d8063 100644 SANITY_FLAGS := -fwrapv -fno-strict-aliasing DEBUG_FLAGS := -gdwarf-2 -gstrict-dwarf COMMON_FLAGS = $(DEBUG_FLAGS) $(OPTIMIZE_FLAGS) $(SANITY_FLAGS) -ffile-prefix-map=$(CCACHE_BASEDIR)=. -@@ -347,8 +347,8 @@ ALL_TARGETS += dist +@@ -354,8 +354,8 @@ ALL_TARGETS += dist GOAL_TARGETS += dist dist_prefix: wine gst_good @@ -31,7 +31,7 @@ index c9f14bc..b5d8063 100644 rm -rf $(abspath $(DIST_PREFIX)) python3 $(SRCDIR)/default_pfx.py $(abspath $(DIST_PREFIX)) $(abspath $(DST_DIR)) $(STEAM_RUNTIME_RUNSH) -@@ -404,6 +404,9 @@ endif # ifeq ($(CONTAINER),) +@@ -411,6 +411,9 @@ endif # ifeq ($(CONTAINER),) ## GST_COMMON_MESON_ARGS := \ @@ -41,7 +41,7 @@ index c9f14bc..b5d8063 100644 -Dexamples=disabled \ -Dtests=disabled \ -Dgtk_doc=disabled \ -@@ -416,6 +419,7 @@ GST_COMMON_MESON_ARGS := \ +@@ -423,6 +426,7 @@ GST_COMMON_MESON_ARGS := \ GST_ORC_MESON_ARGS := \ -Dorc-test=disabled \ @@ -49,7 +49,7 @@ index c9f14bc..b5d8063 100644 $(GST_COMMON_MESON_ARGS) $(eval $(call rules-source,gst_orc,$(SRCDIR)/gst-orc)) -@@ -432,6 +436,9 @@ GSTREAMER_MESON_ARGS := \ +@@ -439,6 +443,9 @@ GSTREAMER_MESON_ARGS := \ -Dbenchmarks=disabled \ -Dtools=disabled \ -Dbash-completion=disabled \ @@ -59,7 +59,7 @@ index c9f14bc..b5d8063 100644 $(GST_COMMON_MESON_ARGS) GSTREAMER_DEPENDS = gst_orc -@@ -470,6 +477,7 @@ GST_BASE_MESON_ARGS := \ +@@ -477,6 +484,7 @@ GST_BASE_MESON_ARGS := \ -Dxshm=disabled \ -Dxvideo=disabled \ -Dtools=disabled \ @@ -67,7 +67,7 @@ index c9f14bc..b5d8063 100644 $(GST_COMMON_MESON_ARGS) GST_BASE_DEPENDS = gst_orc gstreamer -@@ -531,6 +539,7 @@ GST_GOOD_MESON_ARGS := \ +@@ -538,6 +546,7 @@ GST_GOOD_MESON_ARGS := \ -Dximagesrc=disabled \ -Dy4m=disabled \ -Dtools=disabled \ @@ -75,7 +75,7 @@ index c9f14bc..b5d8063 100644 $(GST_COMMON_MESON_ARGS) GST_GOOD_DEPENDS = gst_orc gstreamer gst_base -@@ -651,8 +660,14 @@ WINE_SOURCE_ARGS = \ +@@ -658,8 +667,14 @@ WINE_SOURCE_ARGS = \ --exclude include/config.h.in \ WINE_CONFIGURE_ARGS = \ @@ -90,7 +90,7 @@ index c9f14bc..b5d8063 100644 --disable-tests WINE_CONFIGURE_ARGS64 = --enable-win64 -@@ -745,7 +760,7 @@ VKD3D_PROTON_SOURCE_ARGS = \ +@@ -778,7 +793,7 @@ VKD3D_PROTON_SOURCE_ARGS = \ --exclude vkd3d_build.h.in \ --exclude vkd3d_version.h.in \ @@ -127,15 +127,17 @@ index 80eee67..ed255e1 100644 endif endef diff --git a/make/rules-cargo.mk b/make/rules-cargo.mk -index 5369fb4..3cbf8c2 100644 +index 5369fb4..21db917 100644 --- a/make/rules-cargo.mk +++ b/make/rules-cargo.mk -@@ -14,7 +14,7 @@ $(OBJ)/.$(1)-configure$(3): +@@ -14,7 +14,9 @@ $(OBJ)/.$(1)-configure$(3): $(OBJ)/.$(1)-build$(3): @echo ":: building $(3)bit $(1)..." >&2 cd $$($(2)_SRC) && env $$($(2)_ENV$(3)) \ - cargo build --target "$$(ARCH$(3))-unknown-linux-gnu" --target-dir $$($(2)_OBJ$(3)) $$(CARGO_BUILD_ARG) -+ cargo build --verbose --target "$$(ARCH$(3))-unknown-linux-gnu" --target-dir $$($(2)_OBJ$(3)) $$(CARGO_BUILD_ARG) ++ cargo update --offline --verbose ++ cd $$($(2)_SRC) && env $$($(2)_ENV$(3)) \ ++ cargo build --locked --offline --verbose --target "$$(ARCH$(3))-unknown-linux-gnu" --target-dir $$($(2)_OBJ$(3)) $$(CARGO_BUILD_ARG) touch $$@ endif endef diff --git a/wine-more_8x5_res.patch b/wine-more_8x5_res.patch new file mode 100644 index 000000000000..acc09936ffd3 --- /dev/null +++ b/wine-more_8x5_res.patch @@ -0,0 +1,15 @@ +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 new file mode 100644 index 000000000000..99d4e3e76102 --- /dev/null +++ b/wine-winevulkan_fsr.patch @@ -0,0 +1,1989 @@ +From 1b7461a01d3ba261a511108c1ff4d872fb0305fe 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 e159c87..b1fdbd6 100644 +--- a/dlls/winevulkan/vulkan.c ++++ b/dlls/winevulkan/vulkan.c +@@ -881,0 +882,2 @@ VkResult WINAPI __wine_create_vk_device_with_callback(VkPhysicalDevice phys_dev, ++ VkPhysicalDeviceFeatures features = {0}; ++ VkPhysicalDeviceFeatures2 *features2; +@@ -914,0 +917,20 @@ VkResult WINAPI __wine_create_vk_device_with_callback(VkPhysicalDevice phys_dev, ++ /* Enable shaderStorageImageWriteWithoutFormat for fshack ++ * This is available on all hardware and driver combinations we care about. ++ */ ++ 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; ++ } ++ ++ +-- +libgit2 1.1.1 + +From 079f65ea20bc54df42e5c2c047a05694fd9fafb6 Mon Sep 17 00:00:00 2001 +From: Georg Lehmann <dadschoorse@gmail.com> +Date: Thu, 15 Jul 2021 18:50:05 +0200 +Subject: [PATCH] winevulkan: fshack: Implement fsr. + +Signed-off-by: Georg Lehmann <dadschoorse@gmail.com> +--- + dlls/winevulkan/make_vulkan | 2 +- + dlls/winevulkan/vulkan.c | 1567 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + dlls/winevulkan/vulkan_private.h | 24 ++++++++++++++++++------ + dlls/winex11.drv/fs.c | 17 +++++++++++++++++ + dlls/winex11.drv/vulkan.c | 8 +++++++- + dlls/winex11.drv/x11drv.h | 1 + + include/wine/vulkan_driver.h | 2 +- + 7 files changed, 1254 insertions(+), 367 deletions(-) + +diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan +index 5a0ef02..59e49a9 100755 +--- a/dlls/winevulkan/make_vulkan ++++ b/dlls/winevulkan/make_vulkan +@@ -2703 +2703 @@ class VkGenerator(object): +- 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") +diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c +index b1fdbd6..905e78d 100644 +--- a/dlls/winevulkan/vulkan.c ++++ b/dlls/winevulkan/vulkan.c +@@ -2009 +2009 @@ layout(binding = 0) uniform sampler2D texSampler; +-layout(binding = 1, rgba8) uniform writeonly image2D outImage; ++layout(binding = 1) uniform writeonly image2D outImage; +@@ -2022 +2022 @@ void main() +- imageStore(outImage, ivec2(gl_GlobalInvocationID.xy), c.bgra); ++ imageStore(outImage, ivec2(gl_GlobalInvocationID.xy), c); +@@ -2026,47 +2026,46 @@ 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 +@@ -2075 +2074,749 @@ const uint32_t blit_comp_spv[] = { +-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) +@@ -2077 +2823,0 @@ static VkResult create_pipeline(VkDevice device, struct VkSwapchainKHR_T *swapch +- VkResult res; +@@ -2082,0 +2829,35 @@ static VkResult create_pipeline(VkDevice device, struct VkSwapchainKHR_T *swapch ++ 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; ++ } +@@ -2089 +2870 @@ static VkResult create_pipeline(VkDevice device, struct VkSwapchainKHR_T *swapch +- pipelineInfo.layout = swapchain->pipeline_layout; ++ pipelineInfo.layout = pipeline->pipeline_layout; +@@ -2093,5 +2874,3 @@ static VkResult create_pipeline(VkDevice device, struct VkSwapchainKHR_T *swapch +- 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; +@@ -2099 +2878,9 @@ static VkResult create_pipeline(VkDevice device, struct VkSwapchainKHR_T *swapch +- return VK_SUCCESS; ++ ERR("vkCreateComputePipelines: %d\n", res); ++ ++fail: ++ destroy_pipeline(device, pipeline); ++ ++out: ++ device->funcs.p_vkDestroyShaderModule(device->device, shaderModule, NULL); ++ ++ return res; +@@ -2131 +2918 @@ static VkResult create_descriptor_set(VkDevice device, struct VkSwapchainKHR_T * +- realDescriptorImageInfo.imageView = hack->blit_view; ++ realDescriptorImageInfo.imageView = swapchain->fsr ? hack->fsr_view : hack->swapchain_view; +@@ -2150,0 +2938,19 @@ static VkResult create_descriptor_set(VkDevice device, struct VkSwapchainKHR_T * ++ 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); ++ } ++ +@@ -2154 +2960 @@ static VkResult create_descriptor_set(VkDevice device, struct VkSwapchainKHR_T * +-static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapchain) ++static VkResult init_compute_state(VkDevice device, struct VkSwapchainKHR_T *swapchain) +@@ -2162,5 +2968 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- VkPipelineLayoutCreateInfo pipelineLayoutInfo = {0}; +- VkPushConstantRange pushConstants; +- VkShaderModuleCreateInfo shaderInfo = {0}; +- VkShaderModule shaderModule = 0; +- VkDeviceSize blitMemTotal = 0, offs; ++ VkDeviceSize fsrMemTotal = 0, offs; +@@ -2169 +2971 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- VkMemoryRequirements_host blitMemReq; ++ VkMemoryRequirements_host fsrMemReq; +@@ -2174 +2976 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- VkMemoryRequirements blitMemReq; ++ VkMemoryRequirements fsrMemReq; +@@ -2179 +2981 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- uint32_t blit_memory_type = -1, i; ++ uint32_t fsr_memory_type = -1, i; +@@ -2184,3 +2986,3 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- 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; +@@ -2214,0 +3017,7 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc ++ if (swapchain->fsr) ++ { ++ poolSizes[0].descriptorCount *= 2; ++ poolSizes[1].descriptorCount *= 2; ++ poolInfo.maxSets *= 2; ++ } ++ +@@ -2243,27 +3052 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- 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); +@@ -2273 +3056,8 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- 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; +@@ -2275,4 +3065,3 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- 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) ++ { +@@ -2283,2 +3072,2 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- 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; +@@ -2291 +3080 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- 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; +@@ -2294 +3083 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- res = device->funcs.p_vkCreateImage(device->device, &imageInfo, NULL, &hack->blit_image); ++ res = device->funcs.p_vkCreateImage(device->device, &imageInfo, NULL, &hack->fsr_image); +@@ -2300 +3089 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- device->funcs.p_vkGetImageMemoryRequirements(device->device, hack->blit_image, &blitMemReq); ++ device->funcs.p_vkGetImageMemoryRequirements(device->device, hack->fsr_image, &fsrMemReq); +@@ -2302 +3091 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- offs = blitMemTotal % blitMemReq.alignment; ++ offs = fsrMemTotal % fsrMemReq.alignment; +@@ -2304 +3093 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- blitMemTotal += blitMemReq.alignment - offs; ++ fsrMemTotal += fsrMemReq.alignment - offs; +@@ -2306 +3095 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- blitMemTotal += blitMemReq.size; ++ fsrMemTotal += fsrMemReq.size; +@@ -2314,2 +3103,2 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- if(blitMemReq.memoryTypeBits & (1 << i)){ +- blit_memory_type = i; ++ if(fsrMemReq.memoryTypeBits & (1 << i)){ ++ fsr_memory_type = i; +@@ -2321 +3110 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- if(blit_memory_type == -1){ ++ if(fsr_memory_type == -1){ +@@ -2328,2 +3117,2 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- allocInfo.allocationSize = blitMemTotal; +- allocInfo.memoryTypeIndex = blit_memory_type; ++ allocInfo.allocationSize = fsrMemTotal; ++ allocInfo.memoryTypeIndex = fsr_memory_type; +@@ -2331 +3120 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- res = device->funcs.p_vkAllocateMemory(device->device, &allocInfo, NULL, &swapchain->blit_image_memory); ++ res = device->funcs.p_vkAllocateMemory(device->device, &allocInfo, NULL, &swapchain->fsr_image_memory); +@@ -2338 +3127 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- blitMemTotal = 0; ++ fsrMemTotal = 0; +@@ -2342 +3131 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- device->funcs.p_vkGetImageMemoryRequirements(device->device, hack->blit_image, &blitMemReq); ++ device->funcs.p_vkGetImageMemoryRequirements(device->device, hack->fsr_image, &fsrMemReq); +@@ -2344 +3133 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- offs = blitMemTotal % blitMemReq.alignment; ++ offs = fsrMemTotal % fsrMemReq.alignment; +@@ -2346 +3135 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- blitMemTotal += blitMemReq.alignment - offs; ++ fsrMemTotal += fsrMemReq.alignment - offs; +@@ -2348 +3137 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- res = device->funcs.p_vkBindImageMemory(device->device, hack->blit_image, swapchain->blit_image_memory, blitMemTotal); ++ res = device->funcs.p_vkBindImageMemory(device->device, hack->fsr_image, swapchain->fsr_image_memory, fsrMemTotal); +@@ -2354 +3143,24 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- blitMemTotal += blitMemReq.size; ++ fsrMemTotal += fsrMemReq.size; ++ } ++ ++ /* 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; ++ } +@@ -2356,2 +3168,2 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- }else +- TRACE("blitting directly to swapchain images\n"); ++ } ++ +@@ -2364 +3176 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- viewInfo.image = hack->blit_image ? hack->blit_image : hack->swapchain_image; ++ viewInfo.image = hack->swapchain_image; +@@ -2366 +3178 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- viewInfo.format = VK_FORMAT_R8G8B8A8_UNORM; ++ viewInfo.format = swapchain->format; +@@ -2373 +3185 @@ static VkResult init_blit_images(VkDevice device, struct VkSwapchainKHR_T *swapc +- res = device->funcs.p_vkCreateImageView(device->device, &viewInfo, NULL, &hack->blit_view); ++ res = device->funcs.p_vkCreateImageView(device->device, &viewInfo, NULL, &hack->swapchain_view); +@@ -2390,2 +3202,2 @@ fail: +- 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; +@@ -2393,3 +3205,2 @@ fail: +- 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; +@@ -2397,4 +3208,3 @@ fail: +- 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; ++ } +@@ -2402,2 +3212,3 @@ fail: +- 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); +@@ -2411,2 +3222,2 @@ fail: +- 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; +@@ -2423 +3234,2 @@ static void destroy_fs_hack_image(VkDevice device, struct VkSwapchainKHR_T *swap +- 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); +@@ -2425 +3237 @@ static void destroy_fs_hack_image(VkDevice device, struct VkSwapchainKHR_T *swap +- device->funcs.p_vkDestroyImage(device->device, hack->blit_image, NULL); ++ device->funcs.p_vkDestroyImage(device->device, hack->fsr_image, NULL); +@@ -2652 +3464 @@ VkResult WINAPI wine_vkCreateSwapchainKHR(VkDevice device, const VkSwapchainCrea +- 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) && +@@ -2677 +3489,3 @@ VkResult WINAPI wine_vkCreateSwapchainKHR(VkDevice device, const VkSwapchainCrea +- 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; +@@ -2709,3 +3523,2 @@ VkResult WINAPI wine_vkCreateSwapchainKHR(VkDevice device, const VkSwapchainCrea +- /* 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); +@@ -2714,0 +3528 @@ VkResult WINAPI wine_vkCreateSwapchainKHR(VkDevice device, const VkSwapchainCrea ++ WINE_VK_REMOVE_HANDLE_MAPPING(device->phys_dev->instance, object); +@@ -2814 +3628 @@ VkResult WINAPI wine_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice +- 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)){ +@@ -2841 +3655 @@ VkResult WINAPI wine_vkGetPhysicalDeviceSurfaceCapabilities2KHR(VkPhysicalDevice +- 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)){ +@@ -3200,2 +4014,3 @@ void WINAPI wine_vkDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain +- 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); +@@ -3206 +4021 @@ void WINAPI wine_vkDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain +- device->funcs.p_vkFreeMemory(device->device, object->blit_image_memory, NULL); ++ device->funcs.p_vkFreeMemory(device->device, object->fsr_image_memory, NULL); +@@ -3282,0 +4098,32 @@ static VkCommandBuffer create_hack_cmd(VkQueue queue, struct VkSwapchainKHR_T *s ++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; ++} ++ ++ +@@ -3285,2 +4131,0 @@ static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swa +- VkResult result; +- VkImageCopy region = {0}; +@@ -3288 +4133 @@ static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swa +- VkImageMemoryBarrier_host barriers[3] = {{0}}; ++ VkImageMemoryBarrier_host barriers[2] = {{0}}; +@@ -3291 +4136 @@ static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swa +- VkImageMemoryBarrier barriers[3] = {{0}}; ++ VkImageMemoryBarrier barriers[2] = {{0}}; +@@ -3294,0 +4140 @@ static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swa ++ VkResult result; +@@ -3298,8 +4144,2 @@ static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swa +-#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]); +@@ -3314 +4153,0 @@ static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swa +- barriers[0].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; +@@ -3317,2 +4155,0 @@ static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swa +- barriers[0].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; +- barriers[0].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; +@@ -3320,5 +4156,0 @@ static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swa +- 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; +@@ -3329,2 +4161 @@ static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swa +- /* transition blit image from whatever to GENERAL */ +- barriers[1].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; ++ /* transition swapchain image from whatever to GENERAL */ +@@ -3333,8 +4164 @@ static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swa +- 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; +@@ -3342 +4166 @@ static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swa +- barriers[1].dstAccessMask = VK_ACCESS_SHADER_WRITE_BIT; ++ barriers[1].dstAccessMask = 0; +@@ -3355,6 +4178,0 @@ static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swa +- 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); +@@ -3368,3 +4186,2 @@ static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swa +- 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); +@@ -3377 +4193,0 @@ static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swa +- barriers[0].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; +@@ -3380,2 +4195,0 @@ static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swa +- barriers[0].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; +- barriers[0].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; +@@ -3383,6 +4197 @@ static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swa +- 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; +@@ -3390,0 +4200,7 @@ static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swa ++ /* 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; ++ +@@ -3398 +4214 @@ static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swa +- 1, barriers ++ 2, barriers +@@ -3401,114 +4216,0 @@ static VkResult record_compute_cmd(VkDevice device, struct VkSwapchainKHR_T *swa +- 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, ®ion); +- +- /* 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 +- ); +- } +@@ -3540,0 +4243,3 @@ static VkResult record_graphics_cmd(VkDevice device, struct VkSwapchainKHR_T *sw ++ init_barrier(&barriers[0]); ++ init_barrier(&barriers[1]); ++ +@@ -3547 +4251,0 @@ static VkResult record_graphics_cmd(VkDevice device, struct VkSwapchainKHR_T *sw +- barriers[0].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; +@@ -3550,2 +4253,0 @@ static VkResult record_graphics_cmd(VkDevice device, struct VkSwapchainKHR_T *sw +- barriers[0].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; +- barriers[0].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; +@@ -3553,5 +4254,0 @@ static VkResult record_graphics_cmd(VkDevice device, struct VkSwapchainKHR_T *sw +- 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; +@@ -3559 +4256 @@ static VkResult record_graphics_cmd(VkDevice device, struct VkSwapchainKHR_T *sw +- barriers[0].dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; ++ barriers[0].dstAccessMask = 0; +@@ -3562 +4258,0 @@ static VkResult record_graphics_cmd(VkDevice device, struct VkSwapchainKHR_T *sw +- barriers[1].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; +@@ -3565,2 +4260,0 @@ static VkResult record_graphics_cmd(VkDevice device, struct VkSwapchainKHR_T *sw +- barriers[1].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; +- barriers[1].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; +@@ -3568,5 +4261,0 @@ static VkResult record_graphics_cmd(VkDevice device, struct VkSwapchainKHR_T *sw +- 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; +@@ -3622 +4310,0 @@ static VkResult record_graphics_cmd(VkDevice device, struct VkSwapchainKHR_T *sw +- barriers[0].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; +@@ -3625,2 +4312,0 @@ static VkResult record_graphics_cmd(VkDevice device, struct VkSwapchainKHR_T *sw +- barriers[0].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; +- barriers[0].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; +@@ -3628,5 +4313,0 @@ static VkResult record_graphics_cmd(VkDevice device, struct VkSwapchainKHR_T *sw +- 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; +@@ -3637 +4317,0 @@ static VkResult record_graphics_cmd(VkDevice device, struct VkSwapchainKHR_T *sw +- barriers[1].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; +@@ -3640,2 +4319,0 @@ static VkResult record_graphics_cmd(VkDevice device, struct VkSwapchainKHR_T *sw +- barriers[1].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; +- barriers[1].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; +@@ -3643,6 +4321 @@ static VkResult record_graphics_cmd(VkDevice device, struct VkSwapchainKHR_T *sw +- 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; +@@ -3669,0 +4343,169 @@ static VkResult record_graphics_cmd(VkDevice device, struct VkSwapchainKHR_T *sw ++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; ++} ++ +@@ -3712,7 +4554,16 @@ VkResult WINAPI wine_vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *pP +- 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; ++ } +diff --git a/dlls/winevulkan/vulkan_private.h b/dlls/winevulkan/vulkan_private.h +index 39c74cc..dcbdc83 100644 +--- a/dlls/winevulkan/vulkan_private.h ++++ b/dlls/winevulkan/vulkan_private.h +@@ -105 +105 @@ struct fs_hack_image +- VkImage blit_image; ++ VkImage fsr_image; +@@ -108,2 +108,9 @@ struct fs_hack_image +- 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; +@@ -123 +130 @@ struct VkSwapchainKHR_T +- VkDeviceMemory user_image_memory, blit_image_memory; ++ VkDeviceMemory user_image_memory, fsr_image_memory; +@@ -130,2 +137,7 @@ struct VkSwapchainKHR_T +- 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; +diff --git a/dlls/winex11.drv/fs.c b/dlls/winex11.drv/fs.c +index f66f291..5c5a634 100644 +--- a/dlls/winex11.drv/fs.c ++++ b/dlls/winex11.drv/fs.c +@@ -537,0 +538,17 @@ BOOL fs_hack_is_integer(void) ++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"); ++ } ++ TRACE("is_fsr: %s", is_fsr ? "TRUE" : "FALSE"); ++ if (is_fsr && sharpness) ++ { ++ *sharpness = 0.0f; /* TODO */ ++ TRACE("sharpness: %2.4f\n", *sharpness); ++ } ++ return is_fsr; ++} ++ +diff --git a/dlls/winex11.drv/vulkan.c b/dlls/winex11.drv/vulkan.c +index 04d7495..4b24932 100644 +--- a/dlls/winex11.drv/vulkan.c ++++ b/dlls/winex11.drv/vulkan.c +@@ -829 +829 @@ static VkBool32 X11DRV_query_fs_hack(VkSurfaceKHR surface, VkExtent2D *real_sz, +- VkRect2D *dst_blit, VkFilter *filter) ++ VkRect2D *dst_blit, VkFilter *filter, BOOL *fsr, float *sharpness) +@@ -879,0 +880,3 @@ static VkBool32 X11DRV_query_fs_hack(VkSurfaceKHR surface, VkExtent2D *real_sz, ++ if (fsr) ++ *fsr = fs_hack_is_fsr(sharpness); ++ +@@ -911,0 +915,3 @@ static VkBool32 X11DRV_query_fs_hack(VkSurfaceKHR surface, VkExtent2D *real_sz, ++ if (fsr) ++ *fsr = fs_hack_is_fsr(sharpness); ++ +diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h +index dc24cf4..5c8947b 100644 +--- a/dlls/winex11.drv/x11drv.h ++++ b/dlls/winex11.drv/x11drv.h +@@ -631,0 +632 @@ extern BOOL fs_hack_is_integer(void) DECLSPEC_HIDDEN; ++extern BOOL fs_hack_is_fsr(float *sharpness) DECLSPEC_HIDDEN; +diff --git a/include/wine/vulkan_driver.h b/include/wine/vulkan_driver.h +index 7bde252..9a4ed86 100644 +--- a/include/wine/vulkan_driver.h ++++ b/include/wine/vulkan_driver.h +@@ -55 +55 @@ struct vulkan_funcs +- VkBool32 (*query_fs_hack)(VkSurfaceKHR surface, VkExtent2D *real_sz, VkExtent2D *user_sz, VkRect2D *dst_blit, VkFilter *filter); ++ VkBool32 (*query_fs_hack)(VkSurfaceKHR surface, VkExtent2D *real_sz, VkExtent2D *user_sz, VkRect2D *dst_blit, VkFilter *filter, BOOL *fsr, float *sharpness); +-- +libgit2 1.1.1 + +From e24d70bc219f45d02a420ae6f2e32aa95a33f5ba Mon Sep 17 00:00:00 2001 +From: Georg Lehmann <dadschoorse@gmail.com> +Date: Sat, 17 Jul 2021 23:23:15 +0200 +Subject: [PATCH] winex11.drv: Env var for sharpness strenght. + +Signed-off-by: Georg Lehmann <dadschoorse@gmail.com> +--- + dlls/winex11.drv/fs.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/dlls/winex11.drv/fs.c b/dlls/winex11.drv/fs.c +index 5c5a634..6a2e004 100644 +--- a/dlls/winex11.drv/fs.c ++++ b/dlls/winex11.drv/fs.c +@@ -540,0 +541 @@ BOOL fs_hack_is_fsr(float *sharpness) ++ int sharpness_int = 2; +@@ -549 +550,4 @@ BOOL fs_hack_is_fsr(float *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; +-- +libgit2 1.1.1 + +From 6ff58e82429607c1e326faf5315f88ffa34eb2c2 Mon Sep 17 00:00:00 2001 +From: Georg Lehmann <dadschoorse@gmail.com> +Date: Sun, 18 Jul 2021 12:32:12 +0200 +Subject: [PATCH] winevulkan: fsr: Fix srgb. + +Signed-off-by: Georg Lehmann <dadschoorse@gmail.com> +--- + dlls/winevulkan/vulkan.c | 41 +++++++++++++++++++++++++++++++++++++---- + 1 file changed, 37 insertions(+), 4 deletions(-) + +diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c +index 905e78d..d747f06 100644 +--- a/dlls/winevulkan/vulkan.c ++++ b/dlls/winevulkan/vulkan.c +@@ -2959,0 +2960,18 @@ static VkResult create_descriptor_set(VkDevice device, struct VkSwapchainKHR_T * ++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); ++} ++ +@@ -3077 +3095 @@ static VkResult init_compute_state(VkDevice device, struct VkSwapchainKHR_T *swa +- imageInfo.format = VK_FORMAT_R8G8B8A8_UNORM; ++ imageInfo.format = VK_FORMAT_A2B10G10R10_UNORM_PACK32; +@@ -3154 +3172 @@ static VkResult init_compute_state(VkDevice device, struct VkSwapchainKHR_T *swa +- viewInfo.format = VK_FORMAT_R8G8B8A8_UNORM; ++ viewInfo.format = VK_FORMAT_A2B10G10R10_UNORM_PACK32; +@@ -3178 +3196 @@ static VkResult init_compute_state(VkDevice device, struct VkSwapchainKHR_T *swa +- viewInfo.format = swapchain->format; ++ viewInfo.format = srgb_to_unorm(swapchain->format); +@@ -3317,0 +3336,7 @@ static VkResult init_fs_hack_images(VkDevice device, struct VkSwapchainKHR_T *sw ++ ++ 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; ++ +@@ -3383 +3408 @@ static VkResult init_fs_hack_images(VkDevice device, struct VkSwapchainKHR_T *sw +- viewInfo.format = createinfo->imageFormat; ++ viewInfo.format = srgb_to_unorm(createinfo->imageFormat); +@@ -3492,0 +3518,3 @@ VkResult WINAPI wine_vkCreateSwapchainKHR(VkDevice device, const VkSwapchainCrea ++ if (object->fsr) ++ native_info.imageFormat = srgb_to_unorm(native_info.imageFormat); ++ +@@ -4557,0 +4586,5 @@ VkResult WINAPI wine_vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *pP ++ else ++ { ++ ERR("Present queue is not a compute queue!\n"); ++ res = VK_ERROR_DEVICE_LOST; ++ } +-- +libgit2 1.1.1 + +From 07ca57aea113aa6c7b20be7bcd3dd2d3c2bdbde2 Mon Sep 17 00:00:00 2001 +From: Georg Lehmann <dadschoorse@gmail.com> +Date: Wed, 21 Jul 2021 22:56:13 +0200 +Subject: [PATCH] winevulkan: Allow forcing a negative mip bias. + +Signed-off-by: Georg Lehmann <dadschoorse@gmail.com> +--- + dlls/winevulkan/make_vulkan | 1 + + dlls/winevulkan/vulkan.c | 41 +++++++++++++++++++++++++++++++++++++++++ + dlls/winevulkan/vulkan_thunks.c | 6 ------ + dlls/winevulkan/vulkan_thunks.h | 1 + + 4 files changed, 43 insertions(+), 6 deletions(-) + +diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan +index 59e49a9..cd3b9af 100755 +--- a/dlls/winevulkan/make_vulkan ++++ b/dlls/winevulkan/make_vulkan +@@ -176,0 +177 @@ FUNCTION_OVERRIDES = { ++ "vkCreateSampler" : {"dispatch": True, "driver" : False, "thunk" : False}, +diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c +index d747f06..c9b2f57 100644 +--- a/dlls/winevulkan/vulkan.c ++++ b/dlls/winevulkan/vulkan.c +@@ -4673,0 +4674,41 @@ VkResult WINAPI wine_vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *pP ++struct wine_vk_sampler_bias ++{ ++ float bias; ++ BOOL aniso_only; ++}; ++ ++static BOOL WINAPI get_mip_bias(INIT_ONCE *once, void *param, void **context) ++{ ++ struct wine_vk_sampler_bias *bias = param; ++ ++ const char *c = getenv("WINE_VULKAN_BIAS_ALL_SAMPLERS"); ++ ++ bias->aniso_only = !(c && strcmp(c, "0")); ++ ++ c = getenv("WINE_VULKAN_NEGATIVE_MIP_BIAS"); ++ if (c) ++ bias->bias = ((float) -atoi(c)) / 100.0f; ++ else ++ bias->bias = 0.0f; ++ ++ return TRUE; ++} ++ ++VkResult WINAPI wine_vkCreateSampler(VkDevice device, const VkSamplerCreateInfo *create_info, const VkAllocationCallbacks *allocator, VkSampler *sampler) ++{ ++ static INIT_ONCE init_once = INIT_ONCE_STATIC_INIT; ++ static struct wine_vk_sampler_bias bias; ++ VkSamplerCreateInfo wine_info; ++ ++ TRACE("%p, %p, %p, %p\n", device, create_info, allocator, sampler); ++ ++ wine_info = *create_info; ++ ++ InitOnceExecuteOnce(&init_once, get_mip_bias, &bias, NULL); ++ ++ if (wine_info.anisotropyEnable || !bias.aniso_only) ++ wine_info.mipLodBias += bias.bias; ++ ++ return device->funcs.p_vkCreateSampler(device->device, &wine_info, NULL, sampler); ++} ++ +diff --git a/dlls/winevulkan/vulkan_thunks.c b/dlls/winevulkan/vulkan_thunks.c +index c9a30a2..84267ac 100644 +--- a/dlls/winevulkan/vulkan_thunks.c ++++ b/dlls/winevulkan/vulkan_thunks.c +@@ -5633,6 +5632,0 @@ static VkResult WINAPI wine_vkCreateRenderPass2KHR(VkDevice device, const VkRend +-VkResult WINAPI wine_vkCreateSampler(VkDevice device, const VkSamplerCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSampler *pSampler) +-{ +- TRACE("%p, %p, %p, %p\n", device, pCreateInfo, pAllocator, pSampler); +- return device->funcs.p_vkCreateSampler(device->device, pCreateInfo, NULL, pSampler); +-} +- +diff --git a/dlls/winevulkan/vulkan_thunks.h b/dlls/winevulkan/vulkan_thunks.h +index 50bf7ee..cd29a1a 100644 +--- a/dlls/winevulkan/vulkan_thunks.h ++++ b/dlls/winevulkan/vulkan_thunks.h +@@ -24,0 +25 @@ VkResult WINAPI wine_vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDev ++VkResult WINAPI wine_vkCreateSampler(VkDevice device, const VkSamplerCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSampler *pSampler); +-- +libgit2 1.1.1 + |