Ресурс D3D11_USAGE_STAGING не может использоваться совместно с D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX - PullRequest
1 голос
/ 16 марта 2020

Я пытаюсь создать новый 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: Ресурс D3D11_USAGE_STAGING не может использоваться совместно с D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX или D3D11_RESOURCE_MISC_SHARED. [STATE_CREATION ERROR # 103: CREATETEXTURE2D_INVALIDMISCFLAGS]

Вот содержимое D3D11_TEXTURE2D_DES C:

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

1 Ответ

2 голосов
/ 16 марта 2020

Это именно то, что говорит уровень отладки

Ресурс D3D11_USAGE_STAGING не может использоваться совместно с D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX или D3D11_RESOURCE_MISC_SHARED. [STATE_CREATION ERROR # 103: CREATETEXTURE2D_INVALIDMISCFLAGS]

, что означает, что если вам нужны возможности совместного использования и размещения, вам нужно создать две отдельные текстуры на одном устройстве. Один будет общедоступным, а другой будет промежуточным, вы будете копировать данные из одного в другой, следуя логике c вашего потока данных. Вы не можете иметь готовую текстуру с разделением по дизайну.

...