forked from CastroFidel/PortWINE
Merge branch 'Htylol-refactoring_v2' into devel
This commit is contained in:
@@ -875,7 +875,7 @@ check_vendor_gpu () {
|
||||
esac
|
||||
}
|
||||
|
||||
if [[ -n $PW_GPU_USE && $PW_GPU_USE != "disabled" ]]
|
||||
if [[ $PW_GPU_USE != "disabled" ]]
|
||||
then check_pci_driver "${PW_GPU_USE,,}"
|
||||
elif pw_check_glxinfo
|
||||
then check_pci_driver "$(<"${PW_TMPFS_PATH}/glxinfo.tmp" tr '[:upper:]' '[:lower:]')"
|
||||
@@ -2482,7 +2482,8 @@ pw_init_db () {
|
||||
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")
|
||||
PW_VK_ICD_FILENAMES=""
|
||||
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 () {
|
||||
background_pid --end "pw_check_vulkan" "1"
|
||||
if [[ -z $PW_VULKAN_DRIVER_USE ]] && [[ -f "${PW_TMPFS_PATH}/vulkaninfo.tmp" ]] ; then
|
||||
if [[ -z $PW_GPU_USE ]] ; then
|
||||
if [[ -z $GET_GPU_NAMES ]] ; then
|
||||
get_gpu_names
|
||||
fi
|
||||
if [[ $PW_GPU_USE == "disabled" ]] ; then
|
||||
[[ -z $GET_GPU_NAMES ]] && get_gpu_names
|
||||
IFS='!' read -r -a SELECTED_VULKAN_GPU <<< "$GET_GPU_NAMES"
|
||||
else
|
||||
IFS='' read -r -a SELECTED_VULKAN_GPU <<< "$PW_GPU_USE"
|
||||
fi
|
||||
|
||||
if [[ -n ${SELECTED_VULKAN_GPU[*]} ]] ; then # оптимизация когда vulkan драйвера в системе нет
|
||||
# если используется amdvlk или amdgpupro, то проверка на vulkan драйвер происходит среди них, а не через mesa драйвер
|
||||
# Заходим сюда только, когда в системе есть vulkan драйвер
|
||||
if [[ -n ${SELECTED_VULKAN_GPU[*]} ]] ; then
|
||||
# Если используется amdvlk или amdgpupro, то проверка на vulkan драйвер происходит среди них, а не через mesa драйвер
|
||||
if [[ $PW_AMD_VULKAN_USE =~ ^(amdvlk|amdgpupro)$ ]] ; then
|
||||
if [[ ${SELECTED_VULKAN_GPU[*],,} =~ radv ]] ; then
|
||||
for i in "${!SELECTED_VULKAN_GPU[@]}" ; do
|
||||
@@ -2867,7 +2867,7 @@ pw_check_dxvk () {
|
||||
done
|
||||
fi
|
||||
fi
|
||||
# какие карты в приоритете, если не выбран изначально PW_GPU_USE
|
||||
# Какие карты в приоритете, если не выбран изначально PW_GPU_USE
|
||||
if [[ -n ${SELECTED_VULKAN_GPU[1]} ]] ; then
|
||||
for elem in "${SELECTED_VULKAN_GPU[@]}"; do
|
||||
case ${elem,,} in
|
||||
@@ -2887,9 +2887,9 @@ pw_check_dxvk () {
|
||||
# получаем информацию о конкретном драйвере который выбран в PW_GPU_USE,
|
||||
# либо ищем наилучший драйвер с учётом приоритета видеокарт + информация
|
||||
mapfile -t PW_VULKAN_DRIVER_ARRAY < <(awk '/^GPU[0-9]+/ {
|
||||
if (count == 5) {
|
||||
if (count == 7) {
|
||||
# Выводим собранные значения перед переходом к следующему GPU
|
||||
for (i = 1; i <= 5; i++) print values[i]
|
||||
for (i = 1; i <= 7; i++) print values[i]
|
||||
}
|
||||
# Сбрасываем счетчик и массив значений для нового GPU
|
||||
count = 0
|
||||
@@ -2897,8 +2897,8 @@ pw_check_dxvk () {
|
||||
next
|
||||
}
|
||||
|
||||
count < 5 {
|
||||
if (/apiVersion|driverVersion/) {
|
||||
count < 7 {
|
||||
if (/apiVersion|driverVersion|vendorID|deviceID/) {
|
||||
values[++count] = $3
|
||||
} else if (/deviceName|driverName|driverInfo/) {
|
||||
split($0, parts, "= ")
|
||||
@@ -2907,55 +2907,60 @@ pw_check_dxvk () {
|
||||
}
|
||||
|
||||
END {
|
||||
# Выводим значения для последнего GPU, если набралось 5
|
||||
if (count == 5) {
|
||||
for (i = 1; i <= 5; i++) print values[i]
|
||||
# Выводим значения для последнего GPU, если набралось 7
|
||||
if (count == 7) {
|
||||
for (i = 1; i <= 7; i++) print values[i]
|
||||
}
|
||||
}' "${PW_TMPFS_PATH}/vulkaninfo.tmp")
|
||||
|
||||
for i in "${SELECTED_VULKAN_GPU[@]}" ; do
|
||||
x="0" && y="5"
|
||||
x="0" && y="7"
|
||||
while true ; do
|
||||
PW_VULKAN_DRIVER_ARRAY_CHECK=("${PW_VULKAN_DRIVER_ARRAY[@]:x:y}")
|
||||
if [[ -n $PW_AMD_VULKAN_USE && $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 == "amdgpupro" && ${PW_VULKAN_DRIVER_ARRAY_CHECK[3],,} == *"amd proprietary driver"* ]] && break
|
||||
if [[ $PW_AMD_VULKAN_USE != "disabled" ]] ; then
|
||||
[[ $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[5],,} == *"amd proprietary driver"* ]] && break
|
||||
else
|
||||
[[ ${PW_VULKAN_DRIVER_ARRAY_CHECK[2]} == "$i" ]] && break
|
||||
[[ ${PW_VULKAN_DRIVER_ARRAY_CHECK[4]} == "$i" ]] && break
|
||||
fi
|
||||
x=$(( x + 5 )) && y=$(( y + 5 ))
|
||||
x=$(( x + 7 )) && y=$(( y + 7 ))
|
||||
# фикс, если вдруг 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"
|
||||
edit_db_from_gui PW_AMD_VULKAN_USE
|
||||
unset PW_GPU_USE
|
||||
pw_check_dxvk
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ ${PW_VULKAN_DRIVER_ARRAY_CHECK[3],,} =~ nvidia ]] ; then
|
||||
if compare_versions "${PW_VULKAN_DRIVER_ARRAY_CHECK[4]}" "550.54.14" ; then
|
||||
if [[ ${PW_VULKAN_DRIVER_ARRAY_CHECK[5],,} =~ nvidia ]] ; then
|
||||
if compare_versions "${PW_VULKAN_DRIVER_ARRAY_CHECK[6]}" "550.54.14" ; then
|
||||
PW_VULKAN_DRIVER_USE="6" && break
|
||||
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
|
||||
PW_VULKAN_DRIVER_USE="6" && break
|
||||
fi
|
||||
elif [[ ${PW_VULKAN_DRIVER_ARRAY_CHECK[3],,} == *"amd open-source driver"* ]] \
|
||||
|| [[ ${PW_VULKAN_DRIVER_ARRAY_CHECK[3],,} == *"amd proprietary driver"* ]] ; then
|
||||
elif [[ ${PW_VULKAN_DRIVER_ARRAY_CHECK[5],,} == *"amd open-source driver"* ]] \
|
||||
|| [[ ${PW_VULKAN_DRIVER_ARRAY_CHECK[5],,} == *"amd proprietary driver"* ]] ; then
|
||||
if compare_versions "${PW_VULKAN_DRIVER_ARRAY_CHECK[1]}" "2.0.310" ; then
|
||||
PW_VULKAN_DRIVER_USE="6" && break
|
||||
fi
|
||||
fi
|
||||
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 изначально не было
|
||||
if [[ -z $PW_GPU_USE ]] ; then
|
||||
export PW_GPU_USE=${PW_VULKAN_DRIVER_ARRAY_CHECK[2]}
|
||||
if [[ $PW_GPU_USE == "disabled" ]] ; then
|
||||
export PW_GPU_USE=${PW_VULKAN_DRIVER_ARRAY_CHECK[4]}
|
||||
edit_user_conf_from_gui PW_GPU_USE
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# формируется в зависимости от выбранного PW_GPU_USE и поддержки самого драйвера
|
||||
if [[ $PW_VULKAN_DRIVER_USE == "6" ]] || [[ $PW_VULKAN_UNLOCKED == "unlocked" ]] ; then
|
||||
[[ -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" ;;
|
||||
esac
|
||||
else
|
||||
if [[ -z $PW_GPU_USE || $PW_GPU_USE == "disabled" ]] ; then
|
||||
[[ -z $PW_VULKAN_USE ]] && PW_VULKAN_USE="0"
|
||||
if [[ $PW_GPU_USE == "disabled" ]] ; then
|
||||
PW_VULKAN_USE="0"
|
||||
PW_DEFAULT_VULKAN_USE="$SORT_OPENGL"
|
||||
else
|
||||
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_VKBASALT_USER_CONF}" == 1 ]] && unset PW_VKBASALT_EFFECTS PW_VKBASALT_FFX_CAS
|
||||
|
||||
if [[ -n $PW_GPU_USE && $PW_GPU_USE != "disabled" ]] \
|
||||
&& [[ -z $PW_AMD_VULKAN_USE || $PW_AMD_VULKAN_USE == "disabled" ]] ; then
|
||||
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"
|
||||
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
|
||||
@@ -3831,6 +3833,7 @@ start_portwine () {
|
||||
else
|
||||
export __NV_PRIME_RENDER_OFFLOAD="0"
|
||||
export __VK_LAYER_NV_optimus="non_NVIDIA_only"
|
||||
unset __GLX_VENDOR_LIBRARY_NAME
|
||||
fi
|
||||
|
||||
if check_gamescope_session ; then
|
||||
@@ -4680,10 +4683,8 @@ fi
|
||||
if [[ "${PW_GAMESCOPE}" == "1" && "${GAMESCOPE_INSTALLED}" == "1" ]] \
|
||||
&& ! check_gamescope_session
|
||||
then
|
||||
if [[ "${PW_GPU_USE}" != "disabled" ]] ; then
|
||||
PW_ID_VIDEO=" --prefer-vk-device ${PW_vendorID}:${PW_deviceID}"
|
||||
else
|
||||
PW_ID_VIDEO=""
|
||||
if [[ $PW_GPU_USE != "disabled" ]]
|
||||
then PW_ID_VIDEO=" --prefer-vk-device ${PW_vendorID}:${PW_deviceID}"
|
||||
fi
|
||||
|
||||
#checkbox
|
||||
@@ -5737,13 +5738,6 @@ gui_edit_db () {
|
||||
NUMA_NODE_INDEX="disabled"
|
||||
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]=""
|
||||
if [[ $NUMA_NODE_LIST == "0" ]] ; then
|
||||
NUDA_CPU_CB=":LBLH"
|
||||
@@ -5774,7 +5768,7 @@ A brief instruction:
|
||||
immediate - Unlimited frame rate + 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")" \
|
||||
--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 multi‑core systems, CPUs are split into NUMA nodes, each with its own local memory and cores.
|
||||
Binding a game to a single node reduces memory‑access latency and limits costly core‑to‑core 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 &
|
||||
@@ -6619,7 +6613,7 @@ gui_userconf () {
|
||||
NEW_STEAM_BEHAVIOR="${translations[Enable]}"
|
||||
fi
|
||||
|
||||
if [[ -n $PW_GPU_USE ]] && [[ $PW_GPU_USE != "disabled" ]] ; then
|
||||
if [[ $PW_GPU_USE != "disabled" ]] ; then
|
||||
GPU_VAR="$PW_GPU_USE"
|
||||
elif [[ -n $GET_GPU_NAMES ]] ; then
|
||||
GPU_VAR="${GET_GPU_NAMES/!*/}"
|
||||
|
@@ -312,7 +312,7 @@ if [[ "${SKIP_CHECK_UPDATES}" != 1 ]] ; then
|
||||
fi
|
||||
|
||||
if [[ -z $PW_GPU_USE || $PW_GPU_USE == "disabled" ]] ; then
|
||||
unset PW_GPU_USE
|
||||
PW_GPU_USE="disabled"
|
||||
pw_check_dxvk
|
||||
fi
|
||||
|
||||
|
Reference in New Issue
Block a user