2017-04-20 77 views
1

我正在通過API規範學習Vulkan(http://vulkan-spec-chunked.ahcox.com/ch02s09.html),我對Vulkan的物理設備有多混淆。我確實只有一個intel物理視頻卡設備,但vkEnumeratePhysicalDevices返回2的計數。設備是相同的,但隊列標誌看起來不同,並且隊列標記未記錄(實際上它們是,但僅在第二個隊列中標記爲8我的標誌值是16和32)。Vulkan物理設備

typedef enum VkQueueFlagBits { 
    VK_QUEUE_GRAPHICS_BIT = 0x00000001, 
    VK_QUEUE_COMPUTE_BIT = 0x00000002, 
    VK_QUEUE_TRANSFER_BIT = 0x00000004, 
    VK_QUEUE_SPARSE_BINDING_BIT = 0x00000008, 
} VkQueueFlagBits; 

這裏是我的Vulkan代碼的輸出:

GPU count: 2 (physical devices) 
Physical Device 0: 
     Device API version: 1.0.42 - 4194346 
     Device Vendor Id: 0x8086 
     Device Id: 1916 
     Device Driver version: 0.0.1 - 1 
     Device type: 1 
     Device Name: Intel(R) HD Graphics 520 (Skylake GT2) 
     Device Pipeline UID: f557cfd4 
     Queue Properties: 
       Flags: 7 
       Count: 1 
       ts Valid Bits: 24 
Physical Device 1: 
     Device API version: 1.0.42 - 4194346 
     Device Vendor Id: 0x8086 
     Device Id: 1916 
     Device Driver version: 0.0.1 - 1 
     Device type: 1 
     Device Name: Intel(R) HD Graphics 520 (Skylake GT2) 
     Device Pipeline UID: f557cfd4 
     Queue Properties: 
       Flags: 49 
       Count: 0 
       ts Valid Bits: 1 

有人能幫助我瞭解爲什麼會出現對同一實際裝置2臺物理設備和缺少的標誌?

+1

和計數爲0?看起來像一個bug TBH。 –

+0

看起來像一個失敗的驅動程序安裝。我會嘗試卸載它,如果某些設備在此之後仍然存在,那麼可能需要手動清理。 – krOoze

+0

棘輪怪胎,這裏的計數是'queueCount是此隊列系列中隊列的無符號整數計數。似乎不是我的錯誤。 – ton

回答

2

第二個設備的count=0很好奇。更嚴重的是,其flagstsVB值已損壞(49flags1不是有效值,對於tsVB無效)。

這幾乎歸結爲您的系統上存在一個無關的*.json文件。

這些* .json文件存儲有關機器上存在的ICD的信息。它們存儲在standard location(s)中。

vkEnumeratePhysicalDevices + vkGetPhysicalDeviceProperties是相對愚蠢的命令,除了讀取所述*.json文件並返回其內容外別無所求。我認爲雖然這樣調用諸如vkCreateDevice之類的「真實」對於安裝不當的驅動程序不起作用。

creare到底發生了什麼這個問題是由你的好奇心去探索的。對於初學者來說,我相信Linux發行版有一個將文件映射到其原始包的命令。這可能是關於先前驅動程序的錯誤清理,或可能是新的安裝腳本中的錯誤。至少one person之前有這個問題。

基於我在這裏解釋的,我相信這是相對良性的錯誤。第一臺設備應該可以正常工作。而你可以忽略第二個。或者直接刪除它的*.json清單,以防止它出現在vkEnumeratePD

+0

關於「第二」物理設備的標誌和tsVB,它似乎是每個運行一個骯髒和隨機的值。所以我認爲這是一個空的內存指針,可能是有道理的,因爲計數爲零。 – ton