2017-01-22 52 views

回答

4

上傳堆資源有了閱讀相關的成本,這比默認的資源更高。

在不斷緩衝區的情況下,這通常是罰款(如你在一次寫入/讀取一次的情況),但在其他情況下(大頂點/索引緩衝),這通常是不可取的。

的一般方法是創建兩個資源(一個上傳堆內,一個默認堆內),(使用地圖,你所提到的)的數據複製到上傳的資源,然後利用執行GPU副本要麼CopyResource或默認資源中爲CopyBufferRegion

請確保您有正確的資源狀態建立前/後的資源複製後,使用ResourceBarrier和過渡狀態。

之前調用拷貝,資源應該在備份之前D3D12_RESOURCE_STATE_COPY_DEST,和任何依賴於你的資源讀取標誌。

另請注意,您可以使用副本命令隊列用於GPU副本(這樣您可以避免在直接命令列表中執行),但是您需要確保副本在使用資源之前完成(通過使用柵欄)。

多引擎在MSDN中描述here

+0

請注意,如果你只是_writing_的資源,你可以直接寫入,而不是使用上載獲得更快的性能 - 因爲你可以用寫合併的內存(特別是如果你經常這樣做)。這是你必須優化/檢查你的場景的其中一件事。 – cmaughan

+0

@cmaughan值得一說,這只是針對緩衝區真的,有沒有辦法將紋理映射的方式。 – galop1n

+0

@ galop1n Nope;你也可以用紋理來做到這一點。但是,再一次,你必須分析哪個更快。 – cmaughan

相關問題