Vulkan SDK обнаруживает только 1 графический процессор одновременно - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть ноутбук Optimus (имеется в виду две видеокарты: одна встроенная и одна дискретная (выделенная)).Оба они поддерживают Vulkan, и я могу использовать каждый из них в своем коде индивидуально.Но есть проблема, я не могу перечислить или использовать их в одной программе.Я должен выбрать, на каком графическом процессоре он запускается, прежде чем запускать мой код (в Windows: щелкните правой кнопкой мыши на «myProgram.exe» -> «Запускать с графическим процессором», в Linux: ./"myProgram »для встроенного графического процессора и primusrun ./"myProgram» длядискретный), и он обнаруживает только тот, на котором я запускаю свой код, даже когда оба графических процессора активны одновременно.

Моими графическими процессорами являются Intel UHD Graphics 630 и NVIDIA GeForce GTX 1050 Ti.Я использую LunarG Vulkan SDK 1.1.92, версию драйвера Intel 25.20.100.6326, версию драйвера NVIDIA 416.32 для Windows и 415.25 для Linux.Как компилятор C и операционная система, MSVC 1912 в Windows 10 и gcc 8.2.1 в Arch Linux.Vulkan runtime и ICD загрузчики установлены, и я получаю одинаковый результат на обеих ОС.

Вот мой код:

uint32_t deviceCount;
vkEnumeratePhysicalDevices(instance, &deviceCount, NULL);
printf("Found: %d\n", deviceCount);

VkPhysicalDevice *devices = malloc(deviceCount * sizeof(VkPhysicalDevice));
vkEnumeratePhysicalDevices(instance, &deviceCount, devices);

for(uint32_t deviceIndex = 0; deviceIndex < deviceCount; deviceIndex++)
{
    VkPhysicalDeviceProperties deviceProperties;
    vkGetPhysicalDeviceProperties(devices[deviceIndex], &deviceProperties);
    printf("%s\n", deviceProperties.deviceName);
}

Вот выходные данные, которые я получаю:

Если я работаю на интегрированном графическом процессоре:

Found: 1
Intel(R) UHD Graphics 630

Если я бегу на выделенном графическом процессоре:

Found: 1
GeForce GTX 1050 Ti

Я ожидаю:

Found: 2
Intel(R) UHD Graphics 630
GeForce GTX 1050 Ti

И я долженбыть в состоянии выбрать любой из них для использования в моей программе без каких-либо проблем с кодом уровня драйвера или установки его в моей ОС перед запуском.В конце концов, Vulkan - это API низкого уровня.Есть ли способ принудительно вывести список всех активных графических процессоров в моей системе?

1 Ответ

0 голосов
/ 27 декабря 2018

Я не уверен, что вы подразумеваете под

Если я работаю на интегрированном графическом процессоре

против

Если я бегу навыделенный графический процессор "...

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

Я полагаю, что вам следует установить автоматическое обнаружение, а затем убедиться, что вы экспортируете флаг «Optimus Aware» в свой двоичный файл.это в вашем тестовом коде

extern "C" {
_declspec(dllexport) uint32_t NvOptimusEnablement = 0x00000001;
}

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

...