2022/12/15

Wine 8.0-rc1のDirect3D実装におけるVulkanレンダラをRPGツクール作品とWOLF RPGエディター作品で試す

ざっと試してみた印象としては、いずれも実装初期と比べると開発はそれなりに進んではいるが、まだ実用的な段階にはない。ただ、次期の9.0や更にその次の安定版までには使い物になるレベルになっているかもしれない。

  1. 設定と確認
  2. 試した結果
    1. WOLF RPGエディター 2.2x系作品(D3D11のみ)
    2. WOLF RPGエディター 2.2x系作品のD3D9設定時と2.10
    3. RPGツクール2000/2003作品
    4. RPGツクールVX/VX Ace作品

設定と確認

  • wine reg add "HKCU\Software\Wine\Direct3D" /v renderer /t REG_SZ /d vulkan /fでVulkanを、wine reg add "HKCU\Software\Wine\Direct3D" /v renderer /t REG_SZ /d gl /fでOpenGLを強制指定できる
  • VK_INSTANCE_LAYERS=VK_LAYER_MESA_overlayを指定することでVulkanが使用される場合に分かるようにする
  • GALLIUM_HUD=fpsなどを指定することでOpenGLが使用される場合に分かるようにする
  • WINEDEBUGvulkanなどを含めて出力を見る形でも確認はできる

試した結果

WOLF RPGエディター 2.2x系作品(D3D11のみ)

Vulkanレンダラの実装初期から正常動作している。

WOLF RPGエディター 2.2x系作品のD3D9設定時と2.10

落ちることはないが、画面が真っ黒(オーバーレイは出る)で、エラーが繰り返し出ている。

02ec:fixme:d3d_shader:shader_spirv_compile_shader
02ec:err:d3d_shader:shader_spirv_compile_shader Failed to compile DXBC, ret -3.
02ec:err:d3d:wined3d_context_vk_apply_draw_state No pipeline layout set.
02ec:err:d3d:adapter_vk_draw_primitive Failed to apply draw state.
02ec:fixme:d3d_shader:shader_spirv_compile_shader Shader log:
02ec:fixme:d3d_shader:shader_spirv_compile_shader     : E0002: Invalid DXBC magic.
...

libs/vkd3d/libs/vkd3d-shader/vkd3d_shader_main.cにあるvkd3d_shader_compile()に失敗しているらしく、Shader log:以下のエラーが解消しなければ動作はしないものと思われる。Invalid DXBC magic.libs/vkd3d/libs/vkd3d-shader/dxbc.c内のparse_dxbc()から出ているが、vkd3dはソースが同梱されているものの外部プロジェクトであることもあって、8.0の正式版までに不具合が解消する可能性は低そう。

RPGツクール2000/2003作品

X11環境では、XWayland上でもXorg上でも動作しなかった。

0104:trace:vulkan:thunk32_vkGetPhysicalDeviceSurfaceFormatsKHR 0x1551810, 0x681019e0, 0x481fc18, 0x6c966c8
0104:trace:vulkan:X11DRV_vkGetPhysicalDeviceSurfaceFormatsKHR 0x7d318220, 0x68101a10, 0x481fc18, 0x6c966c8
0104:warn:d3d:get_swapchain_fallback_format Unhandled format 0x4.
0104:warn:d3d:wined3d_swapchain_vk_select_vk_format Failed to find Vulkan swapchain format for WINED3DFMT_B5G6R5_UNORM.
0104:fixme:d3d:wined3d_swapchain_vk_select_vk_format Failed to find Vulkan swapchain format for WINED3DFMT_B5G6R5_UNORM.
0104:err:d3d:wined3d_swapchain_vk_create_vulkan_swapchain Failed to select swapchain format.
0104:trace:vulkan:thunk32_vkDestroySurfaceKHR 0x15517f8, 0x681019e0, 0
0104:trace:vulkan:X11DRV_vkDestroySurfaceKHR 0x7dd02690 0x68101a10 (nil)
0104:trace:vulkan:thunk32_vkAcquireNextImageKHR 0x15506c8, 0x7b5734f0, 0xfffffff
fffffffff, 0x6c0108006c0118, 0x0, 0x481fcf8
Assertion failed: !status, file dlls/winevulkan/loader_thunks.c, line 39

開発中のwinewaylandのパッチの含まれるパッチ作者のリポジトリから取得してビルドしたものをPlasma Wayland環境でDISPLAY= WAYLAND_DISPLAY=wayland-0指定で動かすと、全画面時にVulkanで動作したのを確認できた。WINED3D_LOCATION_DRAWABLEのメッセージはその際にも出るので、関係ない気もするが…

4:3比率の画面が拡大されて縦方向には合うのだが、ディスプレイが横長だと表示内容が左側に寄ってしまって右側の空いた場所が黒にはならずに背後のウィンドウなどが見えてしまうという問題はある。他にもAlt-Tabを押すなどして他のウィンドウに切り替えてしまうとゲームのウィンドウが隠れて戻れなくなってしまう問題もあるが、これらはOpenGLレンダラでも発生するため、winewaylandかWaylandコンポジタ(ここではkwin_wayland)のどちらかの問題の可能性がある。

RPG_RT.exe0 0 Windowの引数を付けるといずれの環境でも起動するが、Vulkanのオーバーレイが出ないので、Direct3Dは使用されていないものと思われる。

RPGツクールVX/VX Ace作品

落ちることはないが、ウィンドウモード時には画面が真っ黒になる。ただ、内部で起きている事象はWOLF RPGエディター作品のD3D9とは全く異なるように見える。

0240:fixme:d3d:get_vulkan_physical_device Multiple physical devices available.
0250:err:d3d:wined3d_texture_vk_load_texture Unimplemented load from WINED3D_LOCATION_DRAWABLE.
0250:err:d3d:vk_blitter_blit Failed to load the destination sub-resource.
0250:err:d3d:wined3d_texture_vk_load_sysmem Unimplemented load from WINED3D_LOCATION_DRAWABLE.
0250:err:d3d:surface_cpu_blt Failed to load the destination sub-resource into WINED3D_LOCATION_SYSMEM.
0250:err:d3d:wined3d_texture_invalidate_location Sub-resource 0 of texture 0096F520 does not have any up to date location.
0250:err:d3d:wined3d_texture_load_location Sub-resource 0 of texture 0096F520 does not have any up to date location.
0250:fixme:d3d:wined3d_texture_vk_prepare_location Unhandled location WINED3D_LOCATION_DRAWABLE.
0250:fixme:d3d:wined3d_texture_vk_prepare_location Unhandled location WINED3D_LOCATION_DRAWABLE.
...

Alt-Enterなどで全画面にして動かすと、winewayland(DISPLAY= WAYLAND_DISPLAY=wayland-0指定)ではRPGツクール2000作品と同様に動作するが、Plasma Wayland環境では表示内容が左上に寄るし、Xorg環境ではディスプレイや設定などによっては表示内容が横に引き伸ばされて長くなる。

使用したバージョン:
  • Wine 8.0-rc1
  • Plasma 5.26.4
  • Mesa 22.3.0