无法通过D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX共享D3D11_USAGE_STAGING资源 [英] A D3D11_USAGE_STAGING Resource cannot be shared via D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX

查看:608
本文介绍了无法通过D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX共享D3D11_USAGE_STAGING资源的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试创建新的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆