Отладка слоев валидации Vulkan на macOS - PullRequest
0 голосов
/ 01 июля 2018

Я экспериментирую с вулканским SDK от LunarG для macOS. Пока все отлично работает. Однако я испытываю затруднения, когда дело доходит до отладки слоев проверки, поскольку я не могу найти решение для перехода к коду слоев для их отладки. У меня есть простая настройка CMake, для действительно простого проекта, который в основном ничего не делает, кроме запросов слоев, расширений и тому подобного. Это мой высший уровень CMakeLists.txt:

cmake_minimum_required(VERSION 3.7)
project(TestApp)
find_package(vulkan REQUIRED)

set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD 17)

set(MACOS_APPLICATION_SRCS
    ${CMAKE_CURRENT_SOURCE_DIR}/Demo.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/main.mm
    ${CMAKE_CURRENT_SOURCE_DIR}/Application.mm
    ${CMAKE_CURRENT_SOURCE_DIR}/DemoViewController.mm
)

set(MACOS_APPLICATION_HEADERS
    ${CMAKE_CURRENT_SOURCE_DIR}/Demo.h
    ${CMAKE_CURRENT_SOURCE_DIR}/Application.h
    ${CMAKE_CURRENT_SOURCE_DIR}/DemoViewController.h
)

set(MACOS_APPLICATION_RESOURCES
    ${CMAKE_CURRENT_SOURCE_DIR}/Main.storyboard
)

add_definitions(-DVK_USE_PLATFORM_MACOS_MVK)
include_directories(./)

add_executable(TestApp MACOSX_BUNDLE
    ${MACOS_APPLICATION_HEADERS}
    ${MACOS_APPLICATION_SRCS}
    ${MACOS_APPLICATION_RESOURCES})

target_link_libraries(TestApp Vulkan::Vulkan "-framework AppKit -framework QuartzCore")

set_target_properties(TestApp PROPERTIES
    MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist
)

set_source_files_properties(${MACOS_APPLICATION_RESOURCES} PROPERTIES
    MACOSX_PACKAGE_LOCATION "Resources"
)

Я создаю связанное приложение, но сейчас я НЕ храню какие-либо ресурсы (загрузчик vulkan, moltenvk lib, файлы манифеста для слоев и icd) в комплекте. Я только что добавил env. переменные (VK_ICD_FILENAMES, VK_LAYER_PATH) в Xcode, поэтому они указывают на файл манифеста расплавленного icd, который поставляется с переменной sdk & Layers для папки слоев. Я попытался построить слои самостоятельно с помощью конфигурации Debug, поэтому мой VK_LAYER_PATH указывает на папку сборки слоев, где находятся файлы манифеста. С этой настройкой, когда я запускаю свое приложение, все работает нормально, слои загружаются и мой обратный вызов отладки правильно вызывается. Но когда я пытаюсь войти в слой, ничего не происходит, похоже, xcode не может найти символы для слоев. Это было бы хорошо, я думаю, но затем я попытался установить VK_LAYER_PATH, указывающий на мою папку сборки слоев в демонстрационном проекте cubepp, который я также собрал. Тогда я смог войти в код слоев, что заставило меня подумать, что xcode не может найти символы, и это не проблема. Однако я сделал некоторые изменения в cubepp CMakeLists.txt, чтобы найти, какие свойства я мог бы пропустить в своем проекте, но после этих изменений я не смог снова войти в код слоев, даже если я отменил свои изменения в CMakeLists. Я предполагаю, что это может быть какая-то проблема XCode, или я пропускаю некоторые настройки @rpath и т. Д., Но эти вещи, а также платформа MacOS являются новыми для меня. Любые идеи, как я должен настроить это для правильной работы?

Спасибо

1 Ответ

0 голосов
/ 25 июля 2018

Помните, что при попытке войти в слои из вашего приложения вы должны сначала пройти через загрузчик, потому что загрузчик находится между вашим приложением и слоями. Я подозреваю, что ваше связанное приложение связано с загрузчиком, который был собран без символов отладки, и поэтому вы не могли войти в него.

Причина, по которой cubepp работал, заключается в том, что он, вероятно, был связан (через rpath) с загрузчиком, который был отлажен.

У меня был некоторый успех с:

  • Построение слоев из репозитория KhronosGroup / Vulkan-ValidationLayers в режиме отладки
  • Установка VK_LAYER_PATH в каталог сборки слоев этого репозитория в моей схеме проекта XCode
  • Установка символической точки останова в Xcode (например, CreateInstance в libVkLayer_core_validation.dylib)

Это заставляет XCode останавливаться в отладчике и отображать полный исходный код для слоя.

Другой подход - связать ваше приложение с загрузчиком, который был отлажен.

...