2016-07-24 39 views
2

我試圖寫一個使用金屬的3D引擎。我想了解編碼render/compute/blit命令的順序如何影響執行順序?驅動程序是否遵循應用程序編碼的順序或嘗試優化?GPU驅動程序如何在MTLCommandBuffer中命令編碼命令?

換句話說,當一個渲染過程爲下一個渲染過程生成數據時,編碼順序是否足以確保渲染目標上沒有RAW危險?

回答

1

金屬編程指南指出:

發送到單個隊列中的所有命令緩衝區保證在該命令緩衝區被排隊的順序來執行。

請注意,這並不是說,命令完整的連續指令開始之前,也沒有說,從第一個命令寫入將是下一個命令可見。然而,根據我的經驗,這是金屬在實踐中的表現。我的猜測是,API保守地檢測資源依賴關係,並在命令緩衝區內隔離命令,以確保GPU內存在命令之間保持一致。

雖然文檔很清楚,但內存僅在命令緩衝區之間的邊界處與CPU-GPU一致,但不在命令緩衝區內的命令之間。

https://developer.apple.com/library/ios/documentation/Miscellaneous/Conceptual/MetalProgrammingGuide/Cmd-Submiss/Cmd-Submiss.html

+0

我今天有一個後續問題這個今天 - 渲染通道編碼成一個單一的命令緩衝區有關多怎麼辦?它們是否保證按照它們編碼的相同順序執行?這看起來像具有相關多遍操作的要求。 – m3v3rik