在一般情況下,你應該假設一旦你創造的GPU資源(例如,使用CreateTexture2D
),內存是保留的,居民對於資源供3D管線使用。請注意,這是獨立的數據轉移到GPU,這也是通過Map
/Unmap
或UpdateSubresource
明確。
在某些情況下,操作系統會將內存交換出來,但通常應儘可能避免這種情況。例如,如果您創建了一堆大紋理,但從不訪問它們,則視頻內存管理器最終會將它們分頁到系統內存以執行其他任務(例如,觀看Netflix /在另一個顯示器上瀏覽互聯網)。如果您過度使用視頻內存(使用的系統數量超過可用容量),您也可能遇到實際問題。這曾經是不可能的(你只會得到E_OUTOFMEMORY
),但現在內存管理器試圖通過將事情分頁到系統內存或磁盤來實現它。這是你應該真的努力避免,因爲如果你曾經綁定和使用一個頁面調出資源,你會得到一個小故障等待內存管理器將其重新分頁使用。
請注意,上述確實只適用於獨立GPU配置。在集成系統上來自英特爾或AMD,您將獲得具有完全不同特性的統一內存。但總的來說,你應該首先針對不同的配置,因爲如果你搞砸了,你就不得不擔心更多的性能障礙,而且它們不太可能在集成上出現。
回到你原來的問題,改變繪製調用之間的SRV並不是那麼昂貴 - 它不僅僅是指針交換,而且遠不是通過總線傳輸整個紋理的成本。您應該可以隨意抽取與您的平局相同頻率的SRV,並且不會對性能產生不利影響。