Merge branch 'Htylol-refactoring_v2' into devel

This commit is contained in:
Mikhail Tergoev
2025-09-02 18:55:04 +03:00
2 changed files with 46 additions and 52 deletions

View File

@@ -875,7 +875,7 @@ check_vendor_gpu () {
esac esac
} }
if [[ -n $PW_GPU_USE && $PW_GPU_USE != "disabled" ]] if [[ $PW_GPU_USE != "disabled" ]]
then check_pci_driver "${PW_GPU_USE,,}" then check_pci_driver "${PW_GPU_USE,,}"
elif pw_check_glxinfo elif pw_check_glxinfo
then check_pci_driver "$(<"${PW_TMPFS_PATH}/glxinfo.tmp" tr '[:upper:]' '[:lower:]')" then check_pci_driver "$(<"${PW_TMPFS_PATH}/glxinfo.tmp" tr '[:upper:]' '[:lower:]')"
@@ -2482,7 +2482,8 @@ pw_init_db () {
fi fi
fi fi
case "${PW_AMD_VULKAN_USE}" in [[ -z $PW_AMD_VULKAN_USE ]] && export PW_AMD_VULKAN_USE="disabled"
case "$PW_AMD_VULKAN_USE" in
"amdvlk") "amdvlk")
PW_VK_ICD_FILENAMES="" PW_VK_ICD_FILENAMES=""
for dir in /opt/amdgpu/etc/vulkan/icd.d /etc/vulkan/icd.d /usr/share/vulkan/icd.d; do for dir in /opt/amdgpu/etc/vulkan/icd.d /etc/vulkan/icd.d /usr/share/vulkan/icd.d; do
@@ -2847,17 +2848,16 @@ get_gpu_names () {
pw_check_dxvk () { pw_check_dxvk () {
background_pid --end "pw_check_vulkan" "1" background_pid --end "pw_check_vulkan" "1"
if [[ -z $PW_VULKAN_DRIVER_USE ]] && [[ -f "${PW_TMPFS_PATH}/vulkaninfo.tmp" ]] ; then if [[ -z $PW_VULKAN_DRIVER_USE ]] && [[ -f "${PW_TMPFS_PATH}/vulkaninfo.tmp" ]] ; then
if [[ -z $PW_GPU_USE ]] ; then if [[ $PW_GPU_USE == "disabled" ]] ; then
if [[ -z $GET_GPU_NAMES ]] ; then [[ -z $GET_GPU_NAMES ]] && get_gpu_names
get_gpu_names
fi
IFS='!' read -r -a SELECTED_VULKAN_GPU <<< "$GET_GPU_NAMES" IFS='!' read -r -a SELECTED_VULKAN_GPU <<< "$GET_GPU_NAMES"
else else
IFS='' read -r -a SELECTED_VULKAN_GPU <<< "$PW_GPU_USE" IFS='' read -r -a SELECTED_VULKAN_GPU <<< "$PW_GPU_USE"
fi fi
if [[ -n ${SELECTED_VULKAN_GPU[*]} ]] ; then # оптимизация когда vulkan драйвера в системе нет # Заходим сюда только, когда в системе есть vulkan драйвер
# если используется amdvlk или amdgpupro, то проверка на vulkan драйвер происходит среди них, а не через mesa драйвер if [[ -n ${SELECTED_VULKAN_GPU[*]} ]] ; then
# Если используется amdvlk или amdgpupro, то проверка на vulkan драйвер происходит среди них, а не через mesa драйвер
if [[ $PW_AMD_VULKAN_USE =~ ^(amdvlk|amdgpupro)$ ]] ; then if [[ $PW_AMD_VULKAN_USE =~ ^(amdvlk|amdgpupro)$ ]] ; then
if [[ ${SELECTED_VULKAN_GPU[*],,} =~ radv ]] ; then if [[ ${SELECTED_VULKAN_GPU[*],,} =~ radv ]] ; then
for i in "${!SELECTED_VULKAN_GPU[@]}" ; do for i in "${!SELECTED_VULKAN_GPU[@]}" ; do
@@ -2867,7 +2867,7 @@ pw_check_dxvk () {
done done
fi fi
fi fi
# какие карты в приоритете, если не выбран изначально PW_GPU_USE # Какие карты в приоритете, если не выбран изначально PW_GPU_USE
if [[ -n ${SELECTED_VULKAN_GPU[1]} ]] ; then if [[ -n ${SELECTED_VULKAN_GPU[1]} ]] ; then
for elem in "${SELECTED_VULKAN_GPU[@]}"; do for elem in "${SELECTED_VULKAN_GPU[@]}"; do
case ${elem,,} in case ${elem,,} in
@@ -2887,9 +2887,9 @@ pw_check_dxvk () {
# получаем информацию о конкретном драйвере который выбран в PW_GPU_USE, # получаем информацию о конкретном драйвере который выбран в PW_GPU_USE,
# либо ищем наилучший драйвер с учётом приоритета видеокарт + информация # либо ищем наилучший драйвер с учётом приоритета видеокарт + информация
mapfile -t PW_VULKAN_DRIVER_ARRAY < <(awk '/^GPU[0-9]+/ { mapfile -t PW_VULKAN_DRIVER_ARRAY < <(awk '/^GPU[0-9]+/ {
if (count == 5) { if (count == 7) {
# Выводим собранные значения перед переходом к следующему GPU # Выводим собранные значения перед переходом к следующему GPU
for (i = 1; i <= 5; i++) print values[i] for (i = 1; i <= 7; i++) print values[i]
} }
# Сбрасываем счетчик и массив значений для нового GPU # Сбрасываем счетчик и массив значений для нового GPU
count = 0 count = 0
@@ -2897,8 +2897,8 @@ pw_check_dxvk () {
next next
} }
count < 5 { count < 7 {
if (/apiVersion|driverVersion/) { if (/apiVersion|driverVersion|vendorID|deviceID/) {
values[++count] = $3 values[++count] = $3
} else if (/deviceName|driverName|driverInfo/) { } else if (/deviceName|driverName|driverInfo/) {
split($0, parts, "= ") split($0, parts, "= ")
@@ -2907,55 +2907,60 @@ pw_check_dxvk () {
} }
END { END {
# Выводим значения для последнего GPU, если набралось 5 # Выводим значения для последнего GPU, если набралось 7
if (count == 5) { if (count == 7) {
for (i = 1; i <= 5; i++) print values[i] for (i = 1; i <= 7; i++) print values[i]
} }
}' "${PW_TMPFS_PATH}/vulkaninfo.tmp") }' "${PW_TMPFS_PATH}/vulkaninfo.tmp")
for i in "${SELECTED_VULKAN_GPU[@]}" ; do for i in "${SELECTED_VULKAN_GPU[@]}" ; do
x="0" && y="5" x="0" && y="7"
while true ; do while true ; do
PW_VULKAN_DRIVER_ARRAY_CHECK=("${PW_VULKAN_DRIVER_ARRAY[@]:x:y}") PW_VULKAN_DRIVER_ARRAY_CHECK=("${PW_VULKAN_DRIVER_ARRAY[@]:x:y}")
if [[ -n $PW_AMD_VULKAN_USE && $PW_AMD_VULKAN_USE != "disabled" ]] ; then if [[ $PW_AMD_VULKAN_USE != "disabled" ]] ; then
[[ $PW_AMD_VULKAN_USE == "amdvlk" && ${PW_VULKAN_DRIVER_ARRAY_CHECK[3],,} == *"amd open-source driver"* ]] && break [[ $PW_AMD_VULKAN_USE == "amdvlk" && ${PW_VULKAN_DRIVER_ARRAY_CHECK[5],,} == *"amd open-source driver"* ]] && break
[[ $PW_AMD_VULKAN_USE == "amdgpupro" && ${PW_VULKAN_DRIVER_ARRAY_CHECK[3],,} == *"amd proprietary driver"* ]] && break [[ $PW_AMD_VULKAN_USE == "amdgpupro" && ${PW_VULKAN_DRIVER_ARRAY_CHECK[5],,} == *"amd proprietary driver"* ]] && break
else else
[[ ${PW_VULKAN_DRIVER_ARRAY_CHECK[2]} == "$i" ]] && break [[ ${PW_VULKAN_DRIVER_ARRAY_CHECK[4]} == "$i" ]] && break
fi fi
x=$(( x + 5 )) && y=$(( y + 5 )) x=$(( x + 7 )) && y=$(( y + 7 ))
# фикс, если вдруг PW_GPU_USE изменился или сломался # фикс, если вдруг PW_GPU_USE изменился или сломался
if [[ -z ${PW_VULKAN_DRIVER_ARRAY_CHECK[2]} ]] ; then if [[ -z ${PW_VULKAN_DRIVER_ARRAY_CHECK[4]} ]] ; then
PW_GPU_USE="disabled"
PW_AMD_VULKAN_USE="disabled" PW_AMD_VULKAN_USE="disabled"
edit_db_from_gui PW_AMD_VULKAN_USE edit_db_from_gui PW_AMD_VULKAN_USE
unset PW_GPU_USE
pw_check_dxvk pw_check_dxvk
break break
fi fi
done done
if [[ ${PW_VULKAN_DRIVER_ARRAY_CHECK[5],,} =~ nvidia ]] ; then
if [[ ${PW_VULKAN_DRIVER_ARRAY_CHECK[3],,} =~ nvidia ]] ; then if compare_versions "${PW_VULKAN_DRIVER_ARRAY_CHECK[6]}" "550.54.14" ; then
if compare_versions "${PW_VULKAN_DRIVER_ARRAY_CHECK[4]}" "550.54.14" ; then
PW_VULKAN_DRIVER_USE="6" && break PW_VULKAN_DRIVER_USE="6" && break
fi fi
elif [[ ${PW_VULKAN_DRIVER_ARRAY_CHECK[4],,} =~ mesa ]] ; then elif [[ ${PW_VULKAN_DRIVER_ARRAY_CHECK[6],,} =~ mesa ]] ; then
if compare_versions "${PW_VULKAN_DRIVER_ARRAY_CHECK[1]}" "25.0" ; then if compare_versions "${PW_VULKAN_DRIVER_ARRAY_CHECK[1]}" "25.0" ; then
PW_VULKAN_DRIVER_USE="6" && break PW_VULKAN_DRIVER_USE="6" && break
fi fi
elif [[ ${PW_VULKAN_DRIVER_ARRAY_CHECK[3],,} == *"amd open-source driver"* ]] \ elif [[ ${PW_VULKAN_DRIVER_ARRAY_CHECK[5],,} == *"amd open-source driver"* ]] \
|| [[ ${PW_VULKAN_DRIVER_ARRAY_CHECK[3],,} == *"amd proprietary driver"* ]] ; then || [[ ${PW_VULKAN_DRIVER_ARRAY_CHECK[5],,} == *"amd proprietary driver"* ]] ; then
if compare_versions "${PW_VULKAN_DRIVER_ARRAY_CHECK[1]}" "2.0.310" ; then if compare_versions "${PW_VULKAN_DRIVER_ARRAY_CHECK[1]}" "2.0.310" ; then
PW_VULKAN_DRIVER_USE="6" && break PW_VULKAN_DRIVER_USE="6" && break
fi fi
fi fi
done done
PW_vendorID="$(echo "${PW_VULKAN_DRIVER_ARRAY_CHECK[2]}" | awk -F'0x' '{print $2}')"
PW_deviceID="$(echo "${PW_VULKAN_DRIVER_ARRAY_CHECK[3]}" | awk -F'0x' '{print $2}')"
export PW_vendorID PW_deviceID
# если PW_GPU_USE изначально не было # если PW_GPU_USE изначально не было
if [[ -z $PW_GPU_USE ]] ; then if [[ $PW_GPU_USE == "disabled" ]] ; then
export PW_GPU_USE=${PW_VULKAN_DRIVER_ARRAY_CHECK[2]} export PW_GPU_USE=${PW_VULKAN_DRIVER_ARRAY_CHECK[4]}
edit_user_conf_from_gui PW_GPU_USE edit_user_conf_from_gui PW_GPU_USE
fi fi
fi fi
fi fi
# формируется в зависимости от выбранного PW_GPU_USE и поддержки самого драйвера # формируется в зависимости от выбранного PW_GPU_USE и поддержки самого драйвера
if [[ $PW_VULKAN_DRIVER_USE == "6" ]] || [[ $PW_VULKAN_UNLOCKED == "unlocked" ]] ; then if [[ $PW_VULKAN_DRIVER_USE == "6" ]] || [[ $PW_VULKAN_UNLOCKED == "unlocked" ]] ; then
[[ -z $PW_VULKAN_USE ]] && PW_VULKAN_USE="6" [[ -z $PW_VULKAN_USE ]] && PW_VULKAN_USE="6"
@@ -2966,8 +2971,8 @@ pw_check_dxvk () {
*) PW_DEFAULT_VULKAN_USE="$SORT_NEWEST!$SORT_STABLE!$SORT_SAREK!$SORT_OPENGL" ;; *) PW_DEFAULT_VULKAN_USE="$SORT_NEWEST!$SORT_STABLE!$SORT_SAREK!$SORT_OPENGL" ;;
esac esac
else else
if [[ -z $PW_GPU_USE || $PW_GPU_USE == "disabled" ]] ; then if [[ $PW_GPU_USE == "disabled" ]] ; then
[[ -z $PW_VULKAN_USE ]] && PW_VULKAN_USE="0" PW_VULKAN_USE="0"
PW_DEFAULT_VULKAN_USE="$SORT_OPENGL" PW_DEFAULT_VULKAN_USE="$SORT_OPENGL"
else else
if compare_versions "${PW_VULKAN_DRIVER_ARRAY_CHECK[0]}" "1.3" ; then if compare_versions "${PW_VULKAN_DRIVER_ARRAY_CHECK[0]}" "1.3" ; then
@@ -3798,12 +3803,9 @@ start_portwine () {
[[ "${PW_MANGOHUD_USER_CONF}" == 1 ]] && unset MANGOHUD_CONFIG [[ "${PW_MANGOHUD_USER_CONF}" == 1 ]] && unset MANGOHUD_CONFIG
[[ "${PW_VKBASALT_USER_CONF}" == 1 ]] && unset PW_VKBASALT_EFFECTS PW_VKBASALT_FFX_CAS [[ "${PW_VKBASALT_USER_CONF}" == 1 ]] && unset PW_VKBASALT_EFFECTS PW_VKBASALT_FFX_CAS
if [[ -n $PW_GPU_USE && $PW_GPU_USE != "disabled" ]] \ if [[ $PW_GPU_USE != "disabled" ]] && [[ $PW_AMD_VULKAN_USE == "disabled" ]] ; then
&& [[ -z $PW_AMD_VULKAN_USE || $PW_AMD_VULKAN_USE == "disabled" ]] ; then
export DXVK_FILTER_DEVICE_NAME="$PW_GPU_USE" export DXVK_FILTER_DEVICE_NAME="$PW_GPU_USE"
export VKD3D_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_FORCE_DEFAULT_DEVICE="1"
export MESA_VK_DEVICE_SELECT="$PW_vendorID:$PW_deviceID" export MESA_VK_DEVICE_SELECT="$PW_vendorID:$PW_deviceID"
fi fi
@@ -3831,6 +3833,7 @@ start_portwine () {
else else
export __NV_PRIME_RENDER_OFFLOAD="0" export __NV_PRIME_RENDER_OFFLOAD="0"
export __VK_LAYER_NV_optimus="non_NVIDIA_only" export __VK_LAYER_NV_optimus="non_NVIDIA_only"
unset __GLX_VENDOR_LIBRARY_NAME
fi fi
if check_gamescope_session ; then if check_gamescope_session ; then
@@ -4680,10 +4683,8 @@ fi
if [[ "${PW_GAMESCOPE}" == "1" && "${GAMESCOPE_INSTALLED}" == "1" ]] \ if [[ "${PW_GAMESCOPE}" == "1" && "${GAMESCOPE_INSTALLED}" == "1" ]] \
&& ! check_gamescope_session && ! check_gamescope_session
then then
if [[ "${PW_GPU_USE}" != "disabled" ]] ; then if [[ $PW_GPU_USE != "disabled" ]]
PW_ID_VIDEO=" --prefer-vk-device ${PW_vendorID}:${PW_deviceID}" then PW_ID_VIDEO=" --prefer-vk-device ${PW_vendorID}:${PW_deviceID}"
else
PW_ID_VIDEO=""
fi fi
#checkbox #checkbox
@@ -5737,13 +5738,6 @@ gui_edit_db () {
NUMA_NODE_INDEX="disabled" NUMA_NODE_INDEX="disabled"
fi fi
if [[ -n "${PW_AMD_VULKAN_USE}" ]] && \
[[ "${PW_AMD_VULKAN_USE}" != "disabled" ]] ; then
AMD_VULKAN_VAR="${PW_AMD_VULKAN_USE}"
else
AMD_VULKAN_VAR="disabled"
fi
[[ $AMD_VULKAN_CB == ":LBLH" ]] && translations[Select needed AMD vulkan implementation]="" [[ $AMD_VULKAN_CB == ":LBLH" ]] && translations[Select needed AMD vulkan implementation]=""
if [[ $NUMA_NODE_LIST == "0" ]] ; then if [[ $NUMA_NODE_LIST == "0" ]] ; then
NUDA_CPU_CB=":LBLH" NUDA_CPU_CB=":LBLH"
@@ -5774,7 +5768,7 @@ A brief instruction:
immediate - Unlimited frame rate + tearing. immediate - Unlimited frame rate + tearing.
mailbox - Triple buffering. Unlimited frame rate + no tearing. mailbox - Triple buffering. Unlimited frame rate + no tearing.
relaxed - Same as fifo but allows tearing when below the monitors refresh rate.]} :CB" "$(combobox_fix --disabled "${PW_MESA_VK_WSI_PRESENT_MODE}" "fifo!immediate!mailbox!relaxed")" \ relaxed - Same as fifo but allows tearing when below the monitors refresh rate.]} :CB" "$(combobox_fix --disabled "${PW_MESA_VK_WSI_PRESENT_MODE}" "fifo!immediate!mailbox!relaxed")" \
--field="${translations[Select needed AMD vulkan implementation]}!${translations[Choosing which implementation of vulkan will be used to run the game]} $AMD_VULKAN_CB" "$(combobox_fix --disabled "$AMD_VULKAN_VAR" "$AMD_VULKAN_DRIVER_LIST")" \ --field="${translations[Select needed AMD vulkan implementation]}!${translations[Choosing which implementation of vulkan will be used to run the game]} $AMD_VULKAN_CB" "$(combobox_fix --disabled "$PW_AMD_VULKAN_USE" "$AMD_VULKAN_DRIVER_LIST")" \
--field="${translations[NUMA node for CPU affinity]}!${translations[In multicore systems, CPUs are split into NUMA nodes, each with its own local memory and cores. --field="${translations[NUMA node for CPU affinity]}!${translations[In multicore systems, CPUs are split into NUMA nodes, each with its own local memory and cores.
Binding a game to a single node reduces memoryaccess latency and limits costly coretocore switches.)]} $NUDA_CPU_CB" "$(combobox_fix --disabled "${NUMA_NODE_INDEX}" "${NUMA_NODE_LIST}")" \ Binding a game to a single node reduces memoryaccess latency and limits costly coretocore switches.)]} $NUDA_CPU_CB" "$(combobox_fix --disabled "${NUMA_NODE_INDEX}" "${NUMA_NODE_LIST}")" \
1> "$PW_TMPFS_PATH/tmp_output_yad_fps_limit" 2>/dev/null & 1> "$PW_TMPFS_PATH/tmp_output_yad_fps_limit" 2>/dev/null &
@@ -6619,7 +6613,7 @@ gui_userconf () {
NEW_STEAM_BEHAVIOR="${translations[Enable]}" NEW_STEAM_BEHAVIOR="${translations[Enable]}"
fi fi
if [[ -n $PW_GPU_USE ]] && [[ $PW_GPU_USE != "disabled" ]] ; then if [[ $PW_GPU_USE != "disabled" ]] ; then
GPU_VAR="$PW_GPU_USE" GPU_VAR="$PW_GPU_USE"
elif [[ -n $GET_GPU_NAMES ]] ; then elif [[ -n $GET_GPU_NAMES ]] ; then
GPU_VAR="${GET_GPU_NAMES/!*/}" GPU_VAR="${GET_GPU_NAMES/!*/}"

View File

@@ -312,7 +312,7 @@ if [[ "${SKIP_CHECK_UPDATES}" != 1 ]] ; then
fi fi
if [[ -z $PW_GPU_USE || $PW_GPU_USE == "disabled" ]] ; then if [[ -z $PW_GPU_USE || $PW_GPU_USE == "disabled" ]] ; then
unset PW_GPU_USE PW_GPU_USE="disabled"
pw_check_dxvk pw_check_dxvk
fi fi