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 */ /* pre/post processing required formats */
#define GST_D3D12_TIER_LAST_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 \ #define GST_D3D12_COMMON_FORMATS \
GST_D3D12_TIER_0_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_UYVY:
case GST_VIDEO_FORMAT_VYUY: case GST_VIDEO_FORMAT_VYUY:
case GST_VIDEO_FORMAT_YVYU: case GST_VIDEO_FORMAT_YVYU:
case GST_VIDEO_FORMAT_v308:
case GST_VIDEO_FORMAT_IYU2:
conv_format = GST_VIDEO_FORMAT_AYUV; conv_format = GST_VIDEO_FORMAT_AYUV;
break; break;
case GST_VIDEO_FORMAT_Y410: case GST_VIDEO_FORMAT_Y410:
@ -162,9 +164,16 @@ gst_d3d12_pack_new (GstD3D12Device * device,
case GST_VIDEO_FORMAT_Y210: case GST_VIDEO_FORMAT_Y210:
case GST_VIDEO_FORMAT_Y212_LE: case GST_VIDEO_FORMAT_Y212_LE:
case GST_VIDEO_FORMAT_Y216_LE: case GST_VIDEO_FORMAT_Y216_LE:
case GST_VIDEO_FORMAT_v210:
case GST_VIDEO_FORMAT_v216:
conv_format = GST_VIDEO_FORMAT_AYUV64; conv_format = GST_VIDEO_FORMAT_AYUV64;
break; 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_BGR10A2_LE:
case GST_VIDEO_FORMAT_r210:
conv_format = GST_VIDEO_FORMAT_RGB10A2_LE; conv_format = GST_VIDEO_FORMAT_RGB10A2_LE;
break; break;
case GST_VIDEO_FORMAT_BGRA64_LE: 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_UYVY:
case GST_VIDEO_FORMAT_VYUY: case GST_VIDEO_FORMAT_VYUY:
case GST_VIDEO_FORMAT_YVYU: case GST_VIDEO_FORMAT_YVYU:
case GST_VIDEO_FORMAT_v308:
case GST_VIDEO_FORMAT_IYU2:
conv_format = GST_VIDEO_FORMAT_AYUV; conv_format = GST_VIDEO_FORMAT_AYUV;
break; break;
case GST_VIDEO_FORMAT_Y210: case GST_VIDEO_FORMAT_Y210:
case GST_VIDEO_FORMAT_Y212_LE: case GST_VIDEO_FORMAT_Y212_LE:
case GST_VIDEO_FORMAT_Y216_LE: case GST_VIDEO_FORMAT_Y216_LE:
case GST_VIDEO_FORMAT_v210:
case GST_VIDEO_FORMAT_v216:
conv_format = GST_VIDEO_FORMAT_AYUV64; conv_format = GST_VIDEO_FORMAT_AYUV64;
break; 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_RGB16:
case GST_VIDEO_FORMAT_BGR16: case GST_VIDEO_FORMAT_BGR16:
case GST_VIDEO_FORMAT_RGB15: 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_SUPPORT1_SHADER_LOAD,
D3D12_FORMAT_SUPPORT2_UAV_TYPED_STORE 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* */ /* *INDENT-ON* */

View file

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