d3d12: Add v216, v210, r210, v308, IYU2, RGB, BGR format support

Reuse the compute shader implemented for d3d11

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7092>
This commit is contained in:
Seungha Yang 2024-06-23 22:16:36 +09:00
parent c1498851b3
commit 25514c8fc1
5 changed files with 43 additions and 9 deletions

View file

@ -55,7 +55,8 @@
/* pre/post processing required formats */
#define GST_D3D12_TIER_LAST_FORMATS \
"UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15"
"v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, " \
"RGB15, BGR15"
#define GST_D3D12_COMMON_FORMATS \
GST_D3D12_TIER_0_FORMATS ", " \

View file

@ -154,6 +154,8 @@ gst_d3d12_pack_new (GstD3D12Device * device,
case GST_VIDEO_FORMAT_UYVY:
case GST_VIDEO_FORMAT_VYUY:
case GST_VIDEO_FORMAT_YVYU:
case GST_VIDEO_FORMAT_v308:
case GST_VIDEO_FORMAT_IYU2:
conv_format = GST_VIDEO_FORMAT_AYUV;
break;
case GST_VIDEO_FORMAT_Y410:
@ -162,9 +164,16 @@ gst_d3d12_pack_new (GstD3D12Device * device,
case GST_VIDEO_FORMAT_Y210:
case GST_VIDEO_FORMAT_Y212_LE:
case GST_VIDEO_FORMAT_Y216_LE:
case GST_VIDEO_FORMAT_v210:
case GST_VIDEO_FORMAT_v216:
conv_format = GST_VIDEO_FORMAT_AYUV64;
break;
case GST_VIDEO_FORMAT_RGB:
case GST_VIDEO_FORMAT_BGR:
conv_format = GST_VIDEO_FORMAT_RGBA;
break;
case GST_VIDEO_FORMAT_BGR10A2_LE:
case GST_VIDEO_FORMAT_r210:
conv_format = GST_VIDEO_FORMAT_RGB10A2_LE;
break;
case GST_VIDEO_FORMAT_BGRA64_LE:

View file

@ -164,13 +164,24 @@ gst_d3d12_unpack_new (GstD3D12Device * device,
case GST_VIDEO_FORMAT_UYVY:
case GST_VIDEO_FORMAT_VYUY:
case GST_VIDEO_FORMAT_YVYU:
case GST_VIDEO_FORMAT_v308:
case GST_VIDEO_FORMAT_IYU2:
conv_format = GST_VIDEO_FORMAT_AYUV;
break;
case GST_VIDEO_FORMAT_Y210:
case GST_VIDEO_FORMAT_Y212_LE:
case GST_VIDEO_FORMAT_Y216_LE:
case GST_VIDEO_FORMAT_v210:
case GST_VIDEO_FORMAT_v216:
conv_format = GST_VIDEO_FORMAT_AYUV64;
break;
case GST_VIDEO_FORMAT_RGB:
case GST_VIDEO_FORMAT_BGR:
conv_format = GST_VIDEO_FORMAT_RGBA;
break;
case GST_VIDEO_FORMAT_r210:
conv_format = GST_VIDEO_FORMAT_RGB10A2_LE;
break;
case GST_VIDEO_FORMAT_RGB16:
case GST_VIDEO_FORMAT_BGR16:
case GST_VIDEO_FORMAT_RGB15:

View file

@ -1175,6 +1175,12 @@ gst_d3d12_device_new_internal (const GstD3D12DeviceConstructData * data)
D3D12_FORMAT_SUPPORT1_SHADER_LOAD,
D3D12_FORMAT_SUPPORT2_UAV_TYPED_STORE
},
{ DXGI_FORMAT_R32_UINT,
D3D12_FORMAT_SUPPORT1_TEXTURE2D |
D3D12_FORMAT_SUPPORT1_TYPED_UNORDERED_ACCESS_VIEW |
D3D12_FORMAT_SUPPORT1_SHADER_LOAD,
D3D12_FORMAT_SUPPORT2_UAV_TYPED_STORE
},
};
/* *INDENT-ON* */

View file

@ -225,15 +225,19 @@ static const GstD3D12Format g_format_map[] = {
DXGI_FORMAT_R8G8B8A8_UNORM),
FormatBuilder::RgbPacked (GST_VIDEO_FORMAT_ABGR,
DXGI_FORMAT_R8G8B8A8_UNORM),
FormatBuilder::Buffer (GST_VIDEO_FORMAT_RGB),
FormatBuilder::Buffer (GST_VIDEO_FORMAT_BGR),
FormatBuilder::YuvPacked (GST_VIDEO_FORMAT_RGB,
DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM),
FormatBuilder::YuvPacked (GST_VIDEO_FORMAT_BGR,
DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM),
FormatBuilder::Planar (GST_VIDEO_FORMAT_Y41B),
FormatBuilder::Planar (GST_VIDEO_FORMAT_Y42B),
FormatBuilder::YuvPacked (GST_VIDEO_FORMAT_YVYU,
DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_R8G8B8A8_UNORM),
DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM),
FormatBuilder::Planar (GST_VIDEO_FORMAT_Y444),
FormatBuilder::Buffer (GST_VIDEO_FORMAT_v210),
FormatBuilder::Buffer (GST_VIDEO_FORMAT_v216),
FormatBuilder::YuvPacked (GST_VIDEO_FORMAT_v210,
DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_R10G10B10A2_UNORM),
FormatBuilder::YuvPacked (GST_VIDEO_FORMAT_v216,
DXGI_FORMAT_R16G16B16A16_UNORM, DXGI_FORMAT_R16G16B16A16_UNORM),
FormatBuilder::YuvSemiPlanar (GST_VIDEO_FORMAT_NV12,
DXGI_FORMAT_NV12, DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_R8G8_UNORM),
FormatBuilder::YuvSemiPlanar (GST_VIDEO_FORMAT_NV21,
@ -243,7 +247,8 @@ static const GstD3D12Format g_format_map[] = {
FormatBuilder::NotSupported(GST_VIDEO_FORMAT_GRAY16_BE),
FormatBuilder::Gray (GST_VIDEO_FORMAT_GRAY16_LE,
DXGI_FORMAT_R16_UNORM),
FormatBuilder::Buffer (GST_VIDEO_FORMAT_v308),
FormatBuilder::YuvPacked (GST_VIDEO_FORMAT_v308,
DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM),
FormatBuilder::RgbPacked (GST_VIDEO_FORMAT_RGB16,
DXGI_FORMAT_B5G6R5_UNORM),
FormatBuilder::RgbPacked (GST_VIDEO_FORMAT_BGR16,
@ -262,7 +267,8 @@ static const GstD3D12Format g_format_map[] = {
DXGI_FORMAT_R16G16B16A16_UNORM),
FormatBuilder::RgbPacked (GST_VIDEO_FORMAT_AYUV64,
DXGI_FORMAT_R16G16B16A16_UNORM),
FormatBuilder::Buffer (GST_VIDEO_FORMAT_r210),
FormatBuilder::YuvPacked (GST_VIDEO_FORMAT_r210,
DXGI_FORMAT_R32_UINT, DXGI_FORMAT_R32_UINT),
FormatBuilder::NotSupported(GST_VIDEO_FORMAT_I420_10BE),
FormatBuilder::Planar (GST_VIDEO_FORMAT_I420_10LE,
DXGI_FORMAT_R16_UNORM),
@ -292,7 +298,8 @@ static const GstD3D12Format g_format_map[] = {
FormatBuilder::NotSupported(GST_VIDEO_FORMAT_P010_10BE),
FormatBuilder::YuvSemiPlanar (GST_VIDEO_FORMAT_P010_10LE,
DXGI_FORMAT_P010, DXGI_FORMAT_R16_UNORM, DXGI_FORMAT_R16G16_UNORM),
FormatBuilder::Buffer (GST_VIDEO_FORMAT_IYU2),
FormatBuilder::YuvPacked (GST_VIDEO_FORMAT_IYU2,
DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM),
FormatBuilder::YuvPacked (GST_VIDEO_FORMAT_VYUY,
DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM),
FormatBuilder::PlanarFull (GST_VIDEO_FORMAT_GBRA),