拙作ソフトの動作確認環境として Wine を追加しようと思い立ち, まずは KNOPPIX 5.3.1 + Wine 0.9.54βや Ubuntu 8.04 LTS + Wine 0.9.60 といった環境でテストを始めたのは, もう 12 年も前になります。 当時は Wine がβ版だったこともあって, Windows プログラムの実行すら ままなりませんでした。 が, その後 Wine の開発が進み VMware のほうでもゲスト環境での Direct3D や OpenGL といった機能への対応化が行われたことから, 「VMware Workstation 12.5.8 Pro Build 7098237」のページで少し触れているように, Ubuntu 16.04 LTS ゲスト辺りでは『千の刃濤、桃花染の皇姫』といった DirectX 9.0c 上の Direct3D を必要とするソフトも動作するようになっています。 さすがに 3D バリバリのゲームやベンチマークまでは無理ですけれど…。
…と, そこまでは良かったのですが, いろいろなソフトを入れたり設定を弄ったり, はたまた Ubuntu 18.04 LTS や 18.10 LTS へアップグレードしたり…と少々お遊びが過ぎてしまい, 何時の間にか「3D ゲームは動作するのに拙作 LHMelt を始めとした普通のソフトは動作しない」という本末転倒の状況に陥ってしまいました。 (笑) 幸い過去環境のバックアップが採ってありますから, そこから改めて環境構築を進めることは可能です。 しかし, Wine の版が 1.x や 2.x では そろそろ動作確認用としては使えなくなってきているのも事実です。 そこで, 最近の版で新たに環境を作成することにしました。
というわけで 1 時間程度でサクッと構築した環境が以下のとおり:
まずは左上画像のとおり OS が Ubuntu 20.04.1 LTS となっています。 最新は 20.10 LTS ですが, まだまだ そちらのほうが各種情報を得やすい…ということで, 20.04 を選択しています。 ゲストハードウェアの版は 3D を有効化した 12.0, VRAM 容量はメインメモリー 2GB での推奨値 768MB にしています。 Open-VM-Tools は DVD イメージに入っていたものを そのまま使っていて, 自前ではインストールしていません。
一方の右上画像…。 Wine は 6.0 RC3…つまり最新の Staging をインストールしました。 2.x という あまりにも古い版から見れば 5.3 も 6.0β も同じでしょうから。 (^^;) あと, 最初期から それでテストをしているので, 少々の足枷ではありますが x64 版での使用となっています。
環境構築が終わったので, 早速各種ソフトを試してみたわけですが…。 LHMelt を始めとした拙作ソフトが普通に動作するのは当たり前として, DirectX 対応ソフトまでが特に問題なく動作するのに対して, Direct3D 対応ソフトだけは どれも動作しませんでした。 これまで それが可能だった設定を今回同じく行っているにも拘わらずです。
「はて? 何故なのかしら?」と暫く悩んだあげく「こういった時は Wine のログですわ, お姉様…」と左上画像のようにログを吐かせながら実行してみたところで原因が判明しました。 ログとして出力されているエラーが「err:d3d:resource_init Out of adapter memory.」…それの意味するところは「(Wine の認識している) ビデオメモリー不足」です。 いや, 有名どころのエラーではあるのですが, 遙か彼方の昔に お目に掛かっただけで, その後作成した いくつもの Ubuntu 環境で見掛けなかったことから, すっかり頭から抜けていました。
ともあれ, 原因さえ分かってしまえば やることは一つ。 右上画像のごとく Wine に「ビデオメモリーが 1GB あるのよ~」と暗示を掛けておきます。 Winetricks でいうところの「videomemorysize=1024」ですね。 普通は そちらで行うことになると思います。
設定を行った結果は…:
左上画像のとおり無事 Direct3D 対応ソフトが動作するようになりました。 当然ですが拙作 LHMelt 等も普通に動作しています。 …動作しているのですが, ある意味これは凄いことだったりします。 今の LHMelt や UNLHA32.DLL は例の DLL ハイジャック対策で「LHMelt 等での DLL ハイジャック対策覚え書き」の記事で書いたような複雑怪奇な処理を行っています。 それが ちゃんと機能しているのですから, Wine のレイヤー処理での API 再現度は かなり高いと言えるでしょう。
余談ですが, 環境構築後かなり初期の段階で実はヒントが提示されていました。 それは右上画像は glxinfo のログです。 よく見ると「Video memory: 1MB」と あり得ない数値になっています。 ここは本来であれば 768MB となっているところで, Mesa のソフトウェア処理では 1024MB と表示される箇所です。 その辺りもあって, 暗示での VRAM 容量を 1GB としているのでした。
さて, 無事 Direct3D 対応ソフトも動作するようになりましたので, お遊びで VMware の Windows ゲストの動作確認で使用しているベンチマークや体験版ソフトを いくつか試してみることにしました。 掲載順は「VMware 上で動作した DirectX 使用ソフト (DirectX のバージョン別)」と同じく DirectX のバージョン順とします。
例を挙げる前に まずは各環境の お温習いです。 ホストが東芝 dynabook Qosmio T851/D8CR と古い PC なのは置いておいて, 仮想 PC ソフトとして VMware Workstation 12.5.8 Pro を使用していて, その上で Ubuntu 20.04 LTS 環境を素直に構築し最新 Staging な Wine 6.0 RC3 をインストールしています。 あえて x64 環境を選択し, Winetricks で取り込んだのはフォントを除けば quartz のみとなっています。
そのフォントですが, どこまで取り込むかは各ユーザーしだいですが, fake japanese や Takao font など日本語フォントのエイリアス設定を伴うフォントを取り込まないと, InstallShield 方面でフォントが表示されず豆腐文字だらけになってしまいます。
Winetricks では, あとは上で書いたように「videomemorysize=1024」を行っています。 これは環境によりますので「必要なら」といった趣ですね。 Winecfg は特に何も弄っていません。 既定値である Windows 7 設定を確認することと, 適当なサイズで仮想デスクトップをエミュレートさせたほうが, 全画面表示のソフトの安定度が上がる…といったくらいですね。
VMware の設定ファイルに追加している項目は以下のとおりです:
mks.enable3d = "TRUE"
svga.graphicsMemoryKB = "786432"
mks.enableDX11Renderer = "FALSE"
mks.enableD3DRenderer = "FALSE"
mks.enableGLRenderer = "TRUE"
関連性があることから一緒に並べてありますが, 上 2 行は既定値です。 それはともかく何をやっているかというと, 順番に:
- 仮想環境の 3D 機能を有効化 (既定値)
- VRAM 容量をメインメモリー 2GB での推奨値である 768MB に設定 (既定値)
- (VMware の) DirectX 11 によるレンダリングを無効化
- DirectX 9.0 によるレンダリングを無効化
- OpenGL 3.3 によるレンダリングを有効化
といった感じです。 DirectX 11 でのレンダリング無効化は VMware 12 時代の定番設定でもありますね。 が, ここでは DirectX 方面無効化の一環として指定しています。 DirectX 9.0 でのレンダリング無効化は「そもそも DirectX を使用しないため」の指定で, その代わりとして OpenGL 3.3 によるレンダリングを有効化しています。 当該ゲストが OpenGL を本家とする linux 系 OS ですから, 無用な変換と不具合を減らすべく OpenGL 系を指定しています。
それでは順番に例を挙げることとしましょう。 最初は DirectX 7.0 より前のソフトです:
『Diablo II』は DirectX 6.0 世代のソフトで DirectDraw と Direct3D の どちらでも動作しますが, インストール時の検査で Direct3D が認識され, ここでも ちゃんと Direct3D で動作しています。 DirectX 6.0 ということでハードウェア T&L には未対応なのですが, それによる速度低下等は特に発生していません。 古い VMware の時代と異なり今では (ホストでは) DirectX 11 や OpenGL 3.3 で描画が処理されるからなのでしょう。
ちなみに, もう一つ例に挙げようとしていた『Age of Empires II (AOK)』は例外が発生して動作しませんでした。 古い DirectX (の一部 DLL) をインストールすれば動作するのだと思いますが, そこまでは試していません。
続いては DirectX 7.0a 世代のソフトです:
まずは左上画像…。 曲がりなりにも『3DMark2000』が完動するのであれば, そりゃあ紙芝居ゲーくらいは動作するでしょう…と言えるかもしれません。 (^^;) 昔は このような「真っ当な 3D 表示を行うソフト」は動作しませんでしたので, 着実に Wine は進化しているようです。
続いて右画像の『秋色恋華』ですが, DirectDraw で描画を行うソフトなので一番動作しやすい部類と言えるでしょう。 感覚的には, 拙作 LHMelt のような普通のソフトが動作するのであれば動作して当然…といったところでしょうか? この辺りが動作しないようなら, 何か根本的な部分で問題を抱えていることになります。
さらには DirectX 8.0 世代のソフトです:
まずは左上画像の『3DMark2001 SE』ですが, ベンチマーク自体は完動するもののデモは実行不可だったりします。 が, これは Windows ゲスト…どころかホストでも同じで, Windows 7 環境などでは元々互換性アシスタント機能で互換性設定を「Windows XP」にしないと動作しませんから, Wine に非はありません。 過渡期の DirectX 8.0 ということで DirectSound 周りに問題を抱えているのでしょう。 ちなみにサウンドをオフにするとホスト共々デモが動作するようになります…音なしでは半分意味がありませんけれど。 (^^;)
一方は右画像の『FORTUNE ARTERIAL』…。 DirectX 8.0 世代ということでエフェクトの表示などに専用機能を使っていたりしますが, DirectDraw レベルのソフトには変わりありませんので, 特に何もすることなく動作すると思います。
さて, 3DMark の類いは別として, ここまでは 3D 機能への対応度が比較的低い Wine 環境でも動作するソフトばかりでしたが, ここからは OS や Wine が ちゃんと 3D に対応していないと動作しないソフトばかりとなります。
まずは一部の機能について DirectX 9.0 を必要としているソフトです:
左上画像は『プリミティブリンク』ですが, このソフトでは画面の拡大や縮小を伴ったスクロール, 特定領域でのクリッピングや座標変換を伴っての複数動画再生 (要は いろんな方向を向いたテクスチャー上での再生), エフェクト, そして それらの透過を伴った重ね合わせ…といった特定用途のため (だけに) DirectX 9.0 や Direct3D の機能が使用されています。 この世代では「DirectX = Direct3D」といった雰囲気がありますので, ちゃんと 3D 機能にも対応していないと DirectX 自体が上手く動作しません。
右上画像の『Wiz ANNIVERSARY』も同じようにエフェクト表示などで DirectX 9.0 の機能が使用されています。 ちなみに この体験版には ちょっと癖があって, 付属の DirectX 9.0c をインストールしないと動作しない環境が多々発生するのでした。 その辺りもあって ちょくちょく仮想 PC 環境の動作確認用に使っています。 (笑)
最後は DirectX 9.0 を必要とする Direct3D 対応ソフトです:
左上画像の『タイムリープぶーとべんち』ですが, 本格的なベンチマークとは比較すべくもないのですが, HDR, セルフシャドウ, ソフトフィルタ, 被写界深度, そしてバックハイライトといった機能の有無を選択できたり, T&L HAL, HAL, Emulation といったハードウェア依存度を選択できたりと簡易チェックに使えるのと, また経験則的に「これが動作するなら多くのソフトは大丈夫」という一つの指標としても機能することから, 好んで採用しているソフトです。
このソフトが動作するかどうかで「紙芝居系のゲームしか動作しないのか真っ当なゲームも動作するのか?」を簡易的に判別できます。 これが動作しないようなら, 下で挙げている『STREET FIGHTER IV Benchmark』以降のソフトは基本的に動作しません。 あ, ちなみに ここ以降のベンチマークのスコアを気にしてはダメです。 ただでさえ 9 年も前の PC なのに, それを Windows ゲストですらない Wine を擁した Ubuntu ゲストという特大ハンデ有りの環境で実行しているのですから…。 ホストの 80 ~ 90% の速度で動作する Windows ゲストと比較するのは無謀というものです。 (^^;)
右上画像は『千の刃濤、桃花染の皇姫』ですが, 紙芝居系は紙芝居系でも上で挙げてきた同様のゲームとは一線を画します。 というのも, 製品版では変更されましたが『穢翼のユースティア』の体験版が AGP メモリーを必須としていた過去があって, オーガスト勢では それまでと それ以降の製品とで Direct3D への要求度合いが異なっています。 その辺りもあって この体験版も確認用として御登場頂いているのでした。 あと, 動画系への要求度合いも意外に高いので, そちら方面のチェック用としても使えます。 (他ソフトは動作するのに, この体験版での視点変更や日付切り替わりの際に落ちてしまう…といった形で表面化する。)
『STREET FIGHTER IV Benchmark』は比較的あっさりと動作する代わりに, 「まともに使えるのか?」の指標として使えます。 この画像の例も該当しますが 60 FPS に届かないとゲームにならず, このベンチでは それが「台詞 (のサウンド) とキャラの動きがずれる」という形で表面化します。 (サウンドでは とっくに喋り終わっているのに, キャラ (の描画) が喋り続ける。)
一方の『メギドベンチ』は 3DMark06 と同様に比較的テクスチャーなどの使用量が多いことから, 機能の可否ではなく その能力的指標を計るものとして使えます。 能力が不足すると, まずはベンチ後半でのテクスチャーの ちらつきや (色の) 反転といった形で表面化し, さらに不足しているようだと 2 週目ベンチの切り替わりタイミングでエラー終了してしまいます。
『「ぐるみん」ベンチ』は, Direct3D の要求度合いは『タイムリープぶーとべんち』以降と同レベルながら, それらの中で最軽量組の指標として使えます。 これの平均スコアが 10000 を切るようなら それが可能だったとして, Wine で Direct3D 対応ソフトを使うのは無理と言えるでしょう。
ちなみに, ここまでのソフトは右上画像を見てのとおり quartz のみ Winetricks を使ってネイティブモジュールを組み込んでいます。 これがないと動画系は ほぼ全滅で, ここまで挙げたソフトの殆どが動作しません。
…と, ここまでで 3DMark03 以降を挙げていないのには理由があって, 実は手元にあった各種 3DMark の版が少々古く, それらでは「Invalid Float Operation」エラーで実行不可だったのでした。 手元の Windows ゲストやホストでは何の問題もなく動作していたのでベンチ側の問題とは気付かなかったのですよね。 試しに最新版へ更新してみたところ, あっさりと動作しました。 (^^;)
まずは 3DMark03 です:
値が低いのはホストの能力を考えて当たり前ながら, 得手不得手の傾向を伺う足しにはなると思いますので, スコアについても挙げてあります。 Feature Tests を行うために, 3DMark03 以降は Pro 版や Advanced 版を使用しています…が, 今回のテストでは特に違いがなかったことから 03 のみ Free 版時の画像になっています。
3DMark 2000 の ところでも書きましたが, こちらについても「3DMark03 が完動するなら, そりゃ大抵の Direct3D ソフトが動作するよね~」と言えそうです。 あ, そうそう。 3DMark2001 と異なり, 03 以降は普通にデモが正常動作します。 (笑) あと, 3DMark03 はネイティブ版だと そこかしこで色がおかしくなるので, 内蔵版の DirectX 9.0 を使ったほうが安定します。 可能なら設定を使い分けると良いでしょう。
お次は 3DMark05…:
意外にも最新版さえ使えば 3DMark05 も正常動作します。 が, さすがに元々重量級なだけあって, もはや「単に計測できるだけ」と言えそうな事態へ陥りつつあるのでした。 もっとも, 自身としては その「動作することを確かめる」のが目的ですので, それで十分ですけれども。 何しろ本命は通常アプリである拙作ソフトの動作確認で, Direct3D 方面は単なる余興なのですから…。 (^^;)
最後は 3DMark06 です:
「動くはずないよね~」と お遊びモードでインストールしてみたのですが, 動作してしまいました。 (笑) ただ, さすがに quartz だけでは無理だったようで, ネイティブ版 DirectX 9.0c をインストールする必要がありました。 さらに, Visual C++ のランタイムなど あれこれとセットでインストールされますので, これまでの環境とは毛色が異なっています。 幸い それで動作しなくなるようなソフトは有りませんでしたけれど…。
3DMark05 と異なり こちらは真の意味で「単に計測できるだけ」です。 ホストの能力不足が祟って扱えるテクスチャーの量が足りないわ処理が間に合っていないわ…と, そこかしこでテクスチャーが黒抜きや色反転を起こしてしまっています。
といった感じで, Ubuntu 20.04 LTS + Wine 6.0 RC3 な環境では通常のソフトのみならず, 予想以上に Direct3D ソフトが そのままで動作してしまう結果となりました。 これくらい動作すると, そろそろ実機であれば実用を視野に入れて良いかもしれません。 個人的には M1 MacBook 方面を野望としたいところです。 (笑)
Jan.3,2021 追記
Win64 版 Wine と Win32 版とでは少々事情が異なりますので, 改めて Ubuntu 20.04 LTS + Wine 6.0 RC4 (Win32) な環境を作成し, その手順を簡単に纏めてみました。
|