2017-10-10 59 views

回答

1

每個描述符集可能有多個相同或不同類型的資源。在描述符集佈局中定義了哪些類型的資源可以通過描述符集進行綁定。在那裏,通過VkDescriptorSetLayoutBinding結構,您可以指定給定類型的資源(例如採樣器,存儲器映像或統一緩衝區)以及作爲着色器內數組訪問的此類資源數。但是,您也可以指定多個相同類型的資源作爲單獨的佈局條目(在創建佈局時指定多個VkDescriptorSetLayoutBinding條目)。每個這樣的描述符都必須使用不同的綁定。而同樣的約束力,必須內部着色器可以用來訪問給定的資源:

layout(set=S, binding=B) uniform <variable_type> <variable_name>; 

至於你的問題的第二部分 - 它依賴。每種情況,繪製場景,渲染資源類型,資源數量,內存使用情況,甚至圖形硬件供應商都會影響渲染過程中用於創建和綁定描述符集的方法。一般規則是,您應該儘量減少渲染過程中的狀態變化。所以你應該保持vkCmdBindDescriptorSets()函數調用的數量儘可能小。但是這限制了你場景的靈活性和動態性。因此,在許多情況下,您需要更改描述符,或者每次使用多個描述符綁定多個描述符。但是,正如我寫的,這一切都取決於特定的情況。

1

不,您不需要爲每個資源設置單獨的描述符。

VkDescriptorSetLayout的文檔似乎清楚發生了什麼。在同一章中還有很好的代碼示例。

因此,綜上所述,高達:

  • 可以有一個單一的描述符類型
  • 可以有幾個「綁定」,其每一個可以保存任何描述符類型資源的(同質的)陣列(或他們的陣列)
  • 而作爲一個間接層以上,你可以有幾個描述符設置各有其綁定

憑經驗大概是「少即是多」。如果您不需要資源具有不同的類型或名稱,請使用數組。如果你不需要單獨設置,只使用一組。

相關問題