- ベストアンサー
NVIDIAカードで画面回転時の速度低下について
- NVIDIAカードの画面回転による速度低下について質問します。
- 回転した画面でのプルダウンメニューやFLASHムービーの動作が遅くなる問題が発生します。
- さまざまな環境で回転を試していただき、速度低下が発生するかどうかをご報告いただきたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ご指摘のとおり、私の回答ではGPUに特化したドライバの動作としては説明がつかない部分がありました。先の回答は2Dの機能のみを使う形で記述しておりましたが、ざっと調べてみたところ、ATIやnVidiaのポートレート表示ドライバではおそらく3D機能を流用することでポートレート表示を実現しているようです。(下調べをしてから回答するべきでした。すみません。) 以下は、なぜATIとnVidiaで現状差が付いているのか、その原因についての推測です。 ご存知のとおりGPUは任意の平面画像(テクスチャ)を任意の多角形平面領域(ポリゴン)の上に表示する機能を持っており、この2つの平面の向きは自由に変えることができます。最近のGPUでは非常に大きなテクスチャでも高速にレンダリングすることができるので、この機能を使えば「走査の順番の入れ替え」を明示的に行うことなく、デスクトップに相当するテクスチャを90度向きの違う平面上にレンダリングすることが可能になります。 このとき、データの形式(ランドスケープ/ポートレートの別)と処理の流れは、おおむね次のようになっていると考えられます。 1. Windowsの2D画像データ(ランドスケープ) ↓↑(転送):時間がかからない 2. テクスチャメモリ(ランドスケープ) ↓ (回転&転送):時間がかかる 3. ビデオメモリ(ポートレート) ↓ (表示) 4. モニタ(ポートレート) この流れでは、Windowsが2D画像データの描画をドライバに依頼する際、ドライバ側の処理の方法に3通り考えられます。 【A】 ・Windowsが2D画像データの描画をドライバに依頼すると、ドライバはデータをテクスチャメモリに転送して処理を終了する。(ビデオメモリへのレンダリング完了を待たずに処理を終了する。) ・ドライバは、定期的にテクスチャの更新領域をビデオメモリにレンダリングする。 【B】 ・Windowsが2D画像データの描画をドライバに依頼すると、ドライバはデータをテクスチャメモリに転送し、次いでその更新領域をビデオメモリにレンダリングする指示を出して処理を終了する。(ビデオメモリへのレンダリング完了を待たずに処理を終了する。) 【C】 ・Windowsが2D画像データの描画をドライバに依頼すると、ドライバはデータをテクスチャメモリに転送し、次いでその更新領域をビデオメモリにレンダリングしてから処理を終了する。(ビデオメモリへのレンダリングが完了してから処理を終了する。) GPUのレンダリング能力が十分であれば、この3つはどれも全く同じ表示結果が得られます。しかし処理速度はAがいちばん速く、Bがその次、Cがいちばん遅くなります。しかし、実装が簡単な順はその逆にC/B/Aの順となります。 簡単には確認できないことですが、ATIとnVidiaのドライバの速度の違いは、実装が上記A/B/Cのどの形になっているかによるものである可能性があります。仮にそうだとすれば、今後ドライバの成熟によりForceWareでもパフォーマンスの低下がなくなる可能性があることになります。 なお、先の回答の最後に「次期Windows(Windows Vista)ではこの辺の問題がある程度解消される可能性がある」と書きましたが、これはWindows Vistaでは3D機能を使って2D描画を行うモードが標準となることによります。 OSレベルで3D機能を使って2D描画を行うので、2D画像の描画時もドライバ側ではすべて3Dとして扱うことになり、どのような向きの描画であってもパフォーマンスの違いは発生しないものと思われます。
その他の回答 (1)
- xcrOSgS2wY
- ベストアンサー率50% (1006/1985)
ご指摘の現象は、私が使っているPC(ビデオはオンボードビデオなので性能は質問者さんのものよりはるかに劣る)でも発生します。 これはPCとWindowsのビデオ表示の原理的によるもので、障害ではありません。 モニタを横置きにしているPCのビデオは「左から右へ、上から下へ」の順番にメモリを順次走査し、同じ順序で順次モニタに表示データを送り出すようになっています。これにあわせるようにWindowsの内部でも画像データは「左から右へ、上から下へ」の順番にメモリ上に格納するようになっています。 画像データをビデオカードに転送するとき、この両者が一致していると最大の速度でデータを転送することができます。(というよりも、この「左から右へ、上から下へ」の順番に行うデータ転送の速度が最大になるように、いろいろな仕組みが最適化されています。) モニタを縦置きにすると、PCからモニタに送られるデータの順番は「下から上、左から右」の順番に変わり、ビデオカードがメモリを走査する順番も同様に「下から上、左から右」になります。 それでもWindowsの画像データは「左から右へ、上から下へ」の順番で変わらないので、画像データをビデオカードに転送するときに順番を入れ替えてやる(90度回転させてやる)必要があります。 この入れ替え(回転)はけっこう時間のかかる操作なので、モニタを横置きにしている場合よりもデータの転送に時間がかかり、そのため大量の画像データを転送する際のパフォーマンスが落ちてしまいます。 これは現在のWindowsの仕組みにも由来することなので、設定の変更により若干の改善はあるかもしれませんが、根本的な問題解消はないでしょう。次期Windows(Windows Vista)ではこの辺の問題がある程度解消される可能性がありますが・・・
お礼
ご回答いただき、ありがとうございます! これは、ForceWareの仕様であり、特に不具合ではないということも分かって参りました。 ただ、大変失礼ながら、疑問な点がございます。 確かに、おっしゃる通り、「ソフトウエア的に」走査の順番を入れ替えるなら、その通りだと納得いたします。 それは、よく液晶モニタに付属している、ポートレート表示を実現するソフトウエアでは、その通りだと思います。しかしながら、私が質問させていただきました、ForceWareの場合は、ドライバレベルで実現する機能でございます。 なぜドライバだと速度の維持が期待できるかと申しますと・・・ 1. ATI系では発生しないからです。発生しないのは、ATIのチップでは、DeltaChrome系のように、ポートレート表示のハードウエアアクセラレーション機能があるのでしょうか? それとも、ドライバの作り込みでしょうか? 後者ならば、今後のドライバのアップデートで緩和される可能性はあるのでしょうか? 2. nVidiaのサイトのnvRotateのページでは、「パフォーマンスのペナルティなく実現」と書いてあります(笑)。これは大嘘、ということでしょうか? 追加質問で申し訳ございませんが、ご存じの方がいらっしゃいましたら、よろしくお願い申し上げます。 ありがとうございました。
お礼
またまたお世話になってしまい、ありがとうございます! また、ビデオチップの描画の仕組みも詳しく教えていただき、恐縮です。 2Dをテクスチャとして扱う方法に関しては、初めて知りました。GDIまたはDirectDrawが描画をし、ビデオドライバに引き渡してから、ドライバとチップ間にどんなやりとりがあったのか、とてもよくわかりました! ドライバの成熟でパフォーマンスに改善の余地があることも納得です。 私の疑問はすべて解消しました。心より感謝いたします。