cancel
Showing results for 
Search instead for 
Did you mean: 

OpenGL & Vulkan

Highlighted
Adept I
Adept I

vkEnumeratePhysicalDevices no longer returns primary GPU as the first physical device

After recent driver update I noticed change in behavior of vkEnumeratePhysicalDevices, which no longer returns primary GPU as first in the list. This change seems to manifest since one of 20.1.X driver updates. This has significant effect on many Vulkan applications such as AAA games (DOOM 2016 or Wolfenstein 2) which have no way of specifying GPU which should be used for rendering. These games still work, however render on secondary GPU which might not have displays connected and image is transfered to primary GPU, which results in fluidity and performance loss.

Machine:

  • MB: ASUS Crosshair VIII Hero (X570)
  • GPUs: Radeon RX Vega 64 Liquid (marked as primary in Radeon Software and used for OpenGL/D3D apps) + Radeon VII (no displays connected + returned as 0th GPU by vkEnumeratePhysicalDevices)
  • CPU: Ryzen R9 3950X
  • Radeon Software: 20.1.3 (with Vulkan API 1.2.131)
  • OS: Windows 10 (1909 build 18363.592)

This seems to be reggresion as I observed this behavior before, but was resolved. I'm attaching "vulkaninfo" output, which lists GPUs as:

        GPU id     : 0 (AMD Radeon VII)
        Layer-Device Extensions: count = 0

        GPU id     : 1 (Radeon RX Vega)
        Layer-Device Extensions: count = 0

While Vulkan spec does not seem to specify any particular ordering of physical devices returned by vkEnumeratePhysicalDevices I believe its desirable to return "primary" GPU device as first in the list because many applications seem to rely on this.

Tags (1)
4 Replies
Highlighted
Adept III
Adept III

Re: vkEnumeratePhysicalDevices no longer returns primary GPU as the first physical device

dorisyan, I think it will be easy to fix AMD's Vulkan Driver, just need to sort GPU list from best to worst

0 Kudos
Reply
Highlighted
Adept I
Adept I

Re: vkEnumeratePhysicalDevices no longer returns primary GPU as the first physical device

I'm not sure whether the best to worst sorting is ideal here. For example, in my situation, returning list [Radeon VII, Vega 64] (as driver does for now) would be correct ordering with respect to performance of these GPUs. However, when I run DOOM 2016 I get:

  • OpenGL on Vega 64 (as Vega 64 is primary GPU): 85 FPS
  • Vulkan on Radeon VII (as it is returned as GPU 0): 95 FPS
  • Vulkan on Vega 64 (I have to DISABLE Radeon VII to achieve this): 140 FPS

While Radeon VII is faster than Vega 64 I lost 45 FPS (+ there is some stuttering) because my displays are connected to Vega 64 and not Radeon VII. When I open Radeon software, my GPU 1 is Vega 64 (also marked primary) and GPU 2 is Radeon VII.

I think it would be good to honor notion of "primary GPU" used by D3D and OpenGL by returning that one as the first and order the rest of the list by relative performance of GPUs. Or at least provide some way to change the order of Vulkan devices.

I understand this gets more complicated when integrated GPUs are involved, but I pressume in that case Vulkan driver honors High/Low performance GPU settings advertised by Windows 10 (in System -> Display -> Graphics settings).

0 Kudos
Reply
Highlighted
Staff
Staff

Re: vkEnumeratePhysicalDevices no longer returns primary GPU as the first physical device

Thanks for your report,

I will ask a QA for help to find this regression.

Highlighted
Adept I
Adept I

Re: vkEnumeratePhysicalDevices no longer returns primary GPU as the first physical device

Just short update on this issue as another (DOOM Ethernal) Vulkan title was released. The issue is still present with latest driver (20.3.1) and it causes the game to crash when set to Fullscreen mode (disabling Radeon VII allows the game to launch). The game once again runs on secondary GPU (Radeon VII) when set to "Borderless windowed" mode and the GPU is enabled (just as with DOOM 2016).

0 Kudos
Reply