YoshikuniJujo on Nostr: ...
同期とか非同期とかそのあたりの話で苦労して、コードが荒廃したという。
なんとかうまくいったので、あとはコードのおかたづけをすればいいのだけど、すこし休もうかと。
Vulkanを使うという話なのだけど、たとえばゲームパッドで回転させることのできる「時計」を考える。時計の部分はpangoとcairoを使ってイメージを書き出したうえで、それをテキスチャとしてはりつける。
イメージをvulkanのbufferにコピーしたうえでvulkanのimageにコピーするという処理を行う。この処理がイメージが大きいと0.5秒くらいかかったりする。
で、そのあいだ回転が止まるというのはユーザー体験としては良くない。それでテキスチャの内容の更新を別スレッドにしようとしたのだけど、そうすると「Queueを複数のスレッドから同時に使ってるよ」というエラーが出る。
そのエラーを解消するのにCPU側のセマフォを設定したのだけど、それだけだとうまくいかない。
GPU側に処理を依頼した段階でCPU側は次の処理にうつるので、CPU側がGPU側の処理の終了を待つ必要がある。そのために必要なのがVulkanのFenceだ。
つまり、CPU側でセマフォを用意するだけではなく、GPUをCPUが待つようにするためにFenceも設定しなくちゃならなかったという話。
そして、そこに到達するまでにコードがいろいろとぐちゃぐちゃになったということ。
Published at
2024-09-04 02:49:49Event JSON
{
"id": "e315768fc698b3c98450b4085e7b981d8ba3745c67ca09c23019269f9b6f94f2",
"pubkey": "ef89ee45550f7377284d31e49fc57e5732ffc2b95a7bf35d0f1291d6fa278758",
"created_at": 1725418189,
"kind": 1,
"tags": [
[
"content-warning",
"長いので。VulkanとS"
]
],
"content": "同期とか非同期とかそのあたりの話で苦労して、コードが荒廃したという。\n\nなんとかうまくいったので、あとはコードのおかたづけをすればいいのだけど、すこし休もうかと。\n\nVulkanを使うという話なのだけど、たとえばゲームパッドで回転させることのできる「時計」を考える。時計の部分はpangoとcairoを使ってイメージを書き出したうえで、それをテキスチャとしてはりつける。\n\nイメージをvulkanのbufferにコピーしたうえでvulkanのimageにコピーするという処理を行う。この処理がイメージが大きいと0.5秒くらいかかったりする。\n\nで、そのあいだ回転が止まるというのはユーザー体験としては良くない。それでテキスチャの内容の更新を別スレッドにしようとしたのだけど、そうすると「Queueを複数のスレッドから同時に使ってるよ」というエラーが出る。\n\nそのエラーを解消するのにCPU側のセマフォを設定したのだけど、それだけだとうまくいかない。\n\nGPU側に処理を依頼した段階でCPU側は次の処理にうつるので、CPU側がGPU側の処理の終了を待つ必要がある。そのために必要なのがVulkanのFenceだ。\n\nつまり、CPU側でセマフォを用意するだけではなく、GPUをCPUが待つようにするためにFenceも設定しなくちゃならなかったという話。\n\nそして、そこに到達するまでにコードがいろいろとぐちゃぐちゃになったということ。",
"sig": "ef3b8de94501e247d4a991fc7788ea998b3dd25797e2c4b564ded20df92f85feda8a4bc76cc54a880432289b02eed286311a4eb214ec68c475b43db44d22b988"
}