В прошлый раз был подготовлен первый набор разработки и положено начало нового проекта под названием ChimbaBenchXPL.
Теперь есть проект в начальной стадии разработки, но нет ничего, что могло бы конкретно и точно описать сам проект и что от него требуется. Эту проблему нужно решать.
Первым делом я хочу совместимость с Windows XP. Эту задачу успешно решили ещё до того, как был создан проект. Именно потому и была выбрана старая версия движка, под которую невозможно писать код, используя нейронные сети, ибо они сильно галлюцинируют и не способны правильно написать даже две строчки простейшего кода.
Но так дело не пойдёт. Нужно бы расписать по пунктам мои требования к проекту. Сначала займёмся системными требованиями.
- Совместимость с Windows XP и выше.
- Совместимость с Debian 8 и выше.
- Работа с видеокартами, поддерживающими OpenGL 2.1 и новее.
- Работа со старыми процессорами.
Первый и второй пункт сразу можно вписывать в системные требования. Третий пункт подразумевает видеокарты, начиная с GeForce 6 серии (2004 год) и Radeon HD 2000 серии (2007 год). Теоретически нужную версию OpenGL поддерживают и Radeon X800-X1000 серии, но фактически там поддержка только для галочки. Слишком уж низкого качества драйверы видеокарт у компании AMD.
А вот с четвёртым пунктом нужно провести дополнительные тесты. Поискав по сусекам, была найдена системная плата ASRock K8NF6G-VSTA со встроенной графикой GeForce 6100 и процессором Sempron 2800+ Socket 754. Это просто идеальный тестовый набор, только HDD всего на четыре целых три десятых гигабайта. Там уже была установлена Windows XP, но её придётся переустановить. Ну а ещё потанцевал с настройками USB, потому что не любая клавиатура работала правильно с системной платой.
Это тот момент, когда флешка на 4 гигабайта не сильно меньше полноценного жёсткого диска.
Дальше — установка драйверов. По вине костыля под названием Файл подкачки установка драйвера видеокарты едва не оборвалась. Очень неприятно было бы, если бы не хватило места на диске по вине подкачки. Для видеокарты GeForce 6100 был установлен последний драйвер NVIDIA 307.83.
GeForce 6100 поддерживает OpenGL 2.1 (209 расширений). У видеокарты Radeon X800 GTO тоже формально поддерживается OpenGL 2.1 (111 расширений). Но у NVIDIA поддержка настоящая, когда у AMD кривая и неполноценная. Именно потому в системных требованиях будет числиться AMD Radeon не ниже HD 2000 серии, хотя от NVIDIA в эти времена уже были GeForce 8000.
При этом важно отметить, что поддержка OpenGL 2.1 есть даже у GeForce FX 5000, но там часть функций реализована при помощи драйвера через ЦП. Я не тестировал видеокарты FX 5000 серии, но сам факт официальной поддержки говорит о многом.
Проверяю тестовые проекты на старом процессоре и видеокарте GeForce 6100. Всё работает идеально. Вот что значат качественные драйверы для видеокарты. Очень жаль, что у AMD таких качественных драйверов и долгой поддержки я никогда не видел...
По-хорошему следовало бы собрать ещё более старый компьютер на сокете 462 или 478. Но там, возможно, опять придётся переустанавливать систему, что требует много времени. Да и сложно найти AGP видеокарты с поддержкой OpenGL 2.1. В любом случае системные требования сформировали.
https://github.com/Shedou/ChimbaBenchXPL
Что же, можно составлять список возможностей, которые я хочу получить от проекта.
- Простой тест видеокарты.
- Сложный тест видеокарты.
- Тест фильтрации текстур.
- Сцена нагруженная геометрией.
- Сцена нагруженная текстурами.
- Сцена нагруженная шейдерами.
- Скриншот для каждого теста.
- Вычисление среднего fps на протяжении 20-30 секунд.
Итого будет 6 разных сцен без конкретики по содержанию. Седьмой пункт гласит про скриншоты каждого теста. Это означает, что можно будет сравнить, как оно выглядит и как должно выглядеть. Думаю, в этот пункт нужно внести уточнения.
- Скриншоты должны быть встроены в программу и расположены отдельно в каталоге рядом с программой на случай, если графические искажения слишком сильные и встроенное сравнение невозможно.
- Должен быть отдельный слой, позволяющий включить оригинальный скриншот поверх изображения, рисуемого видеокартой. Это необходимо для быстрого сравнения на глаз.
- Отдельный сравнительный слой должен активироваться при нажатии специально предназначенной для этого кнопки.
Из этого вытекают некоторые ограничения для графического интерфейса пользователя. Решением будет разместить информацию в верхней полосе, а управление – в нижней полосе. Середина предназначена для основной работы. Так не будет пересечения интерфейса с разнообразной информацией между графикой.
Так как невозможно разместить все кнопки в нижней полосе интерфейса, было решено реализовать простейшую систему вложенных окон. И да, при таком соотношении сторон интерфейс просится влево или вправо от центра экрана. Но проблема в том, что при такой компоновке будут значительные потери пространства. Да и нельзя будет разместить длинные строки информации сбоку.
Восьмой пункт гласит, что тест производительности должен собирать данные на протяжении 30 секунд. Но у Godot Engine есть одна серьёзная проблема, связанная с искажением времени при низких значениях частоты кадров. Если fps опускается ниже 7.5, то начинаются проблемы со стандартными таймерами движка Godot Engine, что было обнаружено ещё в первом проекте ChimbaBench. Так, тридцати секундный тест может растянуться на минуту или две, если fps будет многократно ниже порогового значения 8. И это одна из причин непригодности движка Godot для создания перспективных и масштабных проектов.
В ходе экспериментов выяснилось, что использовать внутренний счетчик движка Godot будет большой ошибкой при расчёте результатов. Ведь низкая частота кадров так же нарушает работу фиксированного процесса обработки физики. Ещё между внутренними процессами есть временная разница, и чем ниже реальный fps, тем больше отстаёт обычный процесс от фиксированного по времени.
Полагаю, многие уже поняли, что эта фундаментальная проблема движка Godot может исказить результаты бенчмарка. В играх это может приводить к разнообразным проблемам в обработке физики при низком fps. Я очень сомневаюсь, что разработчики игр, ступившие на тропу Godot Engine, особо задумывались о таких проблемах движка. Что уж говорить, многие не задумываются даже о проблеме низкой точности мировых координат. Пока не столкнутся...
Сейчас я не смогу исправить фундаментальные проблемы игрового движка Godot, но могу вычислить реальный fps, используя нехитрые алгоритмы, отталкиваясь от времени операционной системы.
Хотя я не смогу избавиться от проблем таймеров Godot, но это не помешает собирать результаты при низкой частоте кадров. Только один нюанс всплывает. У пользователя открывается окно для мошенничества через манипуляцию временем операционной системы. Но тут только одно решение есть – это забрать у пользователя всё (к чему и стремятся современные корпорации и компании).
Впрочем, у нас есть проблема посерьёзнее. Ведь среди информации нужно вывести модель видеокарты и процессора, а встроенных функций в движке Godot 2 для этого нет. Да вот так просто нет функционала в игровом движке 2018 года выпуска, чтобы узнать модель видеокарты и процессора. Хотя в Godot 3 и Godot 4 такие функции появились, но я всё равно не совсем доволен их работой. Что уж взять с типичного Open-Source. Будем разрабатывать прослойку, которая передаст программе всю необходимую информацию. А для этого придётся разобраться в дебрях операционных систем. Уже предвкушаю танцы с бубном в Linux, где нет ничего действительно стабильного.
Если в среде Windows есть некоторый набор стандартных утилит, который не меняется буквально десятилетиями, то в Linux полагаться на условный lspci – сомнительная идея, потому что его попросту может и не быть в каком-нибудь дистрибутиве Linux. Я не хочу связываться с ненадёжными инструментами, коих полный Linux. Потому придётся разработать свои инструменты.
Но эта задача тянет на отдельную статью. Так что вернёмся к чему-то более простому. Например, к оптимизации графического интерфейса.
Ну а чтобы улучшить работу движка Godot при низком fps, нам нужно будет разработать систему динамической регулировки фиксированной функции. Этим и займёмся сейчас.
Только наведём порядок в исходном коде. Потому что эксперименты навели хаоса.
С задуманным мероприятием у меня не задалось. Зато появилась функция адаптивного контроля fps. Ну а чтобы не нагружать процессор лишними операциями, вызывается новая функция адаптивного fps раз в пол секунды времени игрового движка.
Логика не сразу реагирует на низкий fps, но это всяко лучше, чем вообще никакой адаптации к изменившимся условиям. Можно было засунуть функцию в цикл постоянного исполнения, чтобы реакция была моментальной, но это может привести к повышенной нагрузке ЦП. Так что обойдёмся.
Приложение с моими доработками и так сохраняет работоспособность при одном кадре в секунду. Я думаю, что нет смысла проводить тестирование, если система способна выдать меньше одного кадра в секунду. Дальнейшей адаптацией заниматься просто нет смысла. Лучше поработаем над функцией бенчмарка. Теперь можно активировать тест обычной кнопкой и он будет усреднять fps.
На этом моменте стало понятно, что моя система двух бенчмарков, основанных на разных источниках времени, оказалась избыточно сложной. А вот система, основанная на внутренних средствах движка, пусть и не настолько точна, как основанная на внешнем источнике времени, но её точности предостаточно благодаря функции адаптивной настройки процессов.
И тут я думаю убрать лишний код или поддерживать обе функции. Однако место ограничено для отображения разнообразных технических данных. Да и не хочу создавать лишнюю путаницу в результатах. Если же поддерживать код точного определения fps на основе системного времени, то мне всё равно придётся поддерживать и код на основе внутренних циклов Godot. Так что избавимся от кода, отвечающего за определение точного fps.
Так мы избавились от лишних системных вызовов и небольшой горсти кода. Заодно добавил функцию округления результата, чтобы обойтись без дробных частей. Хотя над оформлением нужно ещё поработать.
Итого на ожидание перед началом теста уходит 8 секунд времени, а на сам тест – 20 секунд. Имеем чуть меньше 30 секунд на прохождение теста. Модуль бенчмарка получился почти универсальным для будущих тестов. Нужно будет ещё доработать код. Но для начала сойдёт.
Осталось провести тесты на старом компьютере с видеокартой GeForce 6100 и Radeon X800 GTO. Важно отметить: AMD Catalyst 10.2 идёт с поломанным OpenGL драйвером, AMD Catalyst 9.11 не устанавливается с видеокартой Radeon X800 GTO, а Catalyst 9.2 имел проблемы с поддержкой OpenGL 2.1.
Так что я принялся искать другие версии драйверов для видеокарты Radeon и столкнулся с драйвером Catalyst 10.8. У него нет поддержки видеокарт старее AMD Radeon HD 2000 серии. Но там, наконец, реализовали поддержку OpenGL ES 2.0. И мне стало интересно. Правда, скачать этот драйвер оказалось невозможно, потому что ссылки ведут на официальные ресурсы ненадёжной компании AMD, которая давно уже удалила многие архивы старых драйверов.
Так что иду в Интернет, отбрасываю предположительно вредоносные ресурсы вроде driverlookup, впаривающие что угодно, кроме драйвера видеокарты.
В итоге нахожу архив драйверов на форуме old-games. Моё почтение за проделанную работу, особенно учитывая, что AMD уже давно кинула своих пользователей даже с архивом драйверов. Потому AMD и считается одним из худших производителей видеокарт, что даже порядок с драйверами старых видеокарт навести не может, не говоря уже про бардак с актуальными сериями.
Запускаю тестовый компьютер с видеокартой GeForce 6100 и получаю 263 fps. Так же проверил Software OpenGL на процессоре Sempron 2800+ и получил 32 fps. Никаких нареканий в плане работоспособности. Разве только есть претензии ко встроенному генератору случайных чисел движка Godot – он генерирует совсем не случайные числа. Это ещё один серьёзный недостаток в копилку Godot Engine.
Устанавливаю Radeon X800 GTO в систему. На бумаге это конкурент линейки NVIDIA GeForce 6000 серии, но на практике я устанавливаю далеко не последний драйвер в надежде на нормальную реализацию OpenGL API, потому что с последним доступным драйвером от AMD OpenGL поломан.
Увы. Catalyst 7.10 предоставить может только OpenGL 2.0 вместо требуемого 2.1. Устанавливаю Catalyst 9.2 и получаю OpenGL 2.1 на бумаге. Но в реальной работе мы имеем последствия работы кривых драйверов AMD. Как всегда.
Осталось только загрузить первый рабочий экземпляр в репозиторий GitHub.
https://github.com/Shedou/ChimbaBenchXPL/releases/tag/CBXPL-A1
Прошло меньше недели от начала разработки и до выпуска первого рабочего экземпляра бенчмарка под названием ChimbaBenchXPL.
Мой бенчмарк только в начальной стадии, потому что пришлось поработать над фундаментальными проблемами движка Godot, чтобы не получилось, как с первым ChimbaBench. Но он уже есть и работает. Жаль, конечно, что Radeon X800 оказалась совсем не конкурентом линейки GeForce 6000 в 2004 году, а AMD только в 2007 году догнала NVIDIA 2004 года в плане качества работы. Но тут уж ничего не поделать.
Благодарю за внимание, больше интересных статей в блоге Hard-Workshop.
Читайте далее на сайте
Microsoft заблокировала возможность установки ISO-образов Windows 11 через стороннее ПО
Роскомнадзор опроверг ограничение сервисов Windows и воздержался от комментариев по Linux
Роскомнадзор заявил о своей непричастности к временной недоступности в РФ сервисов обновлений Linux