我是圖形編程和Vulkan的新手。 我知道我們需要將緩衝區綁定到描述符集,但是我想知道是否需要爲每個緩衝區設置一個新的描述符集,或者我可以將descriptorSet集綁定2個或更多個緩衝區? 如果是的話,這是什麼經驗法則?我是否需要爲每個緩衝區創建一個新的描述符集?
1
A
回答
1
每個描述符集可能有多個相同或不同類型的資源。在描述符集佈局中定義了哪些類型的資源可以通過描述符集進行綁定。在那裏,通過VkDescriptorSetLayoutBinding結構,您可以指定給定類型的資源(例如採樣器,存儲器映像或統一緩衝區)以及作爲着色器內數組訪問的此類資源數。但是,您也可以指定多個相同類型的資源作爲單獨的佈局條目(在創建佈局時指定多個VkDescriptorSetLayoutBinding條目)。每個這樣的描述符都必須使用不同的綁定。而同樣的約束力,必須內部着色器可以用來訪問給定的資源:
layout(set=S, binding=B) uniform <variable_type> <variable_name>;
至於你的問題的第二部分 - 它依賴。每種情況,繪製場景,渲染資源類型,資源數量,內存使用情況,甚至圖形硬件供應商都會影響渲染過程中用於創建和綁定描述符集的方法。一般規則是,您應該儘量減少渲染過程中的狀態變化。所以你應該保持vkCmdBindDescriptorSets()函數調用的數量儘可能小。但是這限制了你場景的靈活性和動態性。因此,在許多情況下,您需要更改描述符,或者每次使用多個描述符綁定多個描述符。但是,正如我寫的,這一切都取決於特定的情況。
1
不,您不需要爲每個資源設置單獨的描述符。
VkDescriptorSetLayout的文檔似乎清楚發生了什麼。在同一章中還有很好的代碼示例。
因此,綜上所述,高達:
- 可以有一個單一的描述符類型
- 可以有幾個「綁定」,其每一個可以保存任何描述符類型資源的(同質的)陣列(或他們的陣列)
- 而作爲一個間接層以上,你可以有幾個描述符設置各有其綁定
憑經驗大概是「少即是多」。如果您不需要資源具有不同的類型或名稱,請使用數組。如果你不需要單獨設置,只使用一組。
相關問題
- 1. 每個Unix文件描述是否都有自己的讀/寫緩衝區?
- 2. 我是否需要爲每個遊戲級別創建一個新的活動?
- 3. 我是否需要爲每個請求創建一個新的Struts Action類?
- 4. C#我需要爲每個患者創建一個新表格
- 5. 我需要緩衝區嗎?
- 6. 每次我是否需要在循環中新建一個ArrayList?
- 7. 我們是否需要爲每個圖像創建一個HttpHandler(ashx)?
- 8. fopen是否創建文件描述符?
- 9. 我是否需要爲每個線程創建新的Callable對象?
- 10. 是否需要緩衝TextReader?
- 11. 我是否需要觀察每個創建的NSManagedObjectContext的NSManagedObjectContextDidSaveNotification?
- 12. 我是否需要爲UITextField創建一個控制器?
- 13. 我是否需要爲has_many:through關聯創建一個關聯表?
- 14. 爲什麼iconv函數需要一個非常量緩衝區?
- 15. 爲什麼在創建緩衝區時需要分配內存?
- 16. WCF代理:我是否需要爲每個綁定創建一個新的和不同的代理?
- 17. 我必須爲每個webgl程序創建單獨的緩衝區嗎?
- 18. 我是否需要爲每個表定義一個新的主鍵字段?
- 19. 字符串緩衝區需要幫助
- 20. 用GL緩衝區中的每個像素alpha創建UIImage
- 21. jmx是否爲每個調用創建一個新線程?
- 22. 是我需要爲每個Tabbar創建UINavigationController?
- 23. 是否有一個codecvt解碼方案,目標緩衝區需要多個內部字符的空間?
- 24. 模型中每個網格的緩衝區是否最優?
- 25. 在Objective C中,創建新類是否意味着要爲每個新類創建一個新文件?
- 26. 我是否需要爲在XPCOM中使用的每個自創類創建一個接口?
- 27. 你需要一個無參數GET的緩衝區嗎?
- 28. 我是否需要爲每個控制器創建一個模型?什麼是更好的做法?
- 29. 我是否需要爲每個UIVIew創建變量並鏈接IBOutlet?
- 30. PHP是否爲匿名函數創建輸出緩衝區?