From 25514c8fc161cfa39c02dff9b061d46869d9ca1a Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Sun, 23 Jun 2024 22:16:36 +0900 Subject: [PATCH] d3d12: Add v216, v210, r210, v308, IYU2, RGB, BGR format support Reuse the compute shader implemented for d3d11 Part-of: --- .../gst-libs/gst/d3d12/gstd3d12-private.h | 3 ++- .../gst/d3d12/gstd3d12converter-pack.cpp | 9 ++++++++ .../gst/d3d12/gstd3d12converter-unpack.cpp | 11 +++++++++ .../gst-libs/gst/d3d12/gstd3d12device.cpp | 6 +++++ .../gst-libs/gst/d3d12/gstd3d12format.cpp | 23 ++++++++++++------- 5 files changed, 43 insertions(+), 9 deletions(-) diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12-private.h b/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12-private.h index 530942cbd9..07a5899451 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12-private.h +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12-private.h @@ -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 ", " \ diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12converter-pack.cpp b/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12converter-pack.cpp index 0bbee8fc3b..e919c7d74c 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12converter-pack.cpp +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12converter-pack.cpp @@ -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: diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12converter-unpack.cpp b/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12converter-unpack.cpp index 08b227ad62..694a82b280 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12converter-unpack.cpp +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12converter-unpack.cpp @@ -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: diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12device.cpp b/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12device.cpp index 826ed17849..5d1b1b689d 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12device.cpp +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12device.cpp @@ -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* */ diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12format.cpp b/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12format.cpp index 7868aba764..d9b6bc90d8 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12format.cpp +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12format.cpp @@ -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),