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_WRITE 和 D3D11_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::CheckFeatureSupport。 CheckFeatureSupport 會以裝置的功能填入 D3D11_FEATURE_DATA_D3D11_OPTIONS 結構的成員。 這裡的相關成員包括 MapNoOverwriteOnDynamicConstantBuffer 和 MapNoOverwriteOnDynamicBufferSRV。 |
備註
此列舉用於 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_DISCARD 和 D3D11_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 |