Vulkan API 的奇怪設計
前言
在之前的 開啟Vulkan的 Debug mode 裡開啟了 Vulkan API 的 Debug mode ,有些看似可以省略的流程在沒有 Debug mode 時可以正常工作,但開啟 Debug mode 後就被視為錯誤的奇怪設計,在此做個紀錄。內容
這次的主角是 vkGetPhysicalDeviceQueueFamilyProperties() 與 vkGetPhysicalDeviceSurfaceFormatsKHR() ,這兩個 Function 看起來都只是作為詢問,但事實上這個詢問遽然是不可省略的詢問!如果不詢問會在 Debug mode 時報錯。如果沒有詢問 vkGetPhysicalDeviceQueueFamilyProperties() 時,會在 vkCreateSwapchainKHR() 時得到下圖
vkGetPhysicalDeviceQueueFamilyProperties() 的報錯 |
如果沒有詢問 vkGetPhysicalDeviceSurfaceFormatsKHR() 時,會在 vkCreateSwapchainKHR() 時得到下圖
vkGetPhysicalDeviceSurfaceFormatsKHR() 的報錯 |
在 Vulkan SDK 裡的範例裡,程式碼看起來是可以省略這兩個 Funciton 的詢問直接用"預設值"來替代結果,但不幸地,在 Debug mode 會判定為錯誤,這設計奇怪的點是有些平台的硬體狀況是很"固定",例如一定支援某些格式的狀況,但這個流程卻不能省略就會看起來很奇怪。
沒有留言:
張貼留言