> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ExecuteIndirectBundleX (XBOX One 系列)

> 從緩衝區間接執行套件，其中套件是 GPU 繪製和狀態設定的 GPU 命令緩衝區表示法。此 API 可更。

從緩衝區間接執行套件，其中套件是 GPU 繪製和狀態設定的 GPU 命令緩衝區表示法。相較於標準 [ExecuteBundle](https://learn.microsoft.com/en-us/windows/win32/api/d3d12/nf-d3d12-id3d12graphicscommandlist-executebundle) Direct3d 12 API，此 API 可更有效率地建立和管理套件。

## 語法

```cpp theme={null}
void ExecuteIndirectBundleX(  
         ID3D12Resource* pBundleBuffer,  
         UINT BundleBufferOffset,  
         UINT MaxSize,  
         ID3D12Resource* pSizeBuffer,  
         UINT SizeBufferOffset,  
         UINT PredicationBufferOffset  
)  
```

### 參數

*pBundleBuffer*   \_In\_\
類型：[ID3D12Resource](https://learn.microsoft.com/en-us/windows/win32/api/d3d12/nn-d3d12-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](https://learn.microsoft.com/en-us/windows/win32/api/d3d12/nn-d3d12-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](https://learn.microsoft.com/en-us/windows/win32/api/d3d12/nf-d3d12-id3d12graphicscommandlist-setpipelinestate) 叫用，以反映在執行階段建立的那些管線狀態物件版本。同樣地，離線錄製到套件中的任何指標資料 (例如描述元表格的指標資料) 都必須在執行之前於執行階段修正。

**ExecuteIndirectBundleX** 本身無法從套件中叫用。

請注意使用 [NopX](/zh-TW/reference/graphics/d3d12_x/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_nopx) 將無作業填補新增至命令清單。

從 2024 年 3 月 GDK 開始，**ExecuteIndirectBundleX** 可用於 XBOX Series 主機上的非同步計算命令清單。在非同步計算上使用時，計數和套件緩衝區必須位於同一個 ID3D12Resource 內；此外，計數值必須位於套件內容之前 4 個位元組處，也就是說 *BundleBufferOffset* 必須等於 *SizeBufferOffset* 加上 4 個位元組。

若要在命令清單關閉之前執行它，請參閱 [CreateCommandListX](/zh-TW/reference/graphics/d3d12_x/interfaces/id3d12device/methods/id3d12device_createcommandlistx) 和 [CloseBundleX](/zh-TW/reference/graphics/d3d12_x/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_closebundlex)。

## 需求

**標頭:** d3d12\_x.h

\***程式庫:** d3d12\_x.lib

**支援的平台:** XBOX One 系列

## 另請參閱

[ID3D12GraphicsCommandList](/zh-TW/reference/graphics/d3d12_x/interfaces/id3d12graphicscommandlist/id3d12graphicscommandlist)\
[ExecuteBundle](https://learn.microsoft.com/en-us/windows/win32/api/d3d12/nf-d3d12-id3d12graphicscommandlist-executebundle)


## Related topics

- [ExecuteBundle](/zh-TW/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_executebundle_public.md)
- [XGameStreamingGetTouchBundleVersion](/zh-TW/reference/system/xgamestreaming/functions/xgamestreaminggettouchbundleversion.md)
- [XGameStreamingGetTouchBundleVersionNameSize](/zh-TW/reference/system/xgamestreaming/functions/xgamestreaminggettouchbundleversionnamesize.md)
- [NDA 主題目錄 - Microsoft Learn 線上連結](/zh-TW/nda/nda-topic-directory.md)
- [ID3D12CommandSignature](/zh-TW/reference/graphics/d3d12/interfaces/id3d12commandsignature/id3d12commandsignature_public.md)
