パフォーマンスの最適化:ハードウェアの活用

WPF の内部アーキテクチャには、ハードウェアとソフトウェアの 2 つのレンダリング パイプラインがあります。 このトピックでは、アプリケーションのパフォーマンスの最適化に関する意思決定に役立つ、これらのレンダリング パイプラインについて説明します。

ハードウェア レンダリング パイプライン

WPF のパフォーマンスを判断するうえで最も重要な要因の 1 つは、レンダリング バインドであることです。レンダリングが必要なピクセルが多いほど、パフォーマンス コストは高くなります。 ただし、グラフィックス処理装置 (GPU) にオフロードできるレンダリングが多いほど、パフォーマンスが向上します。 WPF アプリケーション ハードウェア レンダリング パイプラインは、Microsoft DirectX バージョン 7.0 以上をサポートするハードウェアで Microsoft DirectX の機能を最大限に活用します。 Microsoft DirectX バージョン 7.0 および PixelShader 2.0 以降の機能をサポートするハードウェアでは、さらに最適化を行うことができます。

ソフトウェア レンダリング パイプライン

WPF ソフトウェア レンダリング パイプラインは、完全に CPU バインドです。 WPF は、CPU の SSE および SSE2 命令セットを利用して、最適化された、完全な機能を備えたソフトウェア ラスタライザーを実装します。 ソフトウェアへのフォールバックは、ハードウェア レンダリング パイプラインを使用してアプリケーションの機能をレンダリングできないときはいつでもシームレスに行われます。

ソフトウェア モードでレンダリングするときに発生する最大のパフォーマンスの問題は、フィル レートに関連しています。これは、レンダリングするピクセル数として定義されています。 ソフトウェア レンダリング モードのパフォーマンスに懸念がある場合は、ピクセルが再描画される回数を最小限に抑えるようにしてください。 たとえば、青色の背景を持つアプリケーションがあり、その後、少し透明な画像がその上にレンダリングされる場合、アプリケーションのすべてのピクセルを 2 回レンダリングすることになります。 その結果、アプリケーションをその画像とともにレンダリングすると、青の背景しかない場合と比べて 2 倍の時間がかかります。

グラフィックスの描画層

アプリケーションが実行されるハードウェア構成を予測することは、非常に困難な場合があります。 しかし、アプリケーションがさまざまなハードウェア構成を最大限に活用できるように、異なるハードウェアで実行されているときに機能をシームレスに切り替えられるような設計を検討することもできます。

これを実現するために、WPF には、実行時にシステムのグラフィックス機能を決定する機能が用意されています。 グラフィックス機能は、ビデオ カードを 3 つのレンダリング機能階層のいずれかに分類することで決定されます。 WPF では、アプリケーションがレンダリング機能階層に対してクエリを実行できるようにする API を公開しています。 その後、ハードウェアでサポートされている描画層に基づき、アプリケーションが実行時にさまざまなコード パスを取ります。

描画層に最も影響を与えるグラフィックス ハードウェアの機能:

  • ビデオ RAM グラフィックス ハードウェアのビデオ メモリの量で、グラフィックスの構築に利用できるバッファーのサイズと数が決まります。

  • ピクセル シェーダー ピクセル シェーダーは、ピクセル単位で効果を計算するグラフィックス処理機能です。 表示されるグラフィックスの解像度によっては、各表示フレームの処理に数百万単位のピクセルが必要になることがあります。

  • 頂点シェーダー 頂点シェーダーは、オブジェクトの頂点データに数学演算を実行するグラフィックス処理機能です。

  • マルチテクスチャ サポート マルチテクスチャ サポートとは、3D グラフィックス オブジェクトにブレンド操作を実行するとき、2 つ以上の異なるテクスチャを適用できる機能のことです。 マルチテクスチャ サポートの度合いは、グラフィックス ハードウェア上のマルチテクスチャ ユニットの数で決まります。

ピクセル シェーダー、頂点シェーダー、マルチテクスチャの機能は、特定の DirectX バージョン レベルを定義するために使用されます。これは、WPF で異なる描画層を定義するために使用されます。

グラフィックス ハードウェアの機能により WPF アプリケーションのレンダリング能力が決まります。 WPF システムには、次の 3 つの描画層があります。

  • 描画層 0 グラフィックス ハードウェアの高速化はありません。 DirectX のバージョン レベルはバージョン 7.0 より前です。

  • 描画層 1 部分的にグラフィックス ハードウェアが高速化されます。 DirectX のバージョン レベルは、バージョン 7.0 以上、バージョン9.0 未満です。

  • 描画層 2 ほとんどのグラフィックス機能でグラフィックス ハードウェア高速が利用されます。 DirectX のバージョン レベルは、バージョン 9.0 以降です。

WPF の描画層の詳細については、「グラフィックスの描画層」を参照してください。

関連項目