Radeonで扱えない深度テクスチャ形式の話

発端はこちら。

VRChatにて、「VR宇宙博物館 コスモリア Cosmoria」ワールドに入ろうとすると、ロード中にクラッシュしてしまうというもの。

VRChat - Home
VR宇宙博物館 コスモリア Cosmoria by vsp_vrc - a virtual reality world on VRChat

RX7000シリーズが対象になっているようですが、RX6000シリーズでも同様です。ドライバのバージョンという関係でもなさそうでした。

D24_UNORM_S8_UINTの深度テクスチャフォーマットは対応していない

VRChatのログ(\AppData\LocalLow\VRChat\VRChat内)を確認したところ、一番最後にRenderTextureの生成に失敗したところでログが途切れていることが分かりました。

RenderTexture.Create failed: depth/stencil format unsupported - D24 UNorm S8 UInt (92). There is no compatible format on this platform or this fallback to a compatible format is disabled in the import inspector.

サポートしていないフォーマットであるか、フォールバックが無効になっているという感じですね。

さて、ここでサポートしていないとされる「D24 UNorm S8 UInt」とやらですが、素人なりにあれこれ調べてみるとRadeonでは対応していなさそうな情報が少しだけ見つかりました。

DirectXではなくVulkanの情報ですが、D24_UNORM_S8_UINTは非対応でD32_SFLOAT_S8_UINTの深度テクスチャを使う必要があるようです。

[Vulkan] RadeonでVK_FORMAT_D24_UNORM_S8_UINTのdepth stencilテクスチャが作れない
近年多く使われていたD24_UNORM_S8_UINTのdepth stencilテクスチャはPCのVulkanで生成できないケースがあります。例えば、Radeon 560 RXでは、D24_UNORM_S8_UINTが未サポートです。代わ...

MESAが出しているAMD GPU向けのVulkanドライバー「RADV」のBugzilla(bugs.freedesktop.org/show_bug.cgi?id=106528 ※現在証明書切れ)にも、サポートしていない旨が書かれていました。32bitフォーマットと使用VRAM量が変わらないことや、RadeonSIでは内部的に32bitを使用していること、AMDVLKでも非サポートだし仕様で求められていないというのが主な理由のようです。

D24_UNORM_S8_UINTは非対応でも、D32_SFLOAT_S8_UINTを使えばほとんどの場合問題ないとのこと。

無事直った

RadeonVRの会にて情報提供をしたところ、該当する箇所があったので修正したとのことです。こちらでもワールドに入れることを確認しました。無事直ったヤッター。

Discordサーバー「RadeonVRの会」に参加しよう!
DiscordでRadeonVRの会コミュニティをチェック! 501人のメンバーと交流し、無料の音声・テキストチャットを楽しみましょう。

D24_UNORM_S8_UINTには気をつけよう?

NVIDIA GeForceの他には、QualcommのAdreno、ArmのMaliでは扱えるフォーマットなので、所々使われている可能性はありそうです。例えば、買ってきたアセットに設定されていた深度テクスチャがD24_UNORM_S8_UINT形式だったということはありそうですね。

エラーメッセージを見た限りでは、対応できる形式にフォールバックすることもできるみたいですが、そこまではよく分かりませんでした。

タイトルとURLをコピーしました