Почему цветность теряется, когда я копирую DXGI_FORMAT_NV12 ID3D11Texture с устройства d3d11 на устройство d3d11on12?

      D3D11_TEXTURE2D_DESC texture_desc = {0};
texture_desc.Width = 640;
texture_desc.Height = 480;
texture_desc.MipLevels = 1;
texture_desc.Format = DXGI_FORMAT_NV12;
texture_desc.SampleDesc.Count = 1;
texture_desc.ArraySize = 1;
texture_desc.Usage = D3D11_USAGE_DEFAULT;
texture_desc.MiscFlags = D3D11_RESOURCE_MISC_SHARED;

Microsoft::WRL::ComPtr<ID3D11Texture2D> temp_texture_for_my_device{nullptr};
my_device->CreateTexture2D(&texture_desc, NULL, &temp_texture_for_my_device);

Microsoft::WRL::ComPtr<IDXGIResource> dxgi_resource{nullptr};
temp_texture_for_my_device.As(&dxgi_resource);
HANDLE shared_handle = NULL;
dxgi_resource->GetSharedHandle(&shared_handle);
dxgi_resource->Release();

Microsoft::WRL::ComPtr<ID3D11Texture2D> temp_texture_for_ffmpeg_device {nullptr};
ffmpeg_device->OpenSharedResource(shared_handle, __uuidof(ID3D11Texture2D), (void**)temp_texture_for_ffmpeg_device.GetAddressOf());
ffmpeg_device_context->CopySubresourceRegion(temp_texture_for_ffmpeg_device.Get(), 0, 0, 0, 0, (ID3D11Texture2D*)ffmpeg_avframe->data[0], (int)ffmpeg_avframe->data[1], NULL);
ffmpeg_device_context->Flush();

Я копирую temp_texture_for_ffmpeg_device в D3D11_USAGE_STAGING, это нормально, но когда я копирую temp_texture_for_my_device в D3D11_USAGE_STAGING, я теряю данные цветности.

Когда я сопоставляю текстуру с процессором через D3D11_USAGE_STAGING:

temp_texture_for_ffmpeg_device : RowPitch — 768, DepthPitch — 768 * 720; temp_texture_for_my_device : RowPitch — 1024, DepthPitch — 1024 * 480;

Я думаю, что между двумя устройствами (или контекстом устройства?) есть несколько разных параметров, но я не знаю, какие параметры могут вызвать такую ​​​​разницу.

my_deviceа также my_device_contextсоздаются D3D11On12CreateDevice

0 ответов

Другие вопросы по тегам