所以我想創建一個庫來使Vulkan編程更容易。你可以在Github看到它,但不要期待很快有什麼大事;)。我想創建一個名爲getInstanceLayerProperties
的函數,它返回所有的圖層屬性(顯然)。看到這可能會變慢,我想優化它。我的想法很簡單:將其存儲爲預先計算的數組。我需要知道的是:在運行期間,Vulkan圖層能否改變。例如,假設我緩存了vkEnumerateInstanceLayerProperties
的值。可以刪除,添加或更改新圖層屬性,以便如果再次調用該函數,我會得到不同的結果?Vulkan圖層可以在運行時更改嗎?
回答
的vkEnumerate *屬性返回有關係統的狀態信息,因爲它存在在電話發出時。這對我們來說似乎很明顯,因爲我們正在編寫規範,但我可以看到對於Vulkan新手來說這可能不那麼明顯。
由於圖層是在Vulkan之外定義的,它們可以隨時間變化。不太可能,但他們可以。這是這些調用可以返回VK_INCOMPLETE的原因之一。一個典型的用法是首先進行調用以獲取計數,爲結果分配空間然後獲取數據。如果列表在這兩個調用之間增長,那麼該應用程序會看到VK_INCOMPLETE並知道發生了某些變化。
首先,我會注意到,這是一種不優化代碼的完美方式。它不是和語義上的,即使不能成爲熱點。
除非您銷燬舊的實例/設備並創建新的實例/設備,否則您甚至無法使用緩存的信息。
我們回答:
規格明智,沒有聲明,明確防止結果無效。
UPDATE2:因此,那些可能隨時更改。儘管這很少見。只有確定的結果是vkCreateInstance()
返回VK_SUCCESS
或VK_ERROR_LAYER_NOT_PRESENT
。
(其實我還挺喜歡,實際上所有vkGet*
和vkEnumerate*
命令沒有說明其結果的不變性的性質,但後來我有點忘了提高,作爲一個GitHub的問題... UPDATE2:沒有,現在,前我再次忘記)
執行方式的代碼應該是開源的。這應該是官方「The Loader」的一部分(也是LunarG SDK的一部分)。我可能會稍後調查。雖然每次從註冊表中讀取新的一組圖層是合理的(在Windows上,這是)。無可否認,無論如何這都是無用的信息,因爲他們可能會決定改變這種行爲。
更新:我只是掃描它只是很快,但實際上它似乎層上vkEnumerateInstanceLayerProperties
的每個調用重新掃描: https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/blob/74d013a5438f47a66a77d5375d1cdeef3f0beca7/loader/trampoline.c#L227
- 1. IsLoggingEnabled()可以在運行時更改嗎?
- 2. 運行時可以更改Unbound Expression嗎?
- 3. 可以在頂層運行嗎?
- 4. 可以在運行時更改ejb TransactionTimeout嗎?
- 5. iOS - 我可以在運行時更改localizable.strings內容嗎?
- 6. 您可以在運行時更改註釋消息嗎?
- 7. 在運行時可以更改C++類的默認值嗎?
- 8. 我可以在運行時更改Button或TextView的功能嗎?
- 9. 可以在運行時更改WCF連接限制嗎?
- 10. 我可以在運行時更改emacs設置嗎?
- 11. 您可以在運行時更改ConnectionString配置值嗎?
- 12. Qt:我們可以在運行時更改資源內容嗎?
- 13. 我可以更改節點層次嗎?
- 14. 可以在c#中運行時更改我的程序托盤圖標嗎?
- 15. 托盤圖標應用程序標題可以在運行時更改嗎?
- 16. 當mongodb運行時,我可以更改mongod的binding_ip嗎?
- 17. 我可以在運行時更改一個dll的名稱以加載嗎?
- 18. 我可以在運行時更改Spark的執行程序內存嗎?
- 19. 我可以運行泊塢窗圖像的中間層嗎?
- 20. 更新App時,identifierForVendor可以更改嗎?
- 21. 我可以在運行時將更改的信息保存在datagridview中嗎?
- 22. 在Android中,可以在運行時更改自定義屬性的值嗎?
- 23. 在android中我可以在運行時更改操作欄窗口功能嗎?
- 24. 可能在運行時更改腳本?
- 25. 可能在運行時更改AppDelegate
- 26. 運行時,我可以在任務內改變int值嗎? c#
- 27. 您可以在運行時更改Python描述符的__get__方法嗎?
- 28. 我可以在運行時更改我的android應用程序樣式嗎?
- 29. 您可以在運行時更改Foo.settings文件中的設置嗎?
- 30. Android佈局參數。我可以在運行時更改它們嗎?
我認爲你的答案的第一部分是錯誤的。調用'vkEnumerateInstanceLayerProperties'和'vkEnumerateInstanceExtensionProperties'完全獨立於任何單個實例,並且在創建實例之前發生。這些功能的重點在於是否可以使用這些特定的圖層/擴展來創建實例! – Jerfov2
這是怎麼回事?實際上在規範中是否有這樣的陳述?從未聲稱任何關於「常見原因」/他們應該*表現的期望, – krOoze
或者您的意思是「回答前」部分。只是說,沒有什麼可以優化的。枚舉應該只在每個實例/設備創建時完成一次...(當然在**創建之前**) – krOoze