Android12以前の端末(Vulkan1.1)でWarmupAllShaders()を呼ぶとクラッシュする

Android12以前の一部端末でクラッシュする問題が発生

Rail World!のAndroid版をリリース後、一部端末でクラッシュする問題が発生しました。

Android10, 11, 12の端末で発生している様子で、発生タイミングは決まってシェーダーコンパイルが実行される最中のため、どうもVulkanが怪しい。

急遽メルカリでAndroid10の実機(Huawei P30 lite)を購入して色々と試行錯誤してみました。

まずはVulkanからOpenGLESに変更した所クラッシュしなくなったので、Vulkanが原因なことは間違いない様子。

Android12以前はOpenGLESで実行することも考えたものの、今度は環境光が全く適用されなくなる(こちらは未だに原因不明)など、別の問題が起こったので諦めました。

次に、Vulkanに戻してlogcatを見てみると、ネイティブコードの実行中にエラーが起きている様子。

Android12以前ではVulkanのバージョンが古いようなので、Vulkanのバージョン起因のバグっぽい。

MultithreadedRenderingをオフにしてみたり、texture streamingをオフにしてみるも効果なし。

途方にくれていた所、そういえばWarmupAllShaders()を呼んでいたことを思い出し、オフにしてみるとクラッシュはあっさり解消しました。

今回の問題は、検証機がどれもAndroid13以上だったので発覚しませんでした。

覚悟はしていましたが、iOSと違いAndroidは機種やOSバージョン固有の問題がやはり起きますね。

コメント

  1. Good shout.

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