縦横比とカスタム スケーリング モードの使用
縦横比を維持するストレッチ スケーリングと Windows 7 以降で使用できるカスタム スケーリングのモード (DXGKDDI_INTERFACE_VERSION>= DXGKDDI_INTERFACE_VERSION_WIN7) をサポートするために、ディスプレイ ミニポート ドライバーで使用される VidPN の現在のパス データに次の機能が追加されます。
D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT 構造体:
AspectRatioCenteredMax メンバーと Custom メンバー
D3DKMDT_VIDPN_PRESENT_PATH_SCALING 列挙体:
D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX と D3DKMDT_VPPS_CUSTOM の値
スケーリング モードの指定
これらのスケーリング モードを使用したモニターでのデスクトップの動作と外観については、「デスクトップ画像のスケーリング」を参照してください。 ディスプレイ モード マネージャー (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.Scaling を D3DKMDT_VPPS_CENTERED に設定します。
ストレッチ スケーリング
パスがソースの縦横比を維持したままターゲットに合わせて拡大縮小されたコンテンツを表示できる場合は、D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT.Stretched を設定します。 DxgkDdiEnumVidPnCofuncModality が呼び出されたら、D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION.Scaling を D3DKMDT_VPPS_STRETCHED に設定します。
縦横比を維持するストレッチ スケーリング
パスがソースの縦横比を維持したまま、ターゲットに合わせてソース コンテンツをスケーリングできる場合は、D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT.AspectRatioCenteredMax を設定します。 DxgkDdiEnumVidPnCofuncModality が呼び出されたら、D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION.Scaling を D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX に設定します。
カスタム スケーリング
他の D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT構造体メンバーで記述されていない 1 つ以上のスケーリング モードをパスが表示できる場合は、D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT.Custom を設定します。 DxgkDdiEnumVidPnCofuncModality が呼び出されたら、D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION.Scaling を D3DKMDT_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 の方式で動作します。
ドライバーは、初期化中にオペレーティング システムのバージョンを調べる必要があり、AspectRatioCenteredMax や Custom (D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT のメンバー) を公開または使用すべきではありません。 ドライバーがこの要件に違反した場合、DMM は AspectRatioCenteredMax と Custom を無視し、Identity、Centered、Stretched のメンバーのみを認識します。 ドライバーが任意の VidPN について D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX スケーリング モードをピン留めしようとすると、DMM は状態コード STATUS_GRAPHICS_INVALID_PATH_CONTENT_GEOMETRY_TRANSFORMATION を返し、このスケーリング モードを全画面表示のストレッチ モードと同じように扱います。
Windows 7
オペレーティング システムは AspectRatioCenteredMax と Custom のメンバーの値をクリアし、ドライバーが縦横比を維持するストレッチ スケーリングモードとカスタム スケーリング モードをサポートしていないものと想定しています。 DMM は D3DKMDT_VPPS_IDENTITY、D3DKMDT_VPPS_STRETCHED、D3DKMDT_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_ASPECTRATIOCENTEREDMAX と D3DKMDT_VPPS_CUSTOM の値は、グラフィックス処理装置 (GPU) に関連付けられている CCD 接続データベースに格納されます。 ユーザーが、これらのスケーリング メンバーをサポートするドライバーがある GPU から別の GPU にモニターを移動した場合、2 番目の GPU は元のドライバーでサポートされていない可能性があります。 この場合、オペレーティング システムはこれらのスケーリングの種類をシステムの既定のスケーリングにマップします。
どちらの GPU もスケーリングの種類として D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX と D3DKMDT_VPPS_CUSTOM をサポートし、1 番目の GPU のドライバーが D3DKMDT_VPPS_CUSTOM カスタム スケーリング要求を実装している場合、ユーザーがモニターを 2 番目の GPU に切り替えると、2 番目の GPU のドライバーはカスタム スケーリング要求の解釈方法を知らない可能性があります。 この場合、2 番目のドライバーは DxgkDdiCommitVidPn 関数の呼び出しに失敗し、STATUS_GRAPHICS_VIDPN_MODALITY_NOT_SUPPORTED 状態コードを返す必要があります。オペレーティング システムは、このスケーリングの種類をシステムの既定のスケーリングにマップします。