Directx ID3DDevice::CreateTexture2D在NV12格式的E_INVALIDARG中针对特定纹理高度失败

Directx ID3DDevice::CreateTexture2D在NV12格式的E_INVALIDARG中针对特定纹理高度失败,directx,directx-11,Directx,Directx 11,我有以下纹理描述: D3D11_TEXTURE2D_DESC texDesc = {}; texDesc.Width = 1920; texDesc.Height = 953; texDesc.MipLevels = 1; texDesc.ArraySize = 1; texDesc.Format = DXGI_FORMAT_NV12; texDesc.SampleDesc.Count = 1; texDesc.SampleDesc.Quality = 0; texDesc.CPUAccessF

我有以下纹理描述:

D3D11_TEXTURE2D_DESC texDesc = {};
texDesc.Width = 1920;
texDesc.Height = 953;
texDesc.MipLevels = 1;
texDesc.ArraySize = 1;
texDesc.Format = DXGI_FORMAT_NV12;
texDesc.SampleDesc.Count = 1;
texDesc.SampleDesc.Quality = 0;
texDesc.CPUAccessFlags = 0;
texDesc.Usage = D3D11_USAGE_DEFAULT;
texDesc.BindFlags = (D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE);
texDesc.MiscFlags = D3D11_RESOURCE_MISC_SHARED;
我想使用ID3D11Device::CreateTexture2D的描述创建纹理:

HRESULT hr = _pDevice->CreateTexture2D(&texDesc, 0, _ppTexOutput);
根据给出的描述,
hr
始终是
E_INVALIDARG
。 但是,如果
texDesc.Height
设置为954,则所有这些都可以工作。此外,如果
texDesc.Format
设置为
DXGI\u Format\u B8G8R8A8\u UNORM
,则每个值的纹理都会成功创建


是关于不支持特定纹理高度/宽度的
DXGI\u格式\u NV12
格式吗?我应该用高度除以2吗?或者这背后还有更复杂的规则吗?

是的,这种格式要求宽度和高度都是均匀的。请参阅以供参考。它明确地说,对于格式
DXGI\u format\u NV12

宽度和高度必须均匀


如果您像Simon Mourier在评论中所说的那样启用了调试层,您就会知道这一点。我强烈建议您启用它,因为它使在DirectX中调试更加容易。

是的,该格式要求宽度和高度都是均匀的。请参阅以供参考。它明确地说,对于格式
DXGI\u format\u NV12

宽度和高度必须均匀


如果您像Simon Mourier在评论中所说的那样启用了调试层,您就会知道这一点。我强烈建议您启用它,因为它使在DirectX中调试变得更加容易。

@zezanjee-这应该是一个答案,而不是评论。注意,如果启用调试层,它应该会告诉您。@SimonMourier我是这样回答的,谢谢您的建议。您应该在中查看视频格式大小的处理。它们是平面的,所以有一些奇怪的尺寸规则。@zezanjee-这应该是一个答案,而不是评论。注意,如果启用调试层,它应该会告诉您。@SimonMourier我是这样回答的,谢谢您的建议。您应该在中查看视频格式大小的处理。它们是平面的,所以有一些奇怪的尺寸规则。谢谢!虽然,我的参考链接已断开(尝试使用VPN和不使用VPN):无法访问此站点DNS\u PROBE\u完成_NXDOMAIN@AntonSerov对不起,我修复了链接。奇怪的是1921年的宽度对我来说很有用value@AntonSerov我刚刚用奇数宽度测试了它,调试层指示错误:D3D11错误:ID3D11Device::CreateTexture2D:使用以下格式(0x67,NV12)创建的Texture2D在资源的维度上遇到了对齐限制。尺寸(宽度:1921,高度:954)必须是(宽度:2,高度:2)的倍数。[STATE_CREATION ERROR#101:CREATETEXTURE2D_INVALIDDIMENSIONS]返回值为E_INVALIDARG。您确定S_OK作为返回值吗?谢谢!虽然,我的参考链接已断开(尝试使用VPN和不使用VPN):无法访问此站点DNS\u PROBE\u完成_NXDOMAIN@AntonSerov对不起,我修复了链接。奇怪的是1921年的宽度对我来说很有用value@AntonSerov我刚刚用奇数宽度测试了它,调试层指示错误:D3D11错误:ID3D11Device::CreateTexture2D:使用以下格式(0x67,NV12)创建的Texture2D在资源的维度上遇到了对齐限制。尺寸(宽度:1921,高度:954)必须是(宽度:2,高度:2)的倍数。[状态#创建错误#101:CREATETEXTURE2D_INVALIDDIMENSIONS]返回值为E_INVALIDARG。您确定S#u OK作为返回值吗?