LoginSignup
2
0

More than 1 year has passed since last update.

Bevyが落ちる時の解決法

Last updated at Posted at 2022-04-11

前々からBevyが途中で落ちる問題がありまして、それを何とかできないかと思い調べてみました。
元記事はGithubです。

使用環境
OS: Windows11 Home
CPU: AMD Ryzen 7 5800H
GPU: NVIDIA GeForce RTX3060 Laptop GPU

発生したエラーメッセージ

ERROR present_frames: wgpu_hal::dx12::instance: ID3D12CommandQueue::Present: Resource state 
(0x800: D3D12_RESOURCE_STATE_COPY_SOURCE) (promoted from COMMON state) of resource 
(0x000002580E633720:'Unnamed ID3D12Resource Object') (subresource: 0) 
must be in COMMON state when transitioning to use in a different Command List type, 
because resource state on previous Command List type : D3D12_COMMAND_LIST_TYPE_COPY, 
is actually incompatible and different from that on the next Command List type : 
D3D12_COMMAND_LIST_TYPE_DIRECT. [ RESOURCE_MANIPULATION ERROR #990: RESOURCE_BARRIER_MISMATCHING_COMMAND_LIST_TYPE]

どうやら2つのGPU(CPU内蔵GPUと外部GPU)が競合していることが原因っぽいです。
私の場合、この問題は以下のコードを追加することで解決しました。

use bevy::prelude::*;
use bevy::render::options::{Backends, WgpuOptions}; // <- Bevy 0.6
use bevy::render::settings::{Backends, WgpuSettings}; // <- Bevy 0.7

fn main() {
    App::new()
        // バックエンドをVULKANに指定(どれが最適なのかは環境によって異なる)
        .insert_resource(WgpuOptions {
            backends: Some(Backends::VULKAN),
            ..Default::default()
        })
        .add_plugins(DefaultPlugins)
        .run();
}

ですが、この方法では外部GPUが使われず内臓GPUが使用されました。
もし、外部GPUで実行したいと考えているのならば代わりに片方のGPUを無効にする方法を提案します。
その場合、バックエンドの設定は削除してください。

デバイスマネージャーから無効にする方法もありますが、以下の方法を推奨します。

NVIDIA 設定 > ディスプレイモードを管理する > NVIDIA GPU のみを選択

これらの方法で落ちることはなくなりましたが、外部GPUの時のフレームレートが100FPS前後なのはおかしい。
どなたか原因がわかりましたら教えてください。

あと、WSL2でのBevyの起動ができない原因がわかる方がいましたらお願いします。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0