Не удается найти лунные слои проверки SDK - PullRequest
0 голосов
/ 14 марта 2019

Я вручную проверяю нижележащие слои, обернутые VK_LAYER_LUNARG_standard_validation

Обертка найдена, однако некоторые из проверочных слоев, которые она должна обернуть в соответствии с документацией , отсутствуют.

Я запрашиваю слои следующим образом:

const std::vector<const char*> validationLayers =
{
    "VK_LAYER_GOOGLE_threading",
    "VK_LAYER_LUNARG_parameter_validation",
    "VK_LAYER_LUNARG_device_limits",
    "VK_LAYER_LUNARG_object_tracker",
    "VK_LAYER_LUNARG_image",
    "VK_LAYER_LUNARG_core_validation",
    "VK_LAYER_LUNARG_swapchain",
    "VK_LAYER_GOOGLE_unique_objects",
};

void PrintLayerStatus(VkLayerProperties layer_info, string layer_name, bool layer_found)
{
    string major = to_string(VK_VERSION_MAJOR(layer_info.specVersion));
    string minor = to_string(VK_VERSION_MINOR(layer_info.specVersion));
    string patch = to_string(VK_VERSION_PATCH(layer_info.specVersion));
    string version = major + "." + minor + "." + patch;

    string mark = (layer_found) ? string(CHECK) : string(CROSS);
    RecordLog("\n" + string(layer_name) + ", "
        "Vulkan version " + version + ", "
        + "layer version " + to_string(layer_info.implementationVersion),
        "[" + mark + "]", 77, '.');
    if(layer_found) RecordLog("\tDescription:", string(layer_info.description), 20);
}

// Find available validation layers
bool CheckValidationLayerSupport()
{
    // Query validation layers currently isntalled
    uint32_t layerCount;
    vkEnumerateInstanceLayerProperties(&layerCount, nullptr);
    std::vector<VkLayerProperties> availableLayers(layerCount);
    vkEnumerateInstanceLayerProperties(&layerCount, availableLayers.data());

    RecordLogHeader("Requesting Vulkan validation layers\t ["
        + to_string(layerCount) + "]");

    RecordLog("Layer", "Found Status", 80-12);
    RecordLog(SEPARATOR_BAR);
    // Check needed validation layers against found layers`
    for (const char* layerName : validationLayers)
    {
        bool layerFound = false;
        VkLayerProperties layer_info;
        for (const auto& layerProperties : availableLayers)
        {
            if (strcmp(layerName, layerProperties.layerName) == 0)
            {
                layerFound = true;
                layer_info = layerProperties;
                break;
            }
        }

        PrintLayerStatus(layer_info, layerName, layerFound);
    }

    return true;
}

Который производит вывод:

================================================================================
Requesting Vulkan validation layers      [16]
================================================================================

Layer                                                               Found Status
--------------------------------------------------------------------------------

VK_LAYER_GOOGLE_threading, Vulkan version 1.1.92, layer version 1............[✓]
        Description:       Google Validation Layer

VK_LAYER_LUNARG_parameter_validation, Vulkan version 1.1.92, layer version 1.[✓]
        Description:       LunarG Validation Layer

VK_LAYER_LUNARG_device_limits, Vulkan version 1.1.92, layer version 1........[✗]

VK_LAYER_LUNARG_object_tracker, Vulkan version 1.1.92, layer version 1.......[✓]
        Description:       LunarG Validation Layer

VK_LAYER_LUNARG_image, Vulkan version 1.1.92, layer version 1................[✗]

VK_LAYER_LUNARG_core_validation, Vulkan version 1.1.92, layer version 1......[✓]
        Description:       LunarG Validation Layer

VK_LAYER_LUNARG_swapchain, Vulkan version 1.1.92, layer version 1............[✗]

VK_LAYER_GOOGLE_unique_objects, Vulkan version 1.1.92, layer version 1.......[✓]
        Description:       Google Validation Layer

Я также запустил vulkaninfo с помощью grep, чтобы посмотреть, смогу ли я найти эти слои, например

vulkaninfo | grep VK_LAYER_LUNARG_image

Все они возвращаются пустыми, так что, похоже, я неправильно установил SDK или сделал что-то не так.

Моя установка просто загружала sdk и связывалась с каталогом include плюс запускала скрипт setup-env.sh (я делаю это каждый раз перед компиляцией). Я не уверен, что случайно пропустил шаг, например, запустил скрипт.

1 Ответ

4 голосов
/ 14 марта 2019

Вы используете старую документацию.На момент написания последней версии SDK 1.1.101.

В документ VK_LAYER_LUNARG_standard_validation состоит из:

  1. VK_LAYER_GOOGLE_threading
  2. VK_LAYER_LUNARG_parameter_validation
  3. VK_LAYER_LUNARG_object_tracker
  4. VK_LAYER_LUNARG_core_validation
  5. VK_LAYER_GOOGLE_unique_objects

Похоже, что они проверены на ваш вывод.

Конечно, это может (и изменилось) со временем:

VK_LAYER_LUNARG_device_limits было объединено с VK_LAYER_LUNARG_core_validation и VK_LAYER_LUNARG_parameter_validation в SDK 1.0.21.

VK_LAYER_LUNARG_image было объединено с VK_LAYER_LUNARG_core_validation в SDK 1.0.42.

VK_LAYER_LUNARG_swapchain было объединено с VK_LAYER_LUNARG_core_validation в SDK 1.0.51.

Обновление: в 1.1.106 VK_LAYER_KHRONOS_validationи все вышеперечисленное устарело.

...