お世話になります。
デバイス(ID3D11Device)が複数(例としてAとB)あり、デバイスBでCreateTexture2Dして作成したテクスチャ(ID3D11Texture2D)をデバイスAでCreateTexture2Dして作成したテクスチャ(ID3D11Texture2D)へとコピーしたいです。
デバイスBのコンテキスト(ID3D11DeviceContext)で、CopySubresourceRegion()を行うとコピーはされるのですが、デバッグログに下記の例外が大量に出力されていました(デバイスAのコンテキストだとコピーはされませんでした)。
検証したところ、異なるデバイスで作成されたID3D11Texture2DをCopySubresourceRegion()でコピーしようとすると発生するようです。
本題なのですが、この例外を発生しないようにするにはどうしたらよいのか、または、別のコピー方法があれば教えて頂きたいです。
ID3D11DeviceContext::CopyResource()はAとBのテクスチャの型が違うため?かできないみたいでした。
■出力された例外
0x74A0FD62 で例外がスローされました (SYSTEM4.exe 内): Microsoft C++ の例外: _com_error (メモリの場所 0x0081A408)。
■デバイスAのテクスチャ作成部分
ID3D11Texture2D* m_pTexA;
D3D11_TEXTURE2D_DESC desc = {0};
desc.Width = 1600;
desc.Height = 900;
desc.MipLevels = 1;
desc.ArraySize = 1;
desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
desc.SampleDesc.Count = 1;
desc.SampleDesc.Quality = 0;
desc.Usage = D3D11_USAGE_DYNAMIC;
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
desc.MiscFlags = 0;
hr = m_deviceA->CreateTexture2D(&desc, NULL, &m_pTexA);
■デバイスBのテクスチャ作成部分
ID3D11Texture2D* m_pTexB;
D3D11_TEXTURE2D_DESC desc2 = {0};
desc2.Width = 1600;
desc2.Height = 900;
desc2.MipLevels = 0;
desc2.ArraySize = 1;
desc2.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
desc2.SampleDesc.Count = 1;
desc2.SampleDesc.Quality = 0;
desc2.Usage = D3D11_USAGE_DEFAULT;
desc2.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;
desc2.CPUAccessFlags = D3D11_CPU_ACCESS_READ;
desc2.MiscFlags = 0;
hr = m_deviceB->CreateTexture2D(&desc2, NULL, &m_pTexB);
■開発環境
Visual Studio 2017 pro ver 15.9.16
C++
DirectX11.1
Windows Kits 10.0.17763.0
Windows 10 pro 1809 64bit
NVIDIA GeForce GTX 1050