Skip to main content
允許直接控制 SPI_TMPRING_SIZE 與 COMPUTE_TMPRING_SIZE 暫存器,以及對應的圖形與計算環形緩衝區。

語法

參數

Flags   _In_
類型:D3D12XBOX_SET_SHADER_SCRATCH_SPACE_FLAGS
選擇計算、圖形或兩者。 Destination   _In_
類型:D3D12_GPU_VIRTUAL_ADDRESS
暫存空間的基底位址,必須以 1KB 對齊或為 null。將此值設為 null 會重新設定為目前驅動程式的預設值。 SizeBytes   _In_
類型:UINT64
暫存空間的大小,以 1KB 對齊;如果位址為 null,則必須為 0。 SizePerWaveInBytes   _In_
類型:UINT
每個波的暫存空間大小,必須以 1KB 對齊,必須小於或等於暫存空間的總大小;如果位址為 null,則必須為 0。

傳回值

類型:void

備註

我們的硬體支援以管線方式變更 tmpring_size 暫存器,但在重複使用暫存空間的基礎記憶體位址時,需要完整清除管線。這會導致以下情況:根據預設,圖形驅動程式會為圖形與計算配置單一暫存空間,並將 tmpring_size 暫存器設定為每個 SIMD 只能容納少數幾個波。這表示當著色器中啟用暫存空間時,佔用率會很低。根據預設,由於只有單一計算配置,非同步計算無法與圖形計算同時使用,這表示具有暫存空間的著色器完全無法在非同步計算上使用。開發人員可以透過專用的 XBOX 建立裝置 API 覆寫暫存空間大小,但無法覆寫該行為。 此 API 允許重新設定該預設行為,以便在圖形與非同步計算上達到更高的佔用率與工作重疊。內部不會執行任何同步處理,也不會檢查記憶體指標以避免重複使用,因此使用者務必實作自己的同步處理,以確保在重新設定 tmpring_size 暫存器時不會發生記憶體重複使用。 您可以使用下列 API 查詢每個波所需的暫存空間大小
以下是設定方式的範例,例如允許 8 個波共用暫存空間 (請注意,實際上這樣的波數太少)
最後,啟用 SCRATCH_EN 時,硬體不支援高於 16 的佔用率,因為 tmpring_size 設定不允許為每個計算單元指定超過 32 個波。

需求

標頭: d3d12_xs.h 程式庫: d3d12_xs.lib 支援的平台: XBOX Series X|S

另請參閱

ID3D12GraphicsCommandList6
Last modified on October 6, 2026