无法通过D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX共享D3D11_USAGE_STAGING资源 [英] A D3D11_USAGE_STAGING Resource cannot be shared via D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX
问题描述
我尝试创建新的ID3D11Texture2D并将其进一步映射到DXGI_MAPPED_RECT.
我收到一些ID3D11Texture2D,但它们没有电源(无法更改其创建方式).
I try to create new ID3D11Texture2D for map it to DXGI_MAPPED_RECT further.
I receive some ID3D11Texture2D that I have no power on (can not change way of creation of).
这是代码的一部分:
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()
时出现以下错误:
_pTexIn
is an input ID3D11Texture2D.
I get the error below while CreateTexture2D()
:
D3D11错误:ID3D11Device :: CreateTexture2D:A D3D11_USAGE_STAGING 无法通过D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX或 D3D11_RESOURCE_MISC_SHARED. [STATE_CREATION错误#103: CREATETEXTURE2D_INVALIDMISCFLAGS]
D3D11 ERROR: ID3D11Device::CreateTexture2D: A D3D11_USAGE_STAGING Resource cannot be shared via D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX or D3D11_RESOURCE_MISC_SHARED. [ STATE_CREATION ERROR #103: CREATETEXTURE2D_INVALIDMISCFLAGS]
这里是D3D11_TEXTURE2D_DESC的内容:
Here is content of 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
推荐答案
这正是调试层所说的
D3D11_USAGE_STAGING资源无法通过D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX或D3D11_RESOURCE_MISC_SHARED进行共享. [STATE_CREATION错误#103:CREATETEXTURE2D_INVALIDMISCFLAGS]
A D3D11_USAGE_STAGING Resource cannot be shared via D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX or D3D11_RESOURCE_MISC_SHARED. [ STATE_CREATION ERROR #103: CREATETEXTURE2D_INVALIDMISCFLAGS]
表示如果需要同时具有共享和暂存功能,则需要在一台设备上创建两个单独的纹理.一个将是可共享的,另一个将是临时的,您将按照数据流的逻辑将数据从一个复制到另一个.您不能通过设计拥有分阶段的可共享纹理.
meaning that if you need to have both sharing and staging capabilities, you need to have two separate textures created on one device. One will be shareable and the other one will be staging, you will copy data from one to another following the logic of your data flow. You cannot have staging sharable texture by design.
这篇关于无法通过D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX共享D3D11_USAGE_STAGING资源的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!