Skip to main content
從緩衝區間接執行套件,其中套件是 GPU 繪製和狀態設定的 GPU 命令緩衝區表示法。相較於標準 ExecuteBundle Direct3d 12 API,此 API 可更有效率地建立和管理套件。

語法

參數

pBundleBuffer   _In_
類型:ID3D12Resource*
指定包含套件資料之緩衝區資源的指標。此緩衝區必須在建立時設定 D3D12XBOX_RESOURCE_FLAG_ALLOW_INDIRECT_BUFFER 屬性;否則,緩衝區必須位於 PAGE_GPU_EXECUTE 記憶體中。 BundleBufferOffset   _In_
類型:UINT
從套件緩衝區起點到套件資料開頭的位移 (以位元組為單位)。必須是 4 的倍數。 MaxSize   _In_
類型:UINT
套件大小可透過下列兩種方式之一指定:
  1. 如果 pSizeBuffer 為 NULL,則 MaxSize 指定要執行之套件的確切位元組數。
  2. 如果 pSizeBuffer 不是 NULL,則 MaxSize 指定要執行的最大位元組數。如果在 GPU 執行時 pSizeBuffer 指定的大小超過 MaxSize,GPU 就會完全捨棄該套件的執行。當使用 GPU 建立套件且資料超出其分配的預算時,這有助於避免 GPU 停止回應。
套件大小不能超過 4 MB。 pSizeBuffer   _In_opt_
類型:ID3D12Resource*
指定包含 32 位元大小 (以位元組為單位) 的緩衝區資源 (ID3D12Resource)。這用於 GPU 產生的大小。 SizeBufferOffset   _In_
類型:UINT
從大小緩衝區起點到 32 位元大小的位移 (以位元組為單位)。 PredicationBufferOffset   _In_
類型:UINT
保留供日後使用,必須為零。

傳回值

類型:void

備註

此 API 啟用 Build-Your-Own-Bundles 功能,讓呼叫者可以在執行階段或離線時,使用自己的 CPU 或 GPU 程式碼建立 GPU 命令緩衝區。套件記憶體也可以明確管理。這兩項屬性都與標準 ExecuteBundle API 形成對比,後者只能在執行階段於 CPU 上使用 D3D API 建立套件,且有相當大的物件記憶體額外負荷。 Build-Your-Own-Bundles 功能可以包含可錄製到一般套件中的所有相同類型的繪製和狀態變更。這組功能包含所有高頻率 D3D API,但不包含低頻率 D3D API (例如用於設定轉譯目標或清除的 API)。XBOX One 的 GPU 命令處理器以非常直接的封包編碼原生實作這些 API。若要建立命令緩衝區資料,請搭配管線狀態物件和根簽章物件的內省,使用 d3d12_x.h 標頭中的 D3D12XBOX_PACKET_* 定義。請以 d3d12_x.h 中的內嵌函式作為如何執行此動作的參考;除了標頭中的內容之外,不提供其他文件。 管線狀態物件的封包資料僅在該管線狀態物件的存留期間有效。這表示如果套件是離線建立的,則在 GPU 可以執行套件之前,必須修正該套件內的所有 SetPipelineState 叫用,以反映在執行階段建立的那些管線狀態物件版本。同樣地,離線錄製到套件中的任何指標資料 (例如描述元表格的指標資料) 都必須在執行之前於執行階段修正。 ExecuteIndirectBundleX 本身無法從套件中叫用。 請注意使用 NopX 將無作業填補新增至命令清單。 從 2024 年 3 月 GDK 開始,ExecuteIndirectBundleX 可用於 XBOX Series 主機上的非同步計算命令清單。在非同步計算上使用時,計數和套件緩衝區必須位於同一個 ID3D12Resource 內;此外,計數值必須位於套件內容之前 4 個位元組處,也就是說 BundleBufferOffset 必須等於 SizeBufferOffset 加上 4 個位元組。 若要在命令清單關閉之前執行它,請參閱 CreateCommandListX 和 CloseBundleX。

需求

標頭: d3d12_x.h *程式庫: d3d12_x.lib 支援的平台: XBOX One 系列

另請參閱

ID3D12GraphicsCommandList
ExecuteBundle
Last modified on October 6, 2026