2016-09-10

DX12でバックバッファ毎にGPUの担当を替えてレンダリングを行いたい場合、SwapChain生成後に IDXGISwapChain3::ResizeBuffers1 を呼び出して、マルチGPU用に初期化するのが正しいやり方っぽい。
別カードのレンダリングデータは何時プライマリカードに転送されるのだろうと思うが、それはOS側の担当のようだ。つまりPresentより先の処理。
またしても出てきた ID3D12CommandQueue 問題。
DirectXにはSwapChain生成に使用したキューなんか、逆引き的に取得する機能は無いです。
これが、割り込んで処理する系のツール開発で難しいところ。これを実現する方法はいくつかある。
ちなみにSteamさんは現状マルチGPUは放置しているくさい。
モニターするか、メモリ位置を検出するかどうすっかな。

追記:
メモリから読み出しでいけそう。シングルGPU時もマルチGPU用の所に同時に記録されているっぽい。
しかしメモリ領域大きくてフラットだなw フラグメンテーションや速度低下を嫌った設計なのかな。

追記2:
動作成功。マルチGPU対応の目処がたった。
案外、DX12のマルチGPU化は簡単かな。

0 件のコメント:

コメントを投稿