> ## 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.

# XG_USAGE (XBOX One 系列)

> 識別轉譯期間資源的預期用途。用途直接反映資源是否可由 CPU 和/或 GPU 存取。

識別轉譯期間資源的預期用途。用途直接反映資源是否可由 CPU 和/或 GPU (圖形處理器) 存取。

<a id="syntaxSection" />

## 語法

```cpp theme={null}
enum XG_USAGE
{
    XG_USAGE_DEFAULT = 0,
    XG_USAGE_IMMUTABLE = 1,
    XG_USAGE_DYNAMIC = 2,
    XG_USAGE_STAGING = 3
}  
```

<a id="ID4EDC" />

## 常數

| 常數 | 描述 |
| - | - |
| XG\_USAGE\_DEFAULT | 需要 GPU 讀取和寫入存取權的資源。這可能是最常見的用途選擇。 |
| XG\_USAGE\_IMMUTABLE | 只能由 GPU 讀取的資源。GPU 無法寫入，CPU 也完全無法存取。由於此類資源在建立後無法變更，因此必須在建立時初始化。 |
| XG\_USAGE\_DYNAMIC | 可由 GPU (唯讀) 和 CPU (唯寫) 存取的資源。對於 CPU 至少每個畫面更新一次的資源，動態資源是不錯的選擇。若要更新動態資源，請使用 **Map** 方法。離線和放置資源不支援 XG\_USAGE\_DYNAMIC。如果您嘗試對離線和放置資源使用此列舉常數，建立紋理計算器函式 (例如 [XGCreateTexture1DComputer](/zh-TW/reference/graphics/xg__NR/functions/xgcreatetexture1dcomputer)) 或計算紋理配置函式 (例如 [XGComputeTexture1DLayout](/zh-TW/reference/graphics/xg__NR/functions/xgcomputetexture1dlayout)) 將會傳回 E\_INVALIDARGS。 |
| XG\_USAGE\_STAGING | 支援從 GPU 到 CPU 資料傳輸 (複製) 的資源。 |

<a id="remarks" />

## 備註

應用程式會在資源描述中識別資源的預期使用方式 (其用途)。有數個用於建立資源的結構，包括 [XG\_TEXTURE1D\_DESC](/zh-TW/reference/graphics/xg__NR/structs/xg_texture1d_desc)、[XG\_TEXTURE2D\_DESC](/zh-TW/reference/graphics/xg__NR/structs/xg_texture2d_desc)、[XG\_TEXTURE3D\_DESC](/zh-TW/reference/graphics/xg__NR/structs/xg_texture3d_desc) 和 [XG\_BUFFER\_DESC](/zh-TW/reference/graphics/xg__NR/structs/xg_buffer_desc)。

應用程式不會指定要在其中建立資源的記憶體類型 (集區)。相反地，您會指定資源的預期用途，並讓執行階段 (與驅動程式和記憶體管理員協同) 選擇能達到最佳效能的記憶體類型。

<a id="Restrictions" />

### 資源用途限制

每種用途都決定了 CPU 和/或 GPU 存取性之間的取捨。一般而言，其中一個處理器的存取效能較高，代表另一個處理器的存取效能較低。兩個極端分別是 **XG\_USAGE\_DEFAULT** 和 **XG\_USAGE\_STAGING** 用途。**XG\_USAGE\_DEFAULT** 幾乎將存取完全限制在 GPU。**XG\_USAGE\_STAGING** 幾乎將存取完全限制在 CPU，且只允許在 GPU 與 CPU 之間進行資源的資料傳輸 (複製)。

**XG\_USAGE\_DYNAMIC** 用途是一種特殊情況，當 CPU 即時產生資料並高頻率傳送時，可最佳化從 CPU 到 GPU 的資料流。**XG\_USAGE\_DYNAMIC** 通常用於含有頂點資料的資源和常數緩衝區。

**XG\_USAGE\_IMMUTABLE** 用途是另一種特殊情況，會讓 GPU 只在您建立資源時產生一次資料。**XG\_USAGE\_IMMUTABLE** 非常適合紋理之類的資料，因為這類資料通常是從某種檔案格式讀入記憶體。因此，當您使用 **XG\_USAGE\_IMMUTABLE** 建立紋理時，GPU 會將該紋理直接讀入記憶體。

使用下表選擇最能描述 CPU 和 GPU 如何存取資源的用途。其中存在效能取捨。

| 資源用途 | 預設 | 動態 | 不可變 | 暫存 |
| - | - | - | - | - |
| GPU 讀取 | 是 | 是 | 是 | 是<sup>1</sup> |
| GPU 寫入 | 是 | | | 是<sup>1</sup> |
| CPU 讀取 | | | | 是<sup>1</sup> |
| CPU 寫入 | | 是 | | 是<sup>1</sup> |

1：具有 **XG\_USAGE\_STAGING** 用途之資源的 GPU 讀取和寫入僅限於複製作業。此外，由於深度樣板格式和多重取樣配置是特定 GPU 設計的實作細節，一般而言，作業系統無法向 CPU 公開這些格式和配置。因此，暫存資源不能是深度樣板緩衝區或多重取樣轉譯目標。

由於 **XG\_USAGE\_DYNAMIC** 資源會耗用特定的硬體功能，請謹慎使用。顯示驅動程式通常會使用有利於 CPU 寫入但會妨礙 CPU 讀取的快取演算法，為 **XG\_USAGE\_DYNAMIC** 資源配置記憶體。因此，請勿期望從 **XG\_USAGE\_DYNAMIC** 資源進行 CPU 讀取時能有高效能，甚至一致的效能。

<a id="Bind" />

### 資源繫結選項

為了將效能最大化，並非所有資源用途選項都能作為管線的輸入或輸出資源。下表列出這些限制。

| 資源可繫結為 | 預設 | 動態 | 不可變 | 暫存 |
| - | - | - | - | - |
| 階段的輸入 | 是<sup>2</sup> | 是<sup>3</sup> | 是 | |
| 階段的輸出 | 是<sup>2</sup> | | | |

* 2：如果使用不同的檢視繫結為輸入和輸出，每個檢視都必須使用不同的子資源。
* 3：資源只能以單一子資源建立，不能是紋理陣列，也不能是 mipmap 鏈。

<a id="requirements" />

## 需求

**標頭：** xg.h

**程式庫：** xg\_x.lib

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

## 另請參閱

[XG 參考](/zh-TW/reference/graphics/xg__NR/xg_members)


## Related topics

- [NDA 主題目錄 - Microsoft Learn 線上連結](/zh-TW/nda/nda-topic-directory.md)
- [XBOX GDK 主機開發的 NDA 主題索引](/zh-TW/nda/nda-overview.md)
- [GameInputUsage](/zh-TW/reference/input/gameinput/structs/gameinputusage.md)
- [XNetworkingTcpQueuedReceivedBufferUsageStatistics](/zh-TW/reference/networking/xnetworking/structs/xnetworkingtcpqueuedreceivedbufferusagestatistics.md)
- [XBOX One 與 XBOX Series X|S GDK 工具](/zh-TW/tools/tools-console/tools-sdk.md)
