无法通过D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX共享D3D11_USAGE_STAGING资源

我尝试创建新的ID3D11Texture2D并将其进一步映射到DXGI_MAPPED_RECT。
我收到一些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));

_pTexIn是输入ID3D11Texture2D。
CreateTexture2D()时出现以下错误:

D3D11错误:ID3D11Device :: CreateTexture2D:A D3D11_USAGE_STAGING 无法通过D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX或 D3D11_RESOURCE_MISC_SHARED。 [STATE_CREATION错误#103: CREATETEXTURE2D_INVALIDMISCflaGS]

以下是D3D11_TEXTURE2D_DESC的内容:

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
ether1984 回答:无法通过D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX共享D3D11_USAGE_STAGING资源

这正是调试层所说的

D3D11_USAGE_STAGING资源无法通过D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX或D3D11_RESOURCE_MISC_SHARED进行共享。 [STATE_CREATION错误#103:CREATETEXTURE2D_INVALIDMISCFLAGS]

表示如果需要同时具有共享和暂存功能,则需要在一台设备上创建两个单独的纹理。一个将是可共享的,另一个将是暂存的,您将按照数据流的逻辑将数据从一个复制到另一个。您不能通过设计拥有分阶段的可共享纹理。

本文链接:https://www.f2er.com/2638437.html

大家都在问