C++ D3D11_使用情况_暂存资源不能通过D3D11_资源_杂项_共享_密钥Mutex共享
我尝试创建新的ID3D11Texture2D,以便将其进一步映射到DXGI\u MAPPED\u RECT。C++ D3D11_使用情况_暂存资源不能通过D3D11_资源_杂项_共享_密钥Mutex共享,c++,directx,direct3d11,dxgi,C++,Directx,Direct3d11,Dxgi,我尝试创建新的ID3D11Texture2D,以便将其进一步映射到DXGI\u MAPPED\u RECT。 我收到一些ID3D11Texture2D,但我没有通电(无法更改其创建方式) 以下是代码的一部分: CComPtr<IDXGIResource> cpDXGIResource; RET_HR_NULL(_pTexIn->QueryInterface(__uuidof(IDXGIResource), (void**)&cpDXGIResource), cpDXGI
我收到一些ID3D11Texture2D,但我没有通电(无法更改其创建方式) 以下是代码的一部分:
CComPtr<IDXGIResource> cpDXGIResource;
RET_HR_NULL(_pTexIn->QueryInterface(__uuidof(IDXGIResource), (void**)&cpDXGIResource), cpDXGIResource);
HANDLE sharedHandle;
cpDXGIResource->GetSharedHandle(&sharedHandle);
CComPtr<ID3D11Texture2D> cpTexIn;
cpD3D11Device->OpenSharedResource(sharedHandle, __uuidof(ID3D11Resource), (void**)(&cpTexIn));
D3D11_TEXTURE2D_DESC td;
cpTexIn->GetDesc(&td);
td.Usage = D3D11_USAGE_STAGING;
td.BindFlags = D3D11_BIND_SHADER_RESOURCE;
td.CPUAccessFlags = D3D11_CPU_ACCESS_READ;
CComPtr<ID3D11Texture2D> cpNewTexture;
RET_HR_NULL(cpD3D11Device->CreateTexture2D(&td, NULL, &cpNewTexture), cpNewTexture);
cpD3D11DeviceContext->CopyResource(cpNewTexture, cpTexIn);
CComPtr<IDXGISurface> cpDXGISurface;
RET_HR_NULL(cpNewTexture->QueryInterface(&cpDXGISurface), cpDXGISurface);
DXGI_MAPPED_RECT bitmap2Dmap;
RET_HR(cpDXGISurface->Map(&bitmap2Dmap, DXGI_MAP_READ));
这正是调试层所说的 D3D11_使用情况_暂存资源不能通过D3D11_资源_杂项_共享_键控Mutex或D3D11_资源_杂项_共享来共享。[状态#创建错误#103:CREATETEXTURE2D#u INVALIDMISCFLAGS] 这意味着,如果您需要同时具有共享和暂存功能,则需要在一台设备上创建两个单独的纹理。一个是可共享的,另一个是暂存的,您将按照数据流的逻辑将数据从一个复制到另一个。您不能按设计使用分段可共享纹理
Width 0x00000354 unsigned int
Height 0x000001e0 unsigned int
MipLevels 0x00000001 unsigned int
ArraySize 0x00000001 unsigned int
Format DXGI_FORMAT_B8G8R8A8_UNORM (0x00000057) DXGI_FORMAT
SampleDesc {Count=0x00000001 Quality=0x00000000 } DXGI_SAMPLE_DESC
Usage D3D11_USAGE_STAGING (0x00000003) D3D11_USAGE
BindFlags 0x00000008 unsigned int
CPUAccessFlags 0x00020000 unsigned int
MiscFlags 0x00000002 unsigned int