次の方法で共有


縦横比とカスタム スケーリング モードの使用

縦横比を維持するストレッチ スケーリングと Windows 7 以降で使用できるカスタム スケーリングのモード (DXGKDDI_INTERFACE_VERSION>= DXGKDDI_INTERFACE_VERSION_WIN7) をサポートするために、ディスプレイ ミニポート ドライバーで使用される VidPN の現在のパス データに次の機能が追加されます。

スケーリング モードの指定

これらのスケーリング モードを使用したモニターでのデスクトップの動作と外観については、「デスクトップ画像のスケーリング」を参照してください。 ディスプレイ モード マネージャー (DMM) が DxgkDdiEnumVidPnCofuncModality 関数を呼び出すと、ドライバーは次のように VidPN の現在のパスでサポートされるスケーリングの種類に従って D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT のメンバーを設定する必要があります。

ID スケーリング
パスが変換なしでコンテンツを表示できる場合は、Identity メンバー (D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT のメンバー) を 0 以外の値に設定します。 DxgkDdiEnumVidPnCofuncModality が呼び出されたら、 Scaling メンバー (D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION 構造体のメンバー) を D3DKMDT_VPPS_IDENTITY に設定します。

中央揃えスケーリング
パスがターゲットの中央にスケーリングされていないコンテンツを表示できる場合は、D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT.Centered を設定します。 DxgkDdiEnumVidPnCofuncModality が呼び出されたら、D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION.ScalingD3DKMDT_VPPS_CENTERED に設定します。

ストレッチ スケーリング
パスがソースの縦横比を維持したままターゲットに合わせて拡大縮小されたコンテンツを表示できる場合は、D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT.Stretched を設定します。 DxgkDdiEnumVidPnCofuncModality が呼び出されたら、D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION.ScalingD3DKMDT_VPPS_STRETCHED に設定します。

縦横比を維持するストレッチ スケーリング
パスがソースの縦横比を維持したまま、ターゲットに合わせてソース コンテンツをスケーリングできる場合は、D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT.AspectRatioCenteredMax を設定します。 DxgkDdiEnumVidPnCofuncModality が呼び出されたら、D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION.ScalingD3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX に設定します。

カスタム スケーリング
他の D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT構造体メンバーで記述されていない 1 つ以上のスケーリング モードをパスが表示できる場合は、D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT.Custom を設定します。 DxgkDdiEnumVidPnCofuncModality が呼び出されたら、D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION.ScalingD3DKMDT_VPPS_CUSTOM に設定します。 独立系ハードウェア ベンダー (IHV) は、プライベート エスケープ値を使用して、特定のターゲットでのカスタム スケーリングを解釈する方法をドライバーに通知できます。

現在のピン留めされたターゲット モードとソース モードの縦横比は同じですが、サイズが異なる場合、ディスプレイ ミニポート ドライバーは Stretched メンバーとCentered メンバーのみを設定する必要があります。 この場合、DMM は AspectRatioCenteredMax メンバーの 0 以外の値をクリアします。

API から DDI へのスケーリング

次の表に示すのは、D3DKMDT_VIDPN_PRESENT_PATH_SCALING 列挙体におけるディスプレイ ミニポート ドライバーの DDI スケーリング値に対するユーザー モード API のスケーリング値の対応です。

SetDisplayConfig API スケーリング値 DDI スケーリング値

DC_IDENTITY

D3DKMDT_VPPS_IDENTITY

DC_CENTERED

D3DKMDT_VPPS_CENTERED

DC_STRETCHED

D3DKMDT_VPPS_STRETCHED

DC_ASPRATIOMAX

D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX

DC_CUSTOM

D3DKMDT_VPPS_CUSTOM

DC_PREFERRED

D3DKMDT_VPPS_PREFERRED

このマッピングを「デスクトップ画像のスケーリング」の表と合わせて使用することで、ユーザー モードのスケーリングの種類がディスプレイ ミニポート ドライバーに送信される DDI スケーリングの種類にどのように変換されるかを把握できます。

スケーリングとドライバーのバージョン

オペレーティング システムのさまざまなバージョンで実行されているさまざまなディスプレイ ミニポート ドライバーのバージョンの動作を次の表に示します。

ドライバー のバージョン オペレーティング システムのバージョン

DXGKDDI_INTERFACE_VERSION<DXGKDDI_INTERFACE_VERSION_WIN7

and

>= DXGKDDI_INTERFACE_VERSION_VISTA

DXGKDDI_INTERFACE_VERSION>= DXGKDDI_INTERFACE_VERSION_WIN7

Windows Vista

ドライバーは Windows Vista の方式で動作します。

ドライバーは、初期化中にオペレーティング システムのバージョンを調べる必要があり、AspectRatioCenteredMaxCustom (D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT のメンバー) を公開または使用すべきではありません。 ドライバーがこの要件に違反した場合、DMM は AspectRatioCenteredMaxCustom を無視し、IdentityCenteredStretched のメンバーのみを認識します。 ドライバーが任意の VidPN について D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX スケーリング モードをピン留めしようとすると、DMM は状態コード STATUS_GRAPHICS_INVALID_PATH_CONTENT_GEOMETRY_TRANSFORMATION を返し、このスケーリング モードを全画面表示のストレッチ モードと同じように扱います。

Windows 7

オペレーティング システムは AspectRatioCenteredMaxCustom のメンバーの値をクリアし、ドライバーが縦横比を維持するストレッチ スケーリングモードとカスタム スケーリング モードをサポートしていないものと想定しています。 DMM は D3DKMDT_VPPS_IDENTITYD3DKMDT_VPPS_STRETCHEDD3DKMDT_VPPS_CENTERED のいずれかのみを設定します。 ドライバーは Windows Vista の場合と同様に動作します。

ドライバーは AspectRatioCenteredMax メンバーをサポートする必要があり、オペレーティング システムはそれをコントロール パネルアプリケーションから使用します。 ドライバーは、Custom メンバーを設定することで、必要に応じてカスタマイズされた機能を実装できます。

DMM は常にドライバー インターフェイス >= DXGKDDI_INTERFACE_VERSION_WIN7 であることを確認し、その後で AspectRatioCenteredMax または Custom (D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT のメンバー) を調べて使用します。

重要D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX または D3DKMDT_VPPS_CUSTOM の値をサポートするディスプレイ ミニポート ドライバーで D3DKMDT_VPPS_NOTSPECIFIED の値を設定しないでください。

複数のアダプターを使用したスケーリング

Windows 7 で導入されたスケーリングの種類てある D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAXD3DKMDT_VPPS_CUSTOM の値は、グラフィックス処理装置 (GPU) に関連付けられている CCD 接続データベースに格納されます。 ユーザーが、これらのスケーリング メンバーをサポートするドライバーがある GPU から別の GPU にモニターを移動した場合、2 番目の GPU は元のドライバーでサポートされていない可能性があります。 この場合、オペレーティング システムはこれらのスケーリングの種類をシステムの既定のスケーリングにマップします。

どちらの GPU もスケーリングの種類として D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAXD3DKMDT_VPPS_CUSTOM をサポートし、1 番目の GPU のドライバーが D3DKMDT_VPPS_CUSTOM カスタム スケーリング要求を実装している場合、ユーザーがモニターを 2 番目の GPU に切り替えると、2 番目の GPU のドライバーはカスタム スケーリング要求の解釈方法を知らない可能性があります。 この場合、2 番目のドライバーは DxgkDdiCommitVidPn 関数の呼び出しに失敗し、STATUS_GRAPHICS_VIDPN_MODALITY_NOT_SUPPORTED 状態コードを返す必要があります。オペレーティング システムは、このスケーリングの種類をシステムの既定のスケーリングにマップします。