У меня есть ноутбук 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 низкого уровня.Есть ли способ принудительно вывести список всех активных графических процессоров в моей системе?