D3D11_MAP列舉 (d3d11.h)

識別要存取以供 CPU 讀取和寫入的資源。 應用程式可以結合其中一或多個旗標。

Syntax

typedef enum D3D11_MAP {
  D3D11_MAP_READ = 1,
  D3D11_MAP_WRITE = 2,
  D3D11_MAP_READ_WRITE = 3,
  D3D11_MAP_WRITE_DISCARD = 4,
  D3D11_MAP_WRITE_NO_OVERWRITE = 5
} ;

常數

 
D3D11_MAP_READ
值: 1
資源會對應以供讀取。 必須已建立具有讀取許可權的資源
(請參閱 D3D11_CPU_ACCESS_READ) 。
D3D11_MAP_WRITE
值: 2
資源會對應以進行寫入。 必須已使用寫入來建立資源
access (請參閱 D3D11_CPU_ACCESS_WRITE) 。
D3D11_MAP_READ_WRITE
值: 3
資源會對應以供讀取和寫入。 必須已使用讀取和寫入來建立資源
access (請參閱 D3D11_CPU_ACCESS_READ 和 D3D11_CPU_ACCESS_WRITE)
D3D11_MAP_WRITE_DISCARD
值: 4
資源會對應以供寫入;先前的資源內容將會未定義。 必須已建立具有寫入許可權的資源
和動態使用方式 (請參閱 D3D11_CPU_ACCESS_WRITED3D11_USAGE_DYNAMIC) 。
D3D11_MAP_WRITE_NO_OVERWRITE
值: 5
資源會對應以供寫入;無法覆寫資源的現有內容, (請參閱) 。 此旗標僅適用於頂點和
索引緩衝區。 資源必須以寫入存取權建立, (請參閱 D3D11_CPU_ACCESS_WRITE) 。
無法在以 D3D11_BIND_CONSTANT_BUFFER 旗標建立的資源上使用。

注意Direct3D 11.1 運行時間可從 Windows 8 開始提供,可透過D3D11_MAP_WRITE_NO_OVERWRITE來對應動態常數緩衝區和著色器資源檢視 (SRV ) 。 Direct3D 11 和更早的運行時間僅限於頂點或索引緩衝區的對應。 若要判斷 Direct3D 裝置是否支持這些功能,請使用 D3D11_FEATURE_D3D11_OPTIONS 呼叫 ID3D11Device::CheckFeatureSupportCheckFeatureSupport 會以裝置的功能填入 D3D11_FEATURE_DATA_D3D11_OPTIONS 結構的成員。 這裡的相關成員包括 MapNoOverwriteOnDynamicConstantBufferMapNoOverwriteOnDynamicBufferSRV

 

備註

此列舉用於 ID3D11DeviceContext::Map

D3D11_MAP_WRITE_NO_OVERWRITE的意義

D3D11_MAP_WRITE_NO_OVERWRITE 表示應用程式承諾不會寫入輸入元件 (IA) 階段所使用的數據。 在交換中,GPU 可讓應用程式寫入相同緩衝區的其他部分。 應用程式必須確保它不會寫入 IA 階段使用中的任何資料。

例如,請考慮下圖所示的緩衝區。 如果已發出使用頂點 4-6 的 Draw 呼叫,則呼叫 Map 的應用程式必須確定它不會寫入 Draw 呼叫在轉譯期間存取的頂點。

緩衝區圖表,其中包含不同使用率階段的頂點 不過,確保這可能很困難,因為 GPU 通常是 CPU 背後的許多畫面,就目前正在處理的框架而言。 由於呼叫 2 到 5 個畫面格前的呼叫,所以會持續追蹤正在使用的資源區段很困難且容易出錯。 因此,建議應用程式在使用 D3D11_MAP_WRITE_NO_OVERWRITE時,只寫入資源未初始化的部分。

D3D11_MAP_WRITE_DISCARD與 D3D11_MAP_WRITE_NO_OVERWRITE的常見用法

D3D11_MAP_WRITE_DISCARDD3D11_MAP_WRITE_NO_OVERWRITE 通常會與動態索引/頂點緩衝區搭配使用。 D3D11_MAP_WRITE_DISCARD 也可以搭配動態紋理使用。 不過, D3D11_MAP_WRITE_NO_OVERWRITE 無法搭配動態紋理使用。

這兩個旗標的常見用法包括填滿動態索引/頂點緩衝區,其中包含可從相機目前位置看到的幾何。 第一次將數據輸入指定框架上的緩衝區時,會使用 D3D11_MAP_WRITE_DISCARD 呼叫 Map;這樣做會使緩衝區的先前內容失效。 緩衝區接著會填入所有可用的數據。

後續在相同畫面格內寫入緩衝區時,應該使用 D3D11_MAP_WRITE_NO_OVERWRITE。 這可讓 CPU 存取 GPU 可能正在使用的資源,只要遵守先前所述的限制即可。

規格需求

需求
標頭 d3d11.h

另請參閱

資源列舉