@@ -718,7 +718,7 @@ var_vkd3d_config_update () {
var_radv_perftest_config_update () {
if echo "$RADV_PERFTEST" | grep "$1"
then return 0
else export RADV_PERFTEST="${1}${RADV_PERFTEST:+; $RADV_PERFTEST}"
else export RADV_PERFTEST="${1}${RADV_PERFTEST:+, $RADV_PERFTEST}"
fi
}
@@ -2800,6 +2800,13 @@ pw_check_vulkan () {
fi
}
pw_check_vulkan_extensions () {
if sed -n "/deviceName \+ = $PW_GPU_USE/,/GPU/p" "${PW_TMPFS_PATH}/vulkaninfo.tmp" | grep -w "$1" &>/dev/null
then return 0
else return 1
fi
}
compare_versions () {
IFS='.' read -ra a1 <<< "$1"
IFS='.' read -ra a2 <<< "$2"
@@ -2870,8 +2877,7 @@ pw_check_dxvk () {
*) other_group+=("$elem") ;;
esac
done
unset SELECTED_VULKAN_GPU
SELECTED_VULKAN_GPU_NEW=(
SELECTED_VULKAN_GPU=(
"${nvidia_group[@]}"
"${amd_group[@]}"
"${intel_group[@]}"
@@ -2880,14 +2886,34 @@ pw_check_dxvk () {
fi
# получаем информацию о конкретном драйвере который выбран в PW_GPU_USE,
# либо ищем наилучший драйвер с учётом приоритета видеокарт + информация
mapfile -t PW_VULKAN_DRIVER_ARRAY < <(awk '
/apiVersion|driverVersion/ { print $3 }
/deviceName|driverName|driverInfo/ {
split($0, parts, "= ")
print parts[2]
mapfile -t PW_VULKAN_DRIVER_ARRAY < <(awk '/^GPU[0-9]+/ {
if (count == 5) {
# Выводим собранные значения перед переходом к следующему GPU
for (i = 1; i <= 5; i++) print values[i]
}
# Сбрасываем счетчик и массив значений для нового GPU
count = 0
delete values
next
}
count < 5 {
if (/apiVersion|driverVersion/) {
values[++count] = $3
} else if (/deviceName|driverName|driverInfo/) {
split($0, parts, "= ")
values[++count] = parts[2]
}
}
END {
# Выводим значения для последнего GPU, если набралось 5
if (count == 5) {
for (i = 1; i <= 5; i++) print values[i]
}
}' "${PW_TMPFS_PATH}/vulkaninfo.tmp")
for i in "${SELECTED_VULKAN_GPU_NEW[@]}" "${SELECTED_VULKAN_GPU [@]}" ; do
for i in "${SELECTED_VULKAN_GPU[@]}" ; do
x="0" && y="5"
while true ; do
PW_VULKAN_DRIVER_ARRAY_CHECK=("${PW_VULKAN_DRIVER_ARRAY[@]:x:y}")
@@ -3727,7 +3753,12 @@ start_portwine () {
if [[ "${PW_USE_RAY_TRACING}" == "1" ]] ; then
var_vkd3d_config_update dxr
var_radv_perftest_config_update rt
if [[ $(check_vendor_gpu) == "amd" ]] ; then
var_radv_perftest_config_update rt
if ! pw_check_vulkan_extensions "VK_KHR_ray_tracing_pipeline" ; then
var_radv_perftest_config_update emulate_rt
fi
fi
else
var_vkd3d_config_update nodxr
fi
@@ -3767,9 +3798,14 @@ start_portwine () {
[[ "${PW_MANGOHUD_USER_CONF}" == 1 ]] && unset MANGOHUD_CONFIG
[[ "${PW_VKBASALT_USER_CONF}" == 1 ]] && unset PW_VKBASALT_EFFECTS PW_VKBASALT_FFX_CAS
if [[ "${ PW_GPU_USE}" != "disabled" ]] && [[ "${PW_AMD_VULKAN_USE}" = = "disabled" ]] ; then
export DXVK_FILTER_DEVICE_NAME="${PW_GPU_USE}"
export VKD3D _FILTER_DEVICE_NAME="${ PW_GPU_USE} "
if [[ -n $ PW_GPU_USE && $PW_GPU_USE ! = "disabled" ]] \
&& [[ -z $PW_AMD_VULKAN_USE || $PW_AMD_VULKAN_USE == "disabled" ]] ; then
export DX VK_FILTER_DEVICE_NAME="$PW_GPU_USE"
export VKD3D_FILTER_DEVICE_NAME="$PW_GPU_USE"
export PW_vendorID="$(grep -B3 "$PW_GPU_USE" "${PW_TMPFS_PATH}/vulkaninfo.tmp" | grep vendorID | sort -u | awk -F'0x' '{print $2}')"
export PW_deviceID="$(grep -B3 "$PW_GPU_USE" "${PW_TMPFS_PATH}/vulkaninfo.tmp" | grep deviceID | sort -u | awk -F'0x' '{print $2}')"
export MESA_VK_DEVICE_SELECT_FORCE_DEFAULT_DEVICE="1"
export MESA_VK_DEVICE_SELECT="$PW_vendorID:$PW_deviceID"
fi
if [[ -f "$PATH_TO_GAME/dxvk.conf" ]] ; then
@@ -3790,9 +3826,11 @@ start_portwine () {
export WEBKIT_DISABLE_DMABUF_RENDERER="1"
#Для того чтобы OpenGL всегда работал через nvidia (если в PW_GPU_USE выбрана nvidia)
export __NV_PRIME_RENDER_OFFLOAD="1"
export __VK_LAYER_NV_optimus="NVIDIA_only"
export __GLX_VENDOR_LIBRARY_NAME="nvidia"
else
export __NV_PRIME_RENDER_OFFLOAD="0"
export __VK_LAYER_NV_optimus="non_NVIDIA_only"
fi
if check_gamescope_session ; then
@@ -4539,9 +4577,8 @@ fi
fi
if check_wayland_session \
&& [[ $PW_USE_NATIVE_WAYLAND == "1" || $PW_USE_DXVK_HDR == "1" ]]
&& [[ $PW_USE_NATIVE_WAYLAND == "1" ]]
then
[[ $PW_USE_DXVK_HDR == "1" ]] && export DXVK_HDR="1"
export WINE_WAYLAND_HACKS="1"
var_winedlloverride_update "winex11.drv=d;winewayland.drv=b"
get_and_set_reg_file --add 'Software\Wine\Drivers' 'Graphics' 'REG_SZ' "x11,wayland" "user"
@@ -4626,7 +4663,7 @@ fi
if [[ $(check_vendor_gpu) == "amd" ]] ; then
export RADV_DEBUG+="nodcc "
export AMD_DEBUG="nodcc"
if [[ ! $(<"${PW_TMPFS_PATH}/vulkaninfo.tmp") =~ VK_EXT_image_drm_format_modifier ]] ; then
if ! pw_check_vulkan_extensions " VK_EXT_image_drm_format_modifier" ; then
export R600_DEBUG="nodcc"
grep -e '--backend' "${PW_TMPFS_PATH}/gamescope.tmp" &>/dev/null && PW_GS_BACKEND_SDL="1"
fi
@@ -4644,8 +4681,6 @@ fi
&& ! check_gamescope_session
then
if [[ "${PW_GPU_USE}" != "disabled" ]] ; then
PW_vendorID="$(grep -B3 "${PW_GPU_USE}" "${PW_TMPFS_PATH}/vulkaninfo.tmp" | grep vendorID | sort -u | awk -F'0x' '{print $2}')"
PW_deviceID="$(grep -B3 "${PW_GPU_USE}" "${PW_TMPFS_PATH}/vulkaninfo.tmp" | grep deviceID | sort -u | awk -F'0x' '{print $2}')"
PW_ID_VIDEO=" --prefer-vk-device ${PW_vendorID}:${PW_deviceID}"
else
PW_ID_VIDEO=""
@@ -4657,14 +4692,8 @@ fi
[[ "${PW_GS_BORDERLESS_WINDOW}" == "1" ]] && PW_GAMESCOPE_ARGS_NEW+=" -b"
[[ "${PW_GS_FORCE_GRAB_CURSOR}" == "1" ]] && PW_GAMESCOPE_ARGS_NEW+=" --force-grab-cursor"
[[ "${PW_GS_FORCE_GRAB_KEYBOARD}" == "1" ]] && PW_GAMESCOPE_ARGS_NEW+=" -g"
if [[ "${PW_GS_HDR_ENABLE}" == "1" ]] ; then
PW_GAMESCOPE_ARGS_NEW+=" --hdr-enabled"
export DXVK_HDR="1"
fi
[[ "${PW_GS_HDR_ENABLE}" == "1" ]] && PW_GAMESCOPE_ARGS_NEW+=" --hdr-enabled"
[[ "${PW_GS_ENABLE_GAMESCOPE_WSI}" == "1" ]] && export ENABLE_GAMESCOPE_WSI="1"
[[ "${PW_GS_HDR_ITM_ENABLE}" == "1" ]] && PW_GAMESCOPE_ARGS_NEW+=" --hdr-itm-enable"
[[ "${PW_GS_SDR_GAMMUT_WIDENESS}" == "1" ]] && PW_GAMESCOPE_ARGS_NEW+=" --sdr-gamut-wideness"
[[ "${PW_GS_FORCE_COMPOSITION}" == "1" ]] && PW_GAMESCOPE_ARGS_NEW+=" --force-composition"
@@ -5559,12 +5588,12 @@ gui_edit_db () {
PW_USE_GAMEMODE PW_USE_D3D_EXTRAS PW_FIX_VIDEO_IN_GAME PW_REDUCE_PULSE_LATENCY PW_USE_US_LAYOUT PW_USE_GSTREAMER
PW_USE_SHADER_CACHE PW_USE_WINE_DXGI PW_USE_EAC_AND_BE PW_USE_SYSTEM_VK_LAYERS PW_USE_OBS_VKCAPTURE
PW_DISABLE_COMPOSITING PW_USE_RUNTIME PW_DINPUT_PROTOCOL PW_USE_GALLIUM_ZINK PW_USE_GALLIUM_NINE
PW_USE_WINED3D_VULKAN PW_USE_SUPPLIED_DXVK_VKD3D PW_USE_NATIVE_WAYLAND PW_USE_DXVK_HDR PW_GAMESCOPE
PW_USE_WINED3D_VULKAN PW_USE_SUPPLIED_DXVK_VKD3D PW_USE_NATIVE_WAYLAND PW_GAMESCOPE
)
if check_wayland_session
then rm_from_array "PW_EDIT_DB_LIST" PW_USE_US_LAYOUT
else rm_from_array "PW_EDIT_DB_LIST" PW_USE_NATIVE_WAYLAND PW_USE_DXVK_HDR
else rm_from_array "PW_EDIT_DB_LIST" PW_USE_NATIVE_WAYLAND
fi
if [[ $PW_WINE_USE =~ (PROTON_LG|WINE_LG) ]] || [[ $PW_VULKAN_USE == "0" ]] ; then
rm_from_array "PW_EDIT_DB_LIST" PW_USE_SUPPLIED_DXVK_VKD3D
@@ -5615,7 +5644,6 @@ gui_edit_db () {
PW_USE_RUNTIME_INFO=${translations[Use container launch mode (It is recommended not to change the value)]}
PW_DINPUT_PROTOCOL_INFO=${translations[Force use DirectInput protocol instead of XInput]}
PW_USE_NATIVE_WAYLAND_INFO=${translations[Enable experemental native Wayland support]}
PW_USE_DXVK_HDR_INFO=${translations[Enable HDR settings in games with native Wayland]}
PW_USE_GALLIUM_ZINK_INFO=${translations[Use Gallium Zink (OpenGL driver is implemented via Vulkan)]}
PW_USE_GALLIUM_NINE_INFO=${translations[Use Gallium Nine (native DirectX 9 for MESA)]}
PW_USE_WINED3D_VULKAN_INFO=${translations[Instead of DXVK, use WineD3D vulkan (Damavand). Experimental function.]}