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

# D3D12XBOX_GDS_OPERATION (XBOX One 系列)

> 指定全域資料共用 (GDS) 的讀取和寫入作業。

指定全域資料共用 (GDS) 的讀取和寫入作業。

## 語法

```cpp theme={null}
typedef enum D3D12XBOX_GDS_OPERATION
{  
    D3D12XBOX_GDS_OPERATION_DEFAULT = 0,  
    D3D12XBOX_GDS_OPERATION_READ_AT_EOS = 1,  
    D3D12XBOX_GDS_OPERATION_READ_AT_TOP = 2,  
    D3D12XBOX_GDS_OPERATION_WRITE_COPY_DATA_TO_CB = 3,  
    D3D12XBOX_GDS_OPERATION_WRITE_USE_DATA_BY_POINTER = 4,  
    D3D12XBOX_GDS_OPERATION_COMPUTE = 8,  
} D3D12XBOX_GDS_OPERATION  
```

## 常數

| 常數 | 描述 |
| - | - |
| D3D12XBOX\_GDS\_OPERATION\_DEFAULT | 讀取為 D3D12XBOX\_GDS\_OPERATION\_READ\_PIPELINED\_AT\_EOS。寫入一律在管線頂端 (TOP) 執行並進行複製；請視需要插入同步處理。表示要使用預設值：ID3D12GraphicsCommandList::ReadGDSX 使用 D3D12XBOX\_GDS\_OPERATION\_READ\_AT\_EOS，ID3D12GraphicsCommandList::WriteGDSX 使用 D3D12XBOX\_GDS\_OPERATION\_WRITE\_COPY\_DATA\_TO\_CB。這些設定最接近 DirectX 12 中 SetUAV 的預設行為 |
| D3D12XBOX\_GDS\_OPERATION\_READ\_AT\_EOS | 在著色器結束時讀取 GDS 內容，並與轉譯以管線方式進行。可能需要柵欄或 WaitUntilIdle，以確保讀取已到達記憶體。GDS 的讀取會以管線方式進行，並在著色器結束 (EOS) 時發生。<br /><br /> 如果 GPU 迫切需要對寫入的 GDS 資料進行任何讀取存取，請呼叫 InsertFence 和 InsertWaitOnFence 來封鎖命令處理器 (CP)，直到 EOS 寫入完成為止。 <br /><br />如果要透過 L2 快取 (TCC) 讀取計數器，則需要排清快取。如果要透過 CP 讀取計數器，則不需要排清快取。如果寫入的 GDS 資料在 GPU 上的使用位置與寫入位置相距夠遠，則除了可能的快取排清之外，不需要任何同步處理。 |
| D3D12XBOX\_GDS\_OPERATION\_READ\_AT\_TOP | 在 TOP 讀取 GDS。表示 CP 會在管線頂端 (TOP) 執行 GDS 的非管線讀取。這表示如果有任何執行中的著色器會修改 GDS (例如透過 UAV 計數器)，讀取可能會產生非預期的結果，因為結果會是著色器執行期間 GDS 狀態的快照。如果沒有使用 GDS 的執行中著色器，結果將與 EOS 情況下產生的結果相同。適用於 D3D12XBOX\_GDS\_OPERATION\_READ\_AT\_EOS 的 GPU 寫入-讀取考量，也適用於 D3D12XBOX\_GDS\_OPERATION\_READ\_AT\_TOP。 |
| D3D12XBOX\_GDS\_OPERATION\_WRITE\_COPY\_DATA\_TO\_CB | 在管線頂端寫入 GDS，但會先將計數器資料複製到 CB。表示 GDS 寫入只能從著色器或 CP 執行，因此 [WriteGDSX](/zh-TW/reference/graphics/d3d12_x/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_writegdsx) 會在 TOP 執行寫入。要求複製時，提供的計數器資料會複製到命令緩衝區，且可以捨棄來源指標。指標不必指向 GPU 對應的記憶體。這基本上會執行 CPU 到 GDS 的複製。 |
| D3D12XBOX\_GDS\_OPERATION\_WRITE\_USE\_DATA\_BY\_POINTER | 在管線頂端寫入 GDS；不過，由於會使用指標，遊戲必須追蹤其存留期和危害。此常數表示 GDS 寫入只能從著色器或 CP 執行，因此 [WriteGDSX](/zh-TW/reference/graphics/d3d12_x/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_writegdsx) 會在 TOP 執行寫入。要求依指標複製時，GPU 會在封包執行時使用提供的計數器資料。這表示遊戲必須追蹤 pCounterValues 指標的危害和存留期，且 pCounterValue 必須位於 GPU 對應的記憶體中；若未這麼做，很可能會導致 GPU 當機。這種複製類型較適合 GPU 到 GPU 的 GDS。 |
| D3D12XBOX\_GDS\_OPERATION\_COMPUTE | 對於著色器結束 (EOS) 作業，指定作業是 EOS 計算還是 EOS 圖形。此常數表示封包與計算 (而非圖形) 相關，以便區分不同的著色器結束。 |

## 備註

`D3D12XBOX_GDS_OPERATION` 指定全域資料共用 (GDS) 的讀取和寫入作業。

下列函式使用此列舉：

* [ReadGDSX](/zh-TW/reference/graphics/d3d12_x/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_readgdsx)
* [WriteGDSX](/zh-TW/reference/graphics/d3d12_x/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_writegdsx)

Direct3D 12 不會執行任何隱含的 GDS 管理，因此整個 GDS 空間都可供遊戲使用。如需 GDS 資料目的地指標的詳細資訊，請參閱 [D3D12\_GPU\_VIRTUAL\_ADDRESS](https://learn.microsoft.com/en-us/windows/win32/direct3d12/d3d12_gpu_virtual_address)。

## 需求

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

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

## 另請參閱

[d3d12\_x](/zh-TW/reference/graphics/d3d12_x/d3d12_x_members)


## Related topics

- [NDA 主題目錄 - Microsoft Learn 線上連結](/zh-TW/nda/nda-topic-directory.md)
- [ID3D12Object](/zh-TW/reference/graphics/d3d12/interfaces/id3d12object/id3d12object_public.md)
- [D3D12_FEATURE_DATA_D3D12_OPTIONS](/zh-TW/reference/graphics/d3d12/structs/d3d12_feature_data_d3d12_options_public.md)
- [ID3D12Device1](/zh-TW/reference/graphics/d3d12/interfaces/id3d12device1/id3d12device1_public.md)
- [ID3D12Pageable](/zh-TW/reference/graphics/d3d12/interfaces/id3d12pageable/id3d12pageable_public.md)
