1

let 、私は 2 つのデバイスを持っています。1 つ目は DirectX9 で、2 つ目は DirectX11 です。私がやっていることは、パーティクルを計算し、D3D11 の Compute Shader によって D3D11 テクスチャにデータを保存し、その D3D11 テクスチャを D3D9 デバイスで使用して表示することです。私は次のコードを使用しています..

D3D11 デバイスでは..(m_pBuffer は ID3D11Buffer です)

 IDXGIResource* pTempResource(NULL);
 hr = m_pBuffer->QueryInterface( __uuidof(IDXGIResource), (void**)&pTempResource );
 hr = pTempResource->GetSharedHandle(&SharedHandle); //successful

次に、D3D9 デバイスで...

hr = g_pd3dDevice->CreateTexture(width, height, 1, D3DUSAGE_RENDERTARGET,D3DFMT_A32B32G32R32F,D3DPOOL_DEFAULT,&pSharedTexture9,&SharedHandle);

私が抱えているエラーは、「Direct3D9: (エラー) : 開いたリソースと作成したリソースが一致しないため、共有リソースを開けません」です。

編集: OK、dx9 で D3DFMT_A16B16G16R16F を使用し、dX11 で DXGI_FORMAT_R16G16B16A16_FLOAT を使用してテクスチャを作成すると、うまくいきました。しかし、 D3DFMT_A32B32G32R32F と DXGI_FORMAT_R32G32B32A32_FLOAT を使用すると、上記のエラーが発生します。

4

1 に答える 1

3

これらのテクスチャ形式が許可されていないため、このエラーが発生しています。

D3D9 から D3D11 に共有されるテクスチャには、次の制限があります。

  • テクスチャは 2D でなければなりません
  • 許可されるミップ レベルは 1 つだけです
  • テクスチャにはデフォルトの使用法が必要です
  • テクスチャは書き込み専用でなければなりません
  • MSAA テクスチャは使用できません
  • バインド フラグには SHADER_RESOURCE と RENDER_TARGET を設定する必要があります
  • R10G10B10A2_UNORM、R16G16B16A16_FLOAT、および R8G8B8A8_UNORM 形式のみが許可されます

http://msdn.microsoft.com/en-us/library/windows/desktop/ff476531%28v=vs.85%29.aspxから

そのため、テクスチャを共有するには、上記の 3 つの形式に制限されます。さらに、テクスチャを Direct3D9 のバックバッファとして使用する場合は、R8G8B8A8_UNORM と R10G10B10A2_UNORM にさらに制限されます。ソース: http://msdn.microsoft.com/en-us/library/windows/desktop/bb172558%28v=vs.85%29.aspx#BackBuffer_or_Display_Formats

于 2012-03-29T22:32:53.393 に答える