2018年4月29日日曜日

画面側描画について

wOCEでは今のところサーバ側で描画して画面へ転送という処理にしているが、これを画面側でも描画できるようにしたくて最初は画面側のプロセスで描画しようと思っていたけど共有メモリを確保して別プロセスでやるほうがよさそうだ。

画面側の処理は時間に煩いけど描画処理は時間が読めないのでプリエンプトできないと処理が回らんし、画面専用機をシングルコアで使うとコアが余ってしまう。

てーことで、画面側は画面側描画指定CanvasWidgetは共有メモリと描画用プロセスを持ってて描画コマンドは描画用プロセスへ回す。GC消滅コマンドで描画用プロセスはアップデートコマンドを範囲と共に送ってくるので共有メモリからテクスチャへ転送...updateCanvasコマンドは共有メモリも描いてからテクスチャへ転送...。てなところか。

これで画面側描画であろうとなかろうと同じ使い方ができるというもの。

2018年4月27日金曜日

マルチスレッド描画は失敗

だいたいは動くけど

  • たまにamdgpu_drm.soの中でsegfault
  • テクスチャのアップデートが中断されて、新たにテクスチャが書き込まれるまで再開されない
みたいな問題が消えない。描画とテクスチャのアップデートを排他にしてみたら前者は発生しなくなったようだけど後者は残ったままだ。これでは困るのでマルチスレッド描画は凍結。少なくともVulkanに対応するまでは。

マルチスレッド描画はフレーム非同期コマンド蓄積へのステップだったのでこれはかなーり残念な結果であるとともにテクスチャのアップデートまでフレーム同期でやらにゃならんということでもある。

テクスチャアップデートだけフレーム同期としてもいいわけだが。

引っ越すことにした。

引っ越し先。 見えるかな。