頂點處理作業的效能,包括轉換和光源,主要取決於頂點緩衝區存在於記憶體中的位置,以及正在使用哪種類型的轉譯裝置。 應用程式會在建立頂點緩衝區時控制其記憶體配置。 設定D3DPOOL_SYSTEMMEM記憶體旗標時,會在系統記憶體中建立頂點緩衝區。 使用D3DPOOL_DEFAULT記憶體旗標時,設備驅動器會決定頂點緩衝區的記憶體配置位置,通常稱為驅動程式最佳記憶體。 驅動程式優化記憶體可以是本機視訊記憶體、非本機視訊記憶體或系統記憶體。
使用 IDirect3DDevice9::CreateVertexBuffer 設定D3DUSAGE_SOFTWAREPROCESSING常數,可在頂點緩衝區數據上啟用軟體頂點處理。 在混合模式中,軟體頂點處理需要此旗標。 旗標可能不適用於硬體頂點處理模式。 與軟體頂點處理搭配使用的頂點緩衝區包括下列各項:
- IDirect3DDevice9::ProcessVertices的所有輸入流。
- IDirect3DDevice9::DrawPrimitive 和 IDirect3DDevice9::DrawIndexedPrimitive的所有輸入資料流。
您用來判斷頂點緩衝區的記憶體位置的推理方式 - 系統或驅動程式最佳化 - 與材質的記憶體位置相同。 頂點處理,包括轉換和光源效果,在硬體中最理想的是將頂點緩衝區配置在驅動程式優化的記憶體中,而在軟體中則最適合配置於系統記憶體中的頂點緩衝區。 針對紋理,當紋理配置在驅動程式最佳記憶體中時,硬體點陣化效果最佳,而軟體點陣化最適合系統記憶體紋理。
Microsoft Direct3D 9 支援頂點的獨立處理,而不使用 IDirect3DDevice9::P rocessVertices 方法轉譯任何基本類型。 此獨立頂點處理一律會在主機處理器的軟體中執行。 因此,使用 IDirect3DDevice9::SetStreamSource 設定為來源的頂點緩衝區必須使用 D3DUSAGE_SOFTWAREPROCESSING 旗標來建立。 IDirect3DDevice9::ProcessVertices 所提供的功能,與使用軟體頂點處理時,IDirect3DDevice9::DrawPrimitive 和 IDirect3DDevice9::DrawIndexedPrimitive 方法相同。
如果您的應用程式執行自己的頂點處理,並將轉換、照亮和裁剪的頂點傳遞至渲染方法,則應用程式可以直接寫入頂點至配置於驅動程式最佳化記憶體中的頂點緩衝區。 這項技術可防止稍後進行冗餘複製作業。 請注意,如果您的應用程式從頂點緩衝區回讀數據,這項技術將無法正常運作,因為主機從驅動程式優化的記憶體讀取作業會非常緩慢。 因此,如果您的應用程式需要在處理期間不定期地讀取或寫入數據至緩衝區,那麼使用系統記憶體頂點緩衝區便是較佳選擇。
使用 Direct3D 頂點處理功能時(藉由將未轉換的頂點傳遞至頂點緩衝區轉譯方法),處理可能會在硬體或軟體中進行,這取決於裝置類型和裝置建立的旗標。 建議在集區中配置頂點緩衝區D3DPOOL_DEFAULT,以達到幾乎所有情況下的最佳效能。 當裝置使用硬體頂點處理時,可能會根據旗標D3DUSAGE_DYNAMIC和D3DUSAGE_WRITEONLY進行一些額外的優化。 如需使用這些旗標的詳細資訊,請參閱 IDirect3DDevice9::CreateVertexBuffer。
相關主題