From 0a56a282bb0d839eef7834752bea8c58bb03eca494359dba0085043c46b05135 Mon Sep 17 00:00:00 2001 From: Marcus Meissner Date: Mon, 15 May 2023 11:37:33 +0000 Subject: [PATCH] Accepting request 1085932 from home:Thaodan:branches:Emulators:Wine - Keep setup_dxvk.sh script that was deleted by upstream. For more context see: https://github.com/doitsujin/dxvk/commit/64cb1ad208f80b11400eef779e99fec223754098 - Update to 2.1 * HDR support On systems supporting HDR10 color spaces, HDR can now be enabled by setting the environment variable DXVK_HDR=1, or by setting the option dxgi.enableHDR = True in the configuration file. When using vkd3d-proton 2.8 or newer, this will allow D3D12 games to detect and use the HDR10 color space if they support it. No major Linux desktop environment currently supports HDR. In order to use this on Linux, a Gamescope session with --hdr-enabled is required. This is currently only supported under AMDGPU and requires kernel patches from the josh-hdr-colorimetry branch. * Shader compilation improvements Use of pipeline libraries was extended to pipelines with tessellation or geometry shaders in order to further reduce stutter. Additionally, more features of the VK_EXT_extended_dynamic_state3 extension are leveraged to reduce stutter in some situations when MSAA is used, provided that the Vulkan driver supports them. * Sample rate shading For older games that support MSAA, the d3d9.forceSampleRateShading and d3d11.forceSampleRateShading options were added to let users enable sample rate shading for all shaders. This will have a very high impact on GPU-bound performance, but may increase overall image quality in certain games that suffer from specular aliasing or shimmering alpha-tested geometry. * Improved D3D11 command submission logic in order to make overall performance more consistent, and to bring DXVK's behaviour more in line with native D3D11 drivers. * Fixed D3D11 reference counting issues around 2D textures. (#3169) * Fixed Vulkan validation errors when creating DXGI_FORMAT_A8_UNORM UAVs. Note that UAVs of this format may not work as expected. * Fixed Vulkan validation errors that would occur when allocating dedicated image memory on Nvidia GPUs in some situations. * Fixed Vulkan validation errors caused by broken timeline semaphores on 32-bit Proton. * Worked around an issue with the Uplay overlay being stuck on screen. (#3146) * Worked around a bug in AMD's Windows driver as well as AMDVLK that would cause numerous games to crash since DXVK 2.0. (#3172) * Fewer threads will be used to perform background optimization of graphics pipeines. This may result in a smoother gameplay experience on some systems. * Ashes of the Singularity: Fixed performance regression caused by suboptimal descriptor set allocation. * Battlefield: Bad Company 2: Fixed flickering (#3078, PR #3079) * Cardfight!! Vanguard: Fixed rendering (PR #3068). * Gujian 3: Fixed rendering issues on some GPUs. (#1784) * Resident Evil 4 HD: Fixed invalid Vulkan usage causing a GPU hang on RADV. (PR #3089) * Saints Row: The Third: Fixed a severe performance issue with rain when using the D3D9 renderer. (#2473, PR #3158) * Sekiro: Shadows Die Twice: Fixed stuttering issues on Nvidia GPUs. (#3179) * Sonic Frontiers: Worked around a game bug that would cause shadows to flicker when GPU-bound. * Supreme Commander: Forged Alliance: Fixed a crash after loading (#3058, PR #3060) * Note: Due to changes to our DXGI implementation, older versions of vkd3d-proton (prior to 2.8) will no longer work with this version of DXVK. I tried to cut down the changelog as much as possible to cover only the relevant sections. OBS-URL: https://build.opensuse.org/request/show/1085932 OBS-URL: https://build.opensuse.org/package/show/Emulators:Wine/dxvk?expand=0&rev=36 --- dxvk-2.0.tar.gz | 3 - dxvk-2.1.tar.gz | 3 + dxvk.changes | 57 ++++++++++++++ dxvk.spec | 5 +- setup_dxvk.sh | 206 ++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 269 insertions(+), 5 deletions(-) delete mode 100644 dxvk-2.0.tar.gz create mode 100644 dxvk-2.1.tar.gz create mode 100644 setup_dxvk.sh diff --git a/dxvk-2.0.tar.gz b/dxvk-2.0.tar.gz deleted file mode 100644 index 115332e..0000000 --- a/dxvk-2.0.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e1877b9418d1e570a75ad0ca048ac766c67ca4376ba5dab26536d3759b58830c -size 3687917 diff --git a/dxvk-2.1.tar.gz b/dxvk-2.1.tar.gz new file mode 100644 index 0000000..ec4e65a --- /dev/null +++ b/dxvk-2.1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f04eca4c436fc795ed28ddb368d388e18d7b0b531885129bed363558eaae6dd +size 3802130 diff --git a/dxvk.changes b/dxvk.changes index d3eab39..5659862 100644 --- a/dxvk.changes +++ b/dxvk.changes @@ -1,3 +1,60 @@ +------------------------------------------------------------------- +Fri May 5 22:16:37 UTC 2023 - Björn Bidar + +- Keep setup_dxvk.sh script that was deleted by upstream. + For more context see: + https://github.com/doitsujin/dxvk/commit/64cb1ad208f80b11400eef779e99fec223754098 +- Update to 2.1 + * HDR support + On systems supporting HDR10 color spaces, HDR can now be + enabled by setting the environment variable DXVK_HDR=1, + or by setting the option dxgi.enableHDR = True in the configuration + file. When using vkd3d-proton 2.8 or newer, this will allow D3D12 + games to detect and use the HDR10 color space if they support it. + + No major Linux desktop environment currently supports HDR. In order + to use this on Linux, a Gamescope session with --hdr-enabled is required. + This is currently only supported under AMDGPU and requires kernel patches + from the josh-hdr-colorimetry branch. + + * Shader compilation improvements + Use of pipeline libraries was extended to pipelines with tessellation or + geometry shaders in order to further reduce stutter. Additionally, more features + of the VK_EXT_extended_dynamic_state3 extension are leveraged to reduce stutter + in some situations when MSAA is used, provided that the Vulkan driver supports them. + + * Sample rate shading + For older games that support MSAA, the d3d9.forceSampleRateShading and + d3d11.forceSampleRateShading options were added to let users enable + sample rate shading for all shaders. This will have a very high + impact on GPU-bound performance, but may increase overall image quality + in certain games that suffer from specular aliasing or shimmering alpha-tested geometry. + * Improved D3D11 command submission logic in order to make overall performance more consistent, + and to bring DXVK's behaviour more in line with native D3D11 drivers. + * Fixed D3D11 reference counting issues around 2D textures. (#3169) + * Fixed Vulkan validation errors when creating DXGI_FORMAT_A8_UNORM UAVs. + Note that UAVs of this format may not work as expected. + * Fixed Vulkan validation errors that would occur when allocating dedicated image memory + on Nvidia GPUs in some situations. + * Fixed Vulkan validation errors caused by broken timeline semaphores on 32-bit Proton. + * Worked around an issue with the Uplay overlay being stuck on screen. (#3146) + * Worked around a bug in AMD's Windows driver as well as AMDVLK that would + cause numerous games to crash since DXVK 2.0. (#3172) + * Fewer threads will be used to perform background optimization of graphics pipeines. + This may result in a smoother gameplay experience on some systems. + * Ashes of the Singularity: Fixed performance regression caused by suboptimal descriptor set allocation. + * Battlefield: Bad Company 2: Fixed flickering (#3078, PR #3079) + * Cardfight!! Vanguard: Fixed rendering (PR #3068). + * Gujian 3: Fixed rendering issues on some GPUs. (#1784) + * Resident Evil 4 HD: Fixed invalid Vulkan usage causing a GPU hang on RADV. (PR #3089) + * Saints Row: The Third: Fixed a severe performance issue with rain when using the D3D9 renderer. + (#2473, PR #3158) + * Sekiro: Shadows Die Twice: Fixed stuttering issues on Nvidia GPUs. (#3179) + * Sonic Frontiers: Worked around a game bug that would cause shadows to flicker when GPU-bound. + * Supreme Commander: Forged Alliance: Fixed a crash after loading (#3058, PR #3060) + * Note: Due to changes to our DXGI implementation, older versions of vkd3d-proton (prior to 2.8) + will no longer work with this version of DXVK. + ------------------------------------------------------------------- Fri May 5 12:55:46 UTC 2023 - Björn Bidar diff --git a/dxvk.spec b/dxvk.spec index 6d64756..a29b101 100644 --- a/dxvk.spec +++ b/dxvk.spec @@ -17,7 +17,7 @@ Name: dxvk -Version: 2.0 +Version: 2.1 Release: 0 Summary: Vulkan-based D3D11 implementation for Linux / Wine License: zlib-acknowledgement @@ -25,6 +25,7 @@ Group: System/Emulators/PC URL: https://github.com/doitsujin/dxvk Source0: %{name}-%{version}.tar.gz Source1: baselibs.conf +Source2: setup_dxvk.sh BuildRequires: gcc BuildRequires: gcc-c++ @@ -82,7 +83,7 @@ mkdir -p %{buildroot}%{_bindir} %{buildroot}%{_libexecdir}/%{name}/bin sed \ -e 's|basedir=.*|basedir="%{_libexecdir}/%{name}"|g' \ -e 's|x32|lib|g' -e 's|x64|lib64|g' \ - setup_dxvk.sh > %{buildroot}%{_libexecdir}/%{name}/bin/setup_dxvk.sh + %{SOURCE2}> %{buildroot}%{_libexecdir}/%{name}/bin/setup_dxvk.sh ln -s %{_libexecdir}/%{name}/bin/setup_dxvk.sh %{buildroot}%{_bindir}/wine%{name} #install dxvk proper diff --git a/setup_dxvk.sh b/setup_dxvk.sh new file mode 100644 index 0000000..aa30bc8 --- /dev/null +++ b/setup_dxvk.sh @@ -0,0 +1,206 @@ +#!/bin/bash + +# default directories +dxvk_lib32=${dxvk_lib32:-"x32"} +dxvk_lib64=${dxvk_lib64:-"x64"} + +# figure out where we are +basedir="$(dirname "$(readlink -f "$0")")" + +# figure out which action to perform +action="$1" + +case "$action" in +install) + ;; +uninstall) + ;; +*) + echo "Unrecognized action: $action" + echo "Usage: $0 [install|uninstall] [--without-dxgi] [--symlink]" + exit 1 +esac + +# process arguments +shift + +with_dxgi=true +file_cmd="cp -v --reflink=auto" + +while (($# > 0)); do + case "$1" in + "--without-dxgi") + with_dxgi=false + ;; + "--symlink") + file_cmd="ln -s -v" + ;; + esac + shift +done + +# check wine prefix before invoking wine, so that we +# don't accidentally create one if the user screws up +if [ -n "$WINEPREFIX" ] && ! [ -f "$WINEPREFIX/system.reg" ]; then + echo "$WINEPREFIX:"' Not a valid wine prefix.' >&2 + exit 1 +fi + +# find wine executable +export WINEDEBUG=-all +# disable mscoree and mshtml to avoid downloading +# wine gecko and mono +export WINEDLLOVERRIDES="mscoree,mshtml=" + +wine="wine" +wine64="wine64" +wineboot="wineboot" + +# $PATH is the way for user to control where wine is located (including custom Wine versions). +# Pure 64-bit Wine (non Wow64) requries skipping 32-bit steps. +# In such case, wine64 and winebooot will be present, but wine binary will be missing, +# however it can be present in other PATHs, so it shouldn't be used, to avoid versions mixing. +wine_path=$(dirname "$(which $wineboot)") +wow64=true +if ! [ -f "$wine_path/$wine" ]; then + wine=$wine64 + wow64=false +fi + +# resolve 32-bit and 64-bit system32 path +winever=$($wine --version | grep wine) +if [ -z "$winever" ]; then + echo "$wine:"' Not a wine executable. Check your $wine.' >&2 + exit 1 +fi + +# ensure wine placeholder dlls are recreated +# if they are missing +$wineboot -u + +win64_sys_path=$($wine64 winepath -u 'C:\windows\system32' 2> /dev/null) +win64_sys_path="${win64_sys_path/$'\r'/}" +if $wow64; then + win32_sys_path=$($wine winepath -u 'C:\windows\system32' 2> /dev/null) + win32_sys_path="${win32_sys_path/$'\r'/}" +fi + +if [ -z "$win32_sys_path" ] && [ -z "$win64_sys_path" ]; then + echo 'Failed to resolve C:\windows\system32.' >&2 + exit 1 +fi + +# create native dll override +overrideDll() { + $wine reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v $1 /d native /f >/dev/null 2>&1 + if [ $? -ne 0 ]; then + echo -e "Failed to add override for $1" + exit 1 + fi +} + +# remove dll override +restoreDll() { + $wine reg delete 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v $1 /f > /dev/null 2>&1 + if [ $? -ne 0 ]; then + echo "Failed to remove override for $1" + fi +} + +# copy or link dxvk dll, back up original file +installFile() { + dstfile="${1}/${3}.dll" + srcfile="${basedir}/${2}/${3}.dll" + + if [ -f "${srcfile}.so" ]; then + srcfile="${srcfile}.so" + fi + + if ! [ -f "${srcfile}" ]; then + echo "${srcfile}: File not found. Skipping." >&2 + return 1 + fi + + if [ -n "$1" ]; then + if [ -f "${dstfile}" ] || [ -h "${dstfile}" ]; then + if ! [ -f "${dstfile}.old" ]; then + mv -v "${dstfile}" "${dstfile}.old" + else + rm -v "${dstfile}" + fi + $file_cmd "${srcfile}" "${dstfile}" + else + echo "${dstfile}: File not found in wine prefix" >&2 + return 1 + fi + fi + return 0 +} + +# remove dxvk dll, restore original file +uninstallFile() { + dstfile="${1}/${3}.dll" + srcfile="${basedir}/${2}/${3}.dll" + + if [ -f "${srcfile}.so" ]; then + srcfile="${srcfile}.so" + fi + + if ! [ -f "${srcfile}" ]; then + echo "${srcfile}: File not found. Skipping." >&2 + return 1 + fi + + if ! [ -f "${dstfile}" ] && ! [ -h "${dstfile}" ]; then + echo "${dstfile}: File not found. Skipping." >&2 + return 1 + fi + + if [ -f "${dstfile}.old" ]; then + rm -v "${dstfile}" + mv -v "${dstfile}.old" "${dstfile}" + return 0 + else + return 1 + fi +} + +install() { + installFile "$win64_sys_path" "$dxvk_lib64" "$1" + inst64_ret="$?" + + inst32_ret=-1 + if $wow64; then + installFile "$win32_sys_path" "$dxvk_lib32" "$1" + inst32_ret="$?" + fi + + if (( ($inst32_ret == 0) || ($inst64_ret == 0) )); then + overrideDll "$1" + fi +} + +uninstall() { + uninstallFile "$win64_sys_path" "$dxvk_lib64" "$1" + uninst64_ret="$?" + + uninst32_ret=-1 + if $wow64; then + uninstallFile "$win32_sys_path" "$dxvk_lib32" "$1" + uninst32_ret="$?" + fi + + if (( ($uninst32_ret == 0) || ($uninst64_ret == 0) )); then + restoreDll "$1" + fi +} + +# skip dxgi during install if not explicitly +# enabled, but always try to uninstall it +if $with_dxgi || [ "$action" == "uninstall" ]; then + $action dxgi +fi + +$action d3d9 +$action d3d10core +$action d3d11