d3d12: d3d12_video_buffer_create_impl - Fix resource importing

Only align resource dimensions on creation, not when importing existing D3D resource object.
Otherwise importing the resource fails since the resource descriptor does not match the aligned
dimensions passed in the template.

Fixes: 62fded5e4f ("d3d12: Allocate d3d12_video_buffer with higher alignment for compatibility")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25913>
This commit is contained in:
Sil Vilerino
2023-10-26 08:24:53 -04:00
committed by Marge Bot
parent 18d8a96a00
commit dfb9516026

View File

@@ -73,10 +73,20 @@ d3d12_video_buffer_create_impl(struct pipe_context *pipe,
templ.target = PIPE_TEXTURE_2D;
templ.bind = pD3D12VideoBuffer->base.bind;
templ.format = pD3D12VideoBuffer->base.buffer_format;
// YUV 4:2:0 formats in D3D12 need to at least be multiple of 2 dimensions
// However, we allocate with a higher alignment to maximize HW compatibility
templ.width0 = align(pD3D12VideoBuffer->base.width, 2);
templ.height0 = align(pD3D12VideoBuffer->base.height, 16);
if (handle)
{
// YUV 4:2:0 formats in D3D12 always require multiple of 2 dimensions
// We must respect the input dimensions of the imported resource handle (e.g no extra aligning)
templ.width0 = align(pD3D12VideoBuffer->base.width, 2);
templ.height0 = align(pD3D12VideoBuffer->base.height, 2);
}
else
{
// When creating (e.g not importing) resources we allocate
// with a higher alignment to maximize HW compatibility
templ.width0 = align(pD3D12VideoBuffer->base.width, 2);
templ.height0 = align(pD3D12VideoBuffer->base.height, 16);
}
templ.depth0 = 1;
templ.array_size = 1;
templ.flags = 0;