среда, 26 января 2022 г.

Vulkan device simulation layer

 Не все знаю и умеют правильно использовать этот слой для тестирования движка на разных конфигах железа.

Главное - этот слой всего лишь меняет информацию, возвращаемую драйвером, на новую, определенную в json. Таким образом слой валидации сможет обнаружить ошибки в использовании констант и в работе с некогерентной памятью.

Детальное описание можно прочитать здесь.


Как подключить.

Нужно добавить VK_LAYER_LUNARG_device_simulation в список слоев инстанса. Далее в переменных окружения (environment variables) добавить переменные:

  • VK_DEVSIM_FILENAME - путь к json, конфиги разных девайсов можно скачать тут: vulkan.gpuinfo.org. Пустой или неправильный путь отключает слой.
  • VK_DEVSIM_MODIFY_EXTENSION_LIST - определяет как комбинируются расширения из конфига и из драйвера, я использую whitelist - все расширения из конфига, что поддерживаются на девайсе.
  • VK_DEVSIM_MODIFY_FORMAT_LIST и VK_DEVSIM_MODIFY_FORMAT_PROPERTIES - определяет как комбинируются текстурные форматы, лучше использовать whitelist иначе может быть крэш при использовании неподдерживаемого формата.
  • VK_DEVSIM_MODIFY_SURFACE_FORMATS и VK_DEVSIM_MODIFY_PRESENT_MODES - также ставим whitelist.
  • VK_DEVSIM_MODIFY_MEMORY_FLAGS - значение 0 или 1, определяет можно ли использовать список типов памяти из конфига. Для безопасности лучше поставить 0.
  • VK_DEVSIM_DEBUG_ENABLE - значение 0 или 1, нужен для отладки.

Как использовать.


Можно скачать конфиг мобильного GPU и использовать на десктопной GPU, только чаще всего это приведет к ошибкам при создании девайса. Причина в разных типах памяти, разных лимитах, разных типах очередей и тд. Многое из этого никак не валидируется слоем симуляции, поэтому сообщения об ошибках могут быть весьма странными.

Правильное использование требует чуть больше ручной работы. Нужно получить конфиг своего GPU и дальше в нем менять параметры, приближая их к другим типам GPU.
Что можно менять не глядя:
  • Список расширений,  если VK_DEVSIM_MODIFY_EXTENSION_LIST  = whitelist
  • Список форматов, если VK_DEVSIM_MODIFY_FORMAT_LIST, VK_DEVSIM_MODIFY_FORMAT_PROPERTIES, VK_DEVSIM_MODIFY_SURFACE_FORMATS и VK_DEVSIM_MODIFY_PRESENT_MODES = whitelist
  • Различные названия и версии драйверов.
Остальные параметры требуют более внимательного изменения:
  • Эмуляция очередей не поддерживается, поэтому менять их нельзя. Даже переставлять местами async compute и async transfer очереди нельзя, так как их индексы мапятся на то, что возвращает драйвер, по этой причине конфиги NVidia и AMD не совместимы. Можно убрать очереди начиная с конца, можно убрать флаги, можно поменять гранулярность для команд копирования.
  • Список типов памяти менять нельзя, но можно менять размер памяти и удалять флаги, для этого надо включить замену флагов VK_DEVSIM_MODIFY_MEMORY_FLAGS  = 1. Это позволяет тестировать некогерентную память, если на девайсе вся память когерентная.
  • Лимиты можно менять только пропорционально реальным лимитам, например: нельзя уменьшать минимальное выравнивание, опасно увеличивать максимальные лимиты.

Комментариев нет:

Отправить комментарий