diff --git a/README.md b/README.md index 153a1004..a07c68b3 100644 --- a/README.md +++ b/README.md @@ -9,26 +9,17 @@ The most recent development builds can be found [here](https://github.com/doitsu Release builds can be found [here](https://github.com/doitsujin/dxvk/releases). ## How to use -In order to install a DXVK package obtained from the [release](https://github.com/doitsujin/dxvk/releases) page into a given wine prefix, run the following commands from within the DXVK directory: - +In order to install a DXVK package obtained from the [release](https://github.com/doitsujin/dxvk/releases) page into a given wine prefix, copy or symlink the DLLs into the following directories as follows, then open `winecfg` and manually add DLL overrides for `d3d11`, `d3d10core`, `dxgi`, and `d3d9`: ``` -export WINEPREFIX=/path/to/.wine-prefix -./setup_dxvk.sh install +WINEPREFIX=/path/to/wineprefix +cp x64/*.dll $WINEPREFIX/drive_c/system32 +cp x32/*.dll $WINEPREFIX/drive_c/syswow64 +winecfg ``` -This will **copy** the DLLs into the `system32` and `syswow64` directories of your wine prefix and set up the required DLL overrides. Pure 32-bit prefixes are also supported. - -The setup script optionally takes the following arguments: -- `--symlink`: Create symbolic links to the DLL files instead of copying them. This is especially useful for development. -- `--without-dxgi`: Do not install DXVK's DXGI implementation and use the one provided by wine instead. - Verify that your application uses DXVK instead of wined3d by checking for the presence of the log file `d3d9.log` or `d3d11.log` in the application's directory, or by enabling the HUD (see notes below). -In order to remove DXVK from a prefix, run the following command: -``` -export WINEPREFIX=/path/to/.wine-prefix -./setup_dxvk.sh uninstall -``` +In order to remove DXVK from a prefix, remove the DLLs and DLL overrides, and run `wineboot -u` to restore the original DLL files. ## Build instructions diff --git a/setup_dxvk.sh b/setup_dxvk.sh deleted file mode 100755 index 0f1998f3..00000000 --- a/setup_dxvk.sh +++ /dev/null @@ -1,206 +0,0 @@ -#!/usr/bin/env 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