PR #21137 opened by Steven Xiao (younengxiao)
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21137
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21137.patch

Improves error diagnostics for D3D12 video encoders check feature support by 
adding
detailed ValidationFlags reporting when driver validation fails.

This made it easy for users to identify which specific feature was
unsupported without manually decoding the flags.

This decodes the ValidationFlags bitmask and logs each unsupported
feature individually:
  "Driver does not support requested features. ValidationFlags: 0x4"
  "  - Codec configuration not supported"

The improvement covers all 9 D3D12 validation flags:
- CODEC_NOT_SUPPORTED
- INPUT_FORMAT_NOT_SUPPORTED
- CODEC_CONFIGURATION_NOT_SUPPORTED
- RATE_CONTROL_MODE_NOT_SUPPORTED
- RATE_CONTROL_CONFIGURATION_NOT_SUPPORTED
- INTRA_REFRESH_MODE_NOT_SUPPORTED
- SUBREGION_LAYOUT_MODE_NOT_SUPPORTED
- RESOLUTION_NOT_SUPPORTED_IN_LIST
- GOP_STRUCTURE_NOT_SUPPORTED



>From 07dcbf54db72a9c3b9b237247d4bd68d921359f6 Mon Sep 17 00:00:00 2001
From: stevxiao <[email protected]>
Date: Mon, 8 Dec 2025 17:56:43 -0500
Subject: [PATCH] avcodec/d3d12va_encode: add detailed ValidationFlags error
 reporting for video encoders check feature support

Improves error diagnostics for D3D12 video encoders check feature support by 
adding
detailed ValidationFlags reporting when driver validation fails.

This made it easy for users to identify which specific feature was
unsupported without manually decoding the flags.

This decodes the ValidationFlags bitmask and logs each unsupported
feature individually:
  "Driver does not support requested features. ValidationFlags: 0x4"
  "  - Codec configuration not supported"
---
 libavcodec/d3d12va_encode_av1.c  | 22 +++++++++++++++++++++-
 libavcodec/d3d12va_encode_h264.c | 22 +++++++++++++++++++++-
 libavcodec/d3d12va_encode_hevc.c | 22 +++++++++++++++++++++-
 3 files changed, 63 insertions(+), 3 deletions(-)

diff --git a/libavcodec/d3d12va_encode_av1.c b/libavcodec/d3d12va_encode_av1.c
index 31d3df33bd..0e3652d988 100644
--- a/libavcodec/d3d12va_encode_av1.c
+++ b/libavcodec/d3d12va_encode_av1.c
@@ -583,8 +583,28 @@ static int 
d3d12va_encode_av1_init_sequence_params(AVCodecContext *avctx)
     }
 
     if (!(support.SupportFlags & 
D3D12_VIDEO_ENCODER_SUPPORT_FLAG_GENERAL_SUPPORT_OK)) {
-        av_log(avctx, AV_LOG_ERROR, "Driver does not support some request 
D3D12VA AV1 features. %#x\n",
+        av_log(avctx, AV_LOG_ERROR, "Driver does not support requested 
features. ValidationFlags: %#x\n",
                support.ValidationFlags);
+
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Codec not supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INPUT_FORMAT_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Input format not supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_CONFIGURATION_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Codec configuration not 
supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_MODE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Rate control mode not 
supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_CONFIGURATION_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Rate control configuration not 
supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INTRA_REFRESH_MODE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Intra refresh mode not 
supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_SUBREGION_LAYOUT_MODE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Subregion layout mode not 
supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RESOLUTION_NOT_SUPPORTED_IN_LIST)
+            av_log(avctx, AV_LOG_ERROR, "  - Resolution not supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_GOP_STRUCTURE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - GOP structure not supported\n");
+
         return AVERROR(EINVAL);
     }
 
diff --git a/libavcodec/d3d12va_encode_h264.c b/libavcodec/d3d12va_encode_h264.c
index bcf5a326e5..3231261137 100644
--- a/libavcodec/d3d12va_encode_h264.c
+++ b/libavcodec/d3d12va_encode_h264.c
@@ -201,8 +201,28 @@ static int 
d3d12va_encode_h264_init_sequence_params(AVCodecContext *avctx)
     }
 
     if (!(support.SupportFlags & 
D3D12_VIDEO_ENCODER_SUPPORT_FLAG_GENERAL_SUPPORT_OK)) {
-        av_log(avctx, AV_LOG_ERROR, "Driver does not support some request 
features. %#x\n",
+        av_log(avctx, AV_LOG_ERROR, "Driver does not support requested 
features. ValidationFlags: %#x\n",
                support.ValidationFlags);
+
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Codec not supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INPUT_FORMAT_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Input format not supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_CONFIGURATION_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Codec configuration not 
supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_MODE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Rate control mode not 
supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_CONFIGURATION_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Rate control configuration not 
supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INTRA_REFRESH_MODE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Intra refresh mode not 
supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_SUBREGION_LAYOUT_MODE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Subregion layout mode not 
supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RESOLUTION_NOT_SUPPORTED_IN_LIST)
+            av_log(avctx, AV_LOG_ERROR, "  - Resolution not supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_GOP_STRUCTURE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - GOP structure not supported\n");
+
         return AVERROR(EINVAL);
     }
 
diff --git a/libavcodec/d3d12va_encode_hevc.c b/libavcodec/d3d12va_encode_hevc.c
index e00ecbb4de..0db4677e24 100644
--- a/libavcodec/d3d12va_encode_hevc.c
+++ b/libavcodec/d3d12va_encode_hevc.c
@@ -273,8 +273,28 @@ static int 
d3d12va_encode_hevc_init_sequence_params(AVCodecContext *avctx)
     }
 
     if (!(support.SupportFlags & 
D3D12_VIDEO_ENCODER_SUPPORT_FLAG_GENERAL_SUPPORT_OK)) {
-        av_log(avctx, AV_LOG_ERROR, "Driver does not support some request 
features. %#x\n",
+        av_log(avctx, AV_LOG_ERROR, "Driver does not support requested 
features. ValidationFlags: %#x\n",
                support.ValidationFlags);
+
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Codec not supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INPUT_FORMAT_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Input format not supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_CONFIGURATION_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Codec configuration not 
supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_MODE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Rate control mode not 
supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_CONFIGURATION_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Rate control configuration not 
supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INTRA_REFRESH_MODE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Intra refresh mode not 
supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_SUBREGION_LAYOUT_MODE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Subregion layout mode not 
supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RESOLUTION_NOT_SUPPORTED_IN_LIST)
+            av_log(avctx, AV_LOG_ERROR, "  - Resolution not supported\n");
+        if (support.ValidationFlags & 
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_GOP_STRUCTURE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - GOP structure not supported\n");
+
         return AVERROR(EINVAL);
     }
 
-- 
2.49.1

_______________________________________________
ffmpeg-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to