From d043905e16c36e5e5b169eff13d31e71a7f36236 Mon Sep 17 00:00:00 2001 From: Htylol Date: Sun, 27 Jul 2025 16:45:45 +0500 Subject: [PATCH] Optimization for devices without vulkan driver --- data_from_portwine/scripts/functions_helper | 193 ++++++++++---------- 1 file changed, 98 insertions(+), 95 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 78d8b1b7..7b2f925b 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -2828,105 +2828,108 @@ pw_check_dxvk () { IFS='' read -r -a SELECTED_VULKAN_GPU <<< "$PW_GPU_USE" fi - # какие карты в приоритете, если не выбран изначально PW_GPU_USE - if [[ -n ${SELECTED_VULKAN_GPU[1]} ]] ; then - for elem in "${SELECTED_VULKAN_GPU[@]}"; do - elem_lower=${elem,,} - if [[ $elem_lower =~ nvidia ]]; then - nvidia_group+=("$elem") - elif [[ $elem_lower =~ radv ]]; then - radv_group+=("$elem") - elif [[ $elem_lower =~ amd ]]; then - amd_group+=("$elem") - elif [[ $elem_lower =~ intel ]]; then - intel_group+=("$elem") - else - other_group+=("$elem") - fi - done - unset SELECTED_VULKAN_GPU - SELECTED_VULKAN_GPU_NEW=( - "${nvidia_group[@]}" - "${radv_group[@]}" - "${amd_group[@]}" - "${intel_group[@]}" - "${other_group[@]}" - ) - fi - - # получаем информацию о конкретном драйвере который выбран в PW_GPU_USE, - # либо ищем наилучший драйвер с учётом приоритета видеокарт + инфа - for i in "${SELECTED_VULKAN_GPU_NEW[@]}" "${SELECTED_VULKAN_GPU[@]}" ; do - PW_CHECK_VULKAN_DRIVER="$(awk -v target="$i" ' - BEGIN { - in_target = 0 - } - /^GPU[0-9]+:/ { - if (in_target) { - in_target = 0 - } - next - } - /apiVersion/ { var1=$0 } - /driverVersion/ { var2=$0 } - /deviceName/ { var3=$0 } - /deviceName/ && !/llvmpipe/ { - split($0, parts, "=") - device_name = parts[2] - gsub(/^[[:space:]]+|[[:space:]]+$/, "", device_name) - if (device_name == target) in_target = 1 - next - } - in_target { - if ($0 ~ /driverName/) { var5=$0 } - if ($0 ~ /driverInfo/) { var4=$0; exit } - } - END { - print var1 "!" var2 "!" var3 "!" var4 "!" var5 "!" - } - ' "${PW_TMPFS_PATH}/vulkaninfo.tmp")" - - IFS='!' read -r -a PW_CHECK_VULKAN_DRIVER_ARRAY <<< "$PW_CHECK_VULKAN_DRIVER" - if [[ ${PW_CHECK_VULKAN_DRIVER_ARRAY[4],,} =~ nvidia ]] ; then - read -r -a PW_CHECK_VULKAN_DRIVER_ARRAY_3 <<< "${PW_CHECK_VULKAN_DRIVER_ARRAY[3]}" - if compare_versions "${PW_CHECK_VULKAN_DRIVER_ARRAY_3[2]}" "550.54.14" ; then - PW_VULKAN_DRIVER_USE="6" && break - fi - elif [[ ${PW_CHECK_VULKAN_DRIVER_ARRAY[3],,} =~ mesa ]] ; then - read -r -a PW_CHECK_VULKAN_DRIVER_ARRAY_1 <<< "${PW_CHECK_VULKAN_DRIVER_ARRAY[1]}" - if compare_versions "${PW_CHECK_VULKAN_DRIVER_ARRAY_1[2]}" "25.0" ; then - PW_VULKAN_DRIVER_USE="6" && break - fi - elif [[ ${PW_CHECK_VULKAN_DRIVER_ARRAY[4],,} == *"amd open-source driver"* ]] ; then - read -r -a PW_CHECK_VULKAN_DRIVER_ARRAY_1 <<< "${PW_CHECK_VULKAN_DRIVER_ARRAY[1]}" - if compare_versions "${PW_CHECK_VULKAN_DRIVER_ARRAY_1[2]}" "2.0.310" ; then - PW_VULKAN_DRIVER_USE="6" && break - fi - fi - done - - # если выбран amdvlk, то глобально без выбора PW_AMD_VULKAN_USE будет работать он - # для тех систем, где к примеру radv не используется, либо в приоритете amdvlk - if [[ ${PW_CHECK_VULKAN_DRIVER_ARRAY[4],,} == *"amd open-source driver"* ]] && [[ -z $PW_AMD_VULKAN_USE || $PW_AMD_VULKAN_USE == "disabled" ]] ; then - PW_VK_ICD_FILENAMES="" - for dir in /opt/amdgpu/etc/vulkan/icd.d /etc/vulkan/icd.d /usr/share/vulkan/icd.d; do - for file in "$dir"/amd_icd*.json; do - [ -f "$file" ] && PW_VK_ICD_FILENAMES="${PW_VK_ICD_FILENAMES:+${PW_VK_ICD_FILENAMES}:}$file" + # оптимизация когда vulkan драйвера в системе нет + if [[ -n ${SELECTED_VULKAN_GPU[@]} ]] ; then + # какие карты в приоритете, если не выбран изначально PW_GPU_USE + if [[ -n ${SELECTED_VULKAN_GPU[1]} ]] ; then + for elem in "${SELECTED_VULKAN_GPU[@]}"; do + elem_lower=${elem,,} + if [[ $elem_lower =~ nvidia ]]; then + nvidia_group+=("$elem") + elif [[ $elem_lower =~ radv ]]; then + radv_group+=("$elem") + elif [[ $elem_lower =~ amd ]]; then + amd_group+=("$elem") + elif [[ $elem_lower =~ intel ]]; then + intel_group+=("$elem") + else + other_group+=("$elem") + fi done + unset SELECTED_VULKAN_GPU + SELECTED_VULKAN_GPU_NEW=( + "${nvidia_group[@]}" + "${radv_group[@]}" + "${amd_group[@]}" + "${intel_group[@]}" + "${other_group[@]}" + ) + fi + + # получаем информацию о конкретном драйвере который выбран в PW_GPU_USE, + # либо ищем наилучший драйвер с учётом приоритета видеокарт + инфа + for i in "${SELECTED_VULKAN_GPU_NEW[@]}" "${SELECTED_VULKAN_GPU[@]}" ; do + PW_CHECK_VULKAN_DRIVER="$(awk -v target="$i" ' + BEGIN { + in_target = 0 + } + /^GPU[0-9]+:/ { + if (in_target) { + in_target = 0 + } + next + } + /apiVersion/ { var1=$0 } + /driverVersion/ { var2=$0 } + /deviceName/ { var3=$0 } + /deviceName/ && !/llvmpipe/ { + split($0, parts, "=") + device_name = parts[2] + gsub(/^[[:space:]]+|[[:space:]]+$/, "", device_name) + if (device_name == target) in_target = 1 + next + } + in_target { + if ($0 ~ /driverName/) { var5=$0 } + if ($0 ~ /driverInfo/) { var4=$0; exit } + } + END { + print var1 "!" var2 "!" var3 "!" var4 "!" var5 "!" + } + ' "${PW_TMPFS_PATH}/vulkaninfo.tmp")" + + IFS='!' read -r -a PW_CHECK_VULKAN_DRIVER_ARRAY <<< "$PW_CHECK_VULKAN_DRIVER" + if [[ ${PW_CHECK_VULKAN_DRIVER_ARRAY[4],,} =~ nvidia ]] ; then + read -r -a PW_CHECK_VULKAN_DRIVER_ARRAY_3 <<< "${PW_CHECK_VULKAN_DRIVER_ARRAY[3]}" + if compare_versions "${PW_CHECK_VULKAN_DRIVER_ARRAY_3[2]}" "550.54.14" ; then + PW_VULKAN_DRIVER_USE="6" && break + fi + elif [[ ${PW_CHECK_VULKAN_DRIVER_ARRAY[3],,} =~ mesa ]] ; then + read -r -a PW_CHECK_VULKAN_DRIVER_ARRAY_1 <<< "${PW_CHECK_VULKAN_DRIVER_ARRAY[1]}" + if compare_versions "${PW_CHECK_VULKAN_DRIVER_ARRAY_1[2]}" "25.0" ; then + PW_VULKAN_DRIVER_USE="6" && break + fi + elif [[ ${PW_CHECK_VULKAN_DRIVER_ARRAY[4],,} == *"amd open-source driver"* ]] ; then + read -r -a PW_CHECK_VULKAN_DRIVER_ARRAY_1 <<< "${PW_CHECK_VULKAN_DRIVER_ARRAY[1]}" + if compare_versions "${PW_CHECK_VULKAN_DRIVER_ARRAY_1[2]}" "2.0.310" ; then + PW_VULKAN_DRIVER_USE="6" && break + fi + fi done - export PW_VK_ICD_FILENAMES - fi - # фикс, если вдруг название PW_GPU_USE изменилось - if [[ -z ${PW_CHECK_VULKAN_DRIVER_ARRAY[4]} ]] && [[ -n $PW_GPU_USE && $PW_GPU_USE != "disabled" ]] ; then - unset PW_GPU_USE - pw_check_dxvk - fi + # если выбран amdvlk, то глобально без выбора PW_AMD_VULKAN_USE будет работать он + # для тех систем, где к примеру radv не используется, либо в приоритете amdvlk + if [[ ${PW_CHECK_VULKAN_DRIVER_ARRAY[4],,} == *"amd open-source driver"* ]] && [[ -z $PW_AMD_VULKAN_USE || $PW_AMD_VULKAN_USE == "disabled" ]] ; then + PW_VK_ICD_FILENAMES="" + for dir in /opt/amdgpu/etc/vulkan/icd.d /etc/vulkan/icd.d /usr/share/vulkan/icd.d; do + for file in "$dir"/amd_icd*.json; do + [ -f "$file" ] && PW_VK_ICD_FILENAMES="${PW_VK_ICD_FILENAMES:+${PW_VK_ICD_FILENAMES}:}$file" + done + done + export PW_VK_ICD_FILENAMES + fi - # если PW_GPU_USE изначально не было - if [[ -z $PW_GPU_USE ]] ; then - export PW_GPU_USE=${PW_CHECK_VULKAN_DRIVER_ARRAY[2]//*= /} - edit_user_conf_from_gui PW_GPU_USE + # фикс, если вдруг название PW_GPU_USE изменилось + if [[ -z ${PW_CHECK_VULKAN_DRIVER_ARRAY[4]} ]] && [[ -n $PW_GPU_USE && $PW_GPU_USE != "disabled" ]] ; then + unset PW_GPU_USE + pw_check_dxvk + fi + + # если PW_GPU_USE изначально не было + if [[ -z $PW_GPU_USE ]] ; then + export PW_GPU_USE=${PW_CHECK_VULKAN_DRIVER_ARRAY[2]//*= /} + edit_user_conf_from_gui PW_GPU_USE + fi fi fi