mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-10 19:00:13 +01:00
d3d12: Relax slice caps requirements for video encode
The check in d3d12_has_video_encode_support was returning no encode support unless the driver supported D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_UNIFORM_PARTITIONING_SUBREGIONS_PER_FRAME when it should also return support when the driver reports only full frame support (ie. D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_FULL_FRAME) Reviewed-by: Giancarlo Devich <gdevich@microsoft.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18763>
This commit is contained in:
parent
f8b4d40a1e
commit
dc523fabef
2 changed files with 17 additions and 14 deletions
|
|
@ -265,6 +265,9 @@ d3d12_video_encoder_negotiate_current_h264_slices_configuration(struct d3d12_vid
|
|||
"enable the OS environment variable D3D12_VIDEO_ENC_FALLBACK_SLICE_CONFIG");
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
debug_printf("[d3d12_video_encoder_h264] Requested slice control mode is full frame. m_SlicesPartition_H264.NumberOfSlicesPerFrame = %d - m_encoderSliceConfigMode = %d \n",
|
||||
requestedSlicesConfig.NumberOfSlicesPerFrame, requestedSlicesMode);
|
||||
}
|
||||
|
||||
if (!d3d12_video_encoder_compare_slice_config_h264_hevc(
|
||||
|
|
|
|||
|
|
@ -586,7 +586,6 @@ d3d12_has_video_encode_support(struct pipe_screen *pscreen,
|
|||
case PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH:
|
||||
case PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH10:
|
||||
{
|
||||
supportsProfile = true;
|
||||
D3D12_VIDEO_ENCODER_PROFILE_DESC profDesc = {};
|
||||
D3D12_VIDEO_ENCODER_PROFILE_H264 profH264 =
|
||||
d3d12_video_encoder_convert_profile_to_d3d12_enc_profile_h264(profile);
|
||||
|
|
@ -609,18 +608,10 @@ d3d12_has_video_encode_support(struct pipe_screen *pscreen,
|
|||
uint32_t constraintset3flag = false;
|
||||
d3d12_video_encoder_convert_from_d3d12_level_h264(maxLvlSettingH264, maxLvlSpec, constraintset3flag);
|
||||
supportsProfile = true;
|
||||
}
|
||||
|
||||
if (supportsProfile) {
|
||||
DXGI_FORMAT encodeFormat = d3d12_convert_pipe_video_profile_to_dxgi_format(profile);
|
||||
supportsProfile = supportsProfile &&
|
||||
d3d12_video_encode_max_supported_resolution(codecDesc, maxRes, spD3D12VideoDevice.Get());
|
||||
supportsProfile = supportsProfile && d3d12_video_encode_max_supported_slices(codecDesc,
|
||||
maxRes,
|
||||
encodeFormat,
|
||||
maxSlices,
|
||||
spD3D12VideoDevice.Get(),
|
||||
d3d12_codec_support);
|
||||
|
||||
D3D12_VIDEO_ENCODER_PROFILE_DESC profile;
|
||||
profile.pH264Profile = &profH264;
|
||||
|
|
@ -632,6 +623,15 @@ d3d12_has_video_encode_support(struct pipe_screen *pscreen,
|
|||
profile,
|
||||
level,
|
||||
spD3D12VideoDevice.Get());
|
||||
if (supportedSliceStructures == PIPE_VIDEO_CAP_SLICE_STRUCTURE_NONE)
|
||||
maxSlices = 0;
|
||||
else
|
||||
supportsProfile = supportsProfile && d3d12_video_encode_max_supported_slices(codecDesc,
|
||||
maxRes,
|
||||
encodeFormat,
|
||||
maxSlices,
|
||||
spD3D12VideoDevice.Get(),
|
||||
d3d12_codec_support);
|
||||
maxReferencesPerFrame =
|
||||
d3d12_video_encode_supported_references_per_frame_structures(codecDesc,
|
||||
profile,
|
||||
|
|
@ -641,7 +641,6 @@ d3d12_has_video_encode_support(struct pipe_screen *pscreen,
|
|||
case PIPE_VIDEO_PROFILE_HEVC_MAIN:
|
||||
case PIPE_VIDEO_PROFILE_HEVC_MAIN_10:
|
||||
{
|
||||
supportsProfile = true;
|
||||
D3D12_VIDEO_ENCODER_PROFILE_DESC profDesc = {};
|
||||
D3D12_VIDEO_ENCODER_PROFILE_HEVC profHEVC =
|
||||
d3d12_video_encoder_convert_profile_to_d3d12_enc_profile_hevc(profile);
|
||||
|
|
@ -663,9 +662,6 @@ d3d12_has_video_encode_support(struct pipe_screen *pscreen,
|
|||
spD3D12VideoDevice.Get())) {
|
||||
d3d12_video_encoder_convert_from_d3d12_level_hevc(maxLvlSettingHEVC.Level, maxLvlSpec);
|
||||
supportsProfile = true;
|
||||
}
|
||||
|
||||
if (supportsProfile) {
|
||||
|
||||
D3D12_VIDEO_ENCODER_PROFILE_DESC d3d12_profile;
|
||||
d3d12_profile.pHEVCProfile = &profHEVC;
|
||||
|
|
@ -779,7 +775,11 @@ d3d12_has_video_encode_support(struct pipe_screen *pscreen,
|
|||
DXGI_FORMAT encodeFormat = d3d12_convert_pipe_video_profile_to_dxgi_format(profile);
|
||||
supportsProfile = supportsProfile &&
|
||||
d3d12_video_encode_max_supported_resolution(codecDesc, maxRes, spD3D12VideoDevice.Get());
|
||||
supportsProfile = supportsProfile && d3d12_video_encode_max_supported_slices(codecDesc,
|
||||
|
||||
if (supportedSliceStructures == PIPE_VIDEO_CAP_SLICE_STRUCTURE_NONE)
|
||||
maxSlices = 0;
|
||||
else
|
||||
supportsProfile = supportsProfile && d3d12_video_encode_max_supported_slices(codecDesc,
|
||||
maxRes,
|
||||
encodeFormat,
|
||||
maxSlices,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue