Chiharu の日記

絵描き C/C++ プログラマーの日記です。

Parallel force - パラレル・フォース 〜バックバッファのフリップ

もー、バックバッファ コピーの設計が気持ち悪くて気持ち悪くて再設計しました。詳細はこちら
結局フリップに対応しました。多分、これでバックバッファの扱いは完成形です。前よりちょっと速くなっているはず。SSE2 使ってキャッシュ制御して、やっと落ち着きました。『合成バッファ(オン キャッシュ)』『バックバッファ(転送待ち)』『バックバッファ(転送中)』の 3 つのバッファを下記のように扱うようにしました。

  1. 全ての分割領域につき、下記を並列処理する。
    • 直前フレームの更新領域が現フレームの更新領域からはみ出す場合、『バックバッファ(転送中)』を『合成バッファ(オン キャッシュ)』にコピーする。
    • 『合成バッファ(オン キャッシュ)』に現フレームを描画する。
    • 『合成バッファ(オン キャッシュ)』を『バックバッファ(転送待ち)』にノンテンポラル転送する。
  2. 全ての分割領域の描画完了を待機。
  3. 直前フレームである『バックバッファ(転送中)』の非同期転送完了を待機。
  4. 『バックバッファ(転送待ち)』と『バックバッファ(転送中)』を入れ替える。
  5. 現フレームである『バックバッファ(転送中)』の非同期転送開始。

上記から、直前フレームを表画面に転送しながら、現フレームの描画を描画できるようになってます。以前『表画面への転送を非同期化』と言っていましたが、こんな感じの設計に落ち着きました。
(追記)
会社辞めました。1 月から転職です。私、普通の社員に戻ります。捨てる神あれば拾う神あり、という感じ。がんばろう。