次の方法で共有


PFND3D10DDI_RESOURCECOPY コールバック関数 (d3d10umddi.h)

ResourceCopy 関数は、ソース リソース全体をコピー先リソースにコピーします。

構文

PFND3D10DDI_RESOURCECOPY Pfnd3d10ddiResourcecopy;

void Pfnd3d10ddiResourcecopy(
  D3D10DDI_HDEVICE unnamedParam1,
  D3D10DDI_HRESOURCE unnamedParam2,
  D3D10DDI_HRESOURCE unnamedParam3
)
{...}

パラメーター

unnamedParam1

hDevice [in]

ディスプレイ デバイスへのハンドル (グラフィックス コンテキスト)。

unnamedParam2

hDstResource [in] を する

コピー先のリソースへのハンドル。

unnamedParam3

hSrcResource [in]

コピー元のソース リソースへのハンドル。

戻り値

何一つ

備考

ドライバーは、pfnSetErrorCb コールバック関数を使用してエラー コードを設定できます。

Microsoft Direct3D ランタイムは、ユーザー モード ディスプレイ ドライバーの ResourceCopy 関数を呼び出して、指定したソース リソースから指定したターゲット リソースにコピーするようにドライバーに通知します。 ソース リソースと移行先リソースを同じリソースにすることはできません。 ソース リソースと移行先リソースの両方が同じ種類のリソースであり、同じディメンションを持つ必要があります。 両方のリソースの形式の種類 (DXGI_FORMAT型指定された値) は、相互にキャスト可能である必要があります。 ソースリソースと移行先リソースを現在マップすることはできません。 さらに、リソース作成フラグは、リソースがコピー操作に参加できるかどうかを制限します。

ドライバーは、D3DDDIERR_DEVICEREMOVEDを除き、エラーが発生しないようにする必要があります。 したがって、D3DDDIERR_DEVICEREMOVEDを除き、pfnSetErrorCb 関数の呼び出しでドライバーがエラーを渡した場合、Direct3D ランタイムはエラーが重大であると判断します。 デバイスが削除された場合でも、ドライバーはD3DDDIERR_DEVICEREMOVEDを返す必要はありません。ただし、デバイスの削除が ResourceCopy の操作 妨げていた場合 (通常は発生しないはずです)、ドライバーはD3DDDIERR_DEVICEREMOVEDを返すことができます。

次のセクションは、Microsoft Direct3D バージョン 10.1 以降 (Windows Vista Service Pack 1 (SP1) 以降、および Windows Server 2008 以降) にのみ適用されます。
 
ドライバーは、コピーと変換を処理する switch ステートメントを含めることができる ResourceCopy 関数を実装できます。 つまり、ドライバーは 1 つの ResourceCopy を実装でき、D3D10_1DDI_DEVICEFUNCSの pfnResourceCopy メンバーと共に ResourceCopy を指す D3D10_1DDI_DEVICEFUNCS 構造体の pfnResourceConvert メンバーを設定できます。 ただし、パフォーマンスを向上させるために、ドライバーは ResourceCopy と ResourceConvert 関数 個別に実装できます。

ResourceCopy の Direct3D 10.1 バージョンは、ドライバーの CreateResource(D3D10) 関数の呼び出しで作成されたソースリソースと宛先リソースの D3D10DDIARG_CREATERESOURCEResourceDimension メンバーに関して、Direct3D 10.0 バージョンと大きな機能の違いがあります。 ResourceCopyの Direct3D 10.0 バージョンの場合、ソース リソースと移行先リソースのD3D10DDIARG_CREATERESOURCEの ResourceDimension メンバーが一致している必要があります。 ResourceCopy の Direct3D 10.1 バージョンでは、ソースリソースと移行先リソースのD3D10DDIARG_CREATERESOURCEの ResourceDimension メンバーが少し緩和されます。 ResourceCopy の Direct3D 10.1 バージョンでは、TexCube 変換先リソース上の Tex2D ソース リソースまたは Tex2D 変換先リソース上の TexCube ソース リソースのコピーが可能です。 さらに、Direct3D バージョン 10.1 では、リソース レベルでの TexCube の違いは失われます。 ResourceCopy の Direct3D 10.1 バージョンは、TexCube をコピーできるかどうかを表すだけです。 Direct3D バージョン 10.0 では、リソースのコピー、複数のレンダー ターゲットの検証など (つまり、リソースの種類が同じである必要があるさまざまな操作) には、リソースの種類を考慮する TexCube の区別がすべて含まれていました。 Direct3D バージョン 10.1 では、ランタイムは Tex2D のみを決定できます。

次のセクションでは、コピーと変換の条件を示します。

コピー

コピーの場合、ResourceCopy では、次の条件でドライバーの CreateResource(D3D10) 関数を使用して、ソースリソースと移行先リソースが作成されたことを確認します。

  • ターゲット リソースは、D3D10DDIARG_CREATERESOURCE 構造体の Usage メンバーに設定されたD3D10_DDI_USAGE_IMMUTABLE値を使用して作成されませんでした。
  • ソース リソースとターゲット リソースは、同じリソースの種類と次元 (バッファー、1 次元 (1-D) テクスチャなど) で作成され、D3D10DDIARG_CREATERESOURCEの ResourceDimension メンバーに同じ値を設定します。
  • ソース リソースと移行先リソースは、まったく同じリソースの一部ではありません。
  • D3D10DDIARG_CREATERESOURCEの Format メンバーで指定されている各ソースとターゲットのリソース形式は、同じ型指定なしグループ内にあります。
  • ソース リソースと移行先リソースには、同じ数のサンプルと品質レベルが必要です。単一サンプリング リソースを除き、同じ数のサンプルのみを含める必要があります。
ResourceCopy では、現在、サブリソースがマップされていないことが保証されません。

変換

変換の場合、ResourceCopy では、次の条件を満たすドライバーの CreateResource(D3D10) 関数を使用して、ソースとターゲットのリソースが作成されたことを確認します。

  • ターゲット リソースは、D3D10DDIARG_CREATERESOURCE 構造体の Usage メンバーに設定されたD3D10_DDI_USAGE_IMMUTABLE値を使用して作成されませんでした。
  • D3D10DDIARG_CREATERESOURCEの ResourceDimension メンバーで同じ値を設定することで、ソース リソースとターゲット リソースが同じリソースの種類 (バッファー、1 次元 (1-D) テクスチャなど) で作成されました。
  • 変換元リソースと変換先リソースのディメンションが一致して変換されます。
  • ソース リソースと移行先リソースは、まったく同じリソースの一部ではありません。
  • D3D10DDIARG_CREATERESOURCEの Format メンバーで指定されている各ソースおよびターゲット リソース形式は、適切な変換操作をサポートします。 mipped ブロック圧縮リソースの場合、ディメンションはすべて 2 の累乗として検証されます。
  • ソース リソースと移行先リソースには、同じ数のサンプルと品質レベルが必要です。単一サンプリング リソースを除き、同じ数のサンプルのみを含める必要があります。
ResourceCopy では、現在、サブリソースがマップされていないことが保証されません。

必要条件

要件 価値
サポートされる最小クライアント Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。
ターゲット プラットフォーム デスクトップ
ヘッダー d3d10umddi.h (D3d10umddi.h を含む)

関連項目

CreateResource(D3D10)

D3D10DDIARG_CREATERESOURCE

D3D10DDI_DEVICEFUNCS

D3D10_1DDI_DEVICEFUNCS

pfnSetErrorCb