Why Nostr? What is Njump?
2024-09-04 02:49:49

YoshikuniJujo on Nostr: ...

同期とか非同期とかそのあたりの話で苦労して、コードが荒廃したという。

なんとかうまくいったので、あとはコードのおかたづけをすればいいのだけど、すこし休もうかと。

Vulkanを使うという話なのだけど、たとえばゲームパッドで回転させることのできる「時計」を考える。時計の部分はpangoとcairoを使ってイメージを書き出したうえで、それをテキスチャとしてはりつける。

イメージをvulkanのbufferにコピーしたうえでvulkanのimageにコピーするという処理を行う。この処理がイメージが大きいと0.5秒くらいかかったりする。

で、そのあいだ回転が止まるというのはユーザー体験としては良くない。それでテキスチャの内容の更新を別スレッドにしようとしたのだけど、そうすると「Queueを複数のスレッドから同時に使ってるよ」というエラーが出る。

そのエラーを解消するのにCPU側のセマフォを設定したのだけど、それだけだとうまくいかない。

GPU側に処理を依頼した段階でCPU側は次の処理にうつるので、CPU側がGPU側の処理の終了を待つ必要がある。そのために必要なのがVulkanのFenceだ。

つまり、CPU側でセマフォを用意するだけではなく、GPUをCPUが待つようにするためにFenceも設定しなくちゃならなかったという話。

そして、そこに到達するまでにコードがいろいろとぐちゃぐちゃになったということ。
Author Public Key
npub1a7y7u324paehw2zdx8jfl3t72ue0ls4etfalxhg0z2gad738savqhxfdm2