diff options
author | Sil Vilerino <sivileri@microsoft.com> | 2023-03-31 11:12:28 -0400 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2023-03-31 20:13:20 +0000 |
commit | 1995762d6851b6466c791c472817718bd8811e3e (patch) | |
tree | d43f8695685ff79e569b193558dbce2a619af56b /src/gallium | |
parent | 0f60c18f298bc809c37c9fb917c42c37b5061c13 (diff) |
Revert "d3d12: Honor suggested driver profile/level for H264/HEVC encode"
This reverts commit 37652da61612aadfedc23ba484b33781654d5d56.
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22239>
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/drivers/d3d12/d3d12_video_enc_h264.cpp | 28 | ||||
-rw-r--r-- | src/gallium/drivers/d3d12/d3d12_video_enc_hevc.cpp | 38 | ||||
-rw-r--r-- | src/gallium/drivers/d3d12/d3d12_video_types.h | 4 |
3 files changed, 23 insertions, 47 deletions
diff --git a/src/gallium/drivers/d3d12/d3d12_video_enc_h264.cpp b/src/gallium/drivers/d3d12/d3d12_video_enc_h264.cpp index 37b7eab3277..2c70756ee18 100644 --- a/src/gallium/drivers/d3d12/d3d12_video_enc_h264.cpp +++ b/src/gallium/drivers/d3d12/d3d12_video_enc_h264.cpp @@ -631,14 +631,18 @@ d3d12_video_encoder_update_current_encoder_config_state_h264(struct d3d12_video_ } // Set profile - auto lastFrameProfile = pD3D12Enc->m_currentEncodeConfig.m_encoderProfileDesc.m_H264Profile; - pD3D12Enc->m_currentEncodeConfig.m_encoderProfileDesc.m_H264Profile = - d3d12_video_encoder_convert_profile_to_d3d12_enc_profile_h264(pD3D12Enc->base.profile); + auto targetProfile = d3d12_video_encoder_convert_profile_to_d3d12_enc_profile_h264(pD3D12Enc->base.profile); + if (pD3D12Enc->m_currentEncodeConfig.m_encoderProfileDesc.m_H264Profile != targetProfile) { + pD3D12Enc->m_currentEncodeConfig.m_ConfigDirtyFlags |= d3d12_video_encoder_config_dirty_flag_profile; + } + pD3D12Enc->m_currentEncodeConfig.m_encoderProfileDesc.m_H264Profile = targetProfile; // Set level - auto lastFrameLevel = pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_H264LevelSetting; - pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_H264LevelSetting = - d3d12_video_encoder_convert_level_h264(pD3D12Enc->base.level); + auto targetLevel = d3d12_video_encoder_convert_level_h264(pD3D12Enc->base.level); + if (pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_H264LevelSetting != targetLevel) { + pD3D12Enc->m_currentEncodeConfig.m_ConfigDirtyFlags |= d3d12_video_encoder_config_dirty_flag_level; + } + pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_H264LevelSetting = targetLevel; // Set codec config bool is_supported = false; @@ -716,28 +720,16 @@ d3d12_video_encoder_update_current_encoder_config_state_h264(struct d3d12_video_ "mismatches UMD suggested D3D12_VIDEO_ENCODER_PROFILE_H264: %d\n", pD3D12Enc->m_currentEncodeConfig.m_encoderProfileDesc.m_H264Profile, pD3D12Enc->m_currentEncodeCapabilities.m_encoderSuggestedProfileDesc.m_H264Profile); - if (!D3D12_VIDEO_ENC_HONOR_PROFILE_LEVEL_PIPE) - pD3D12Enc->m_currentEncodeConfig.m_encoderProfileDesc.m_H264Profile = - pD3D12Enc->m_currentEncodeCapabilities.m_encoderSuggestedProfileDesc.m_H264Profile; } - if (lastFrameProfile != pD3D12Enc->m_currentEncodeConfig.m_encoderProfileDesc.m_H264Profile) - pD3D12Enc->m_currentEncodeConfig.m_ConfigDirtyFlags |= d3d12_video_encoder_config_dirty_flag_profile; - if (pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_H264LevelSetting != pD3D12Enc->m_currentEncodeCapabilities.m_encoderLevelSuggestedDesc.m_H264LevelSetting) { debug_printf("[d3d12_video_encoder_h264] Warning: Requested D3D12_VIDEO_ENCODER_LEVELS_H264 by upper layer: %d " "mismatches UMD suggested D3D12_VIDEO_ENCODER_LEVELS_H264: %d\n", pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_H264LevelSetting, pD3D12Enc->m_currentEncodeCapabilities.m_encoderLevelSuggestedDesc.m_H264LevelSetting); - if (!D3D12_VIDEO_ENC_HONOR_PROFILE_LEVEL_PIPE) - pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_H264LevelSetting = - pD3D12Enc->m_currentEncodeCapabilities.m_encoderLevelSuggestedDesc.m_H264LevelSetting; } - if (lastFrameLevel != pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_H264LevelSetting) - pD3D12Enc->m_currentEncodeConfig.m_ConfigDirtyFlags |= d3d12_video_encoder_config_dirty_flag_level; - if (pD3D12Enc->m_currentEncodeCapabilities.m_MaxSlicesInOutput > pD3D12Enc->m_currentEncodeCapabilities.m_currentResolutionSupportCaps.MaxSubregionsNumber) { debug_printf("[d3d12_video_encoder_h264] Desired number of subregions is not supported (higher than max " diff --git a/src/gallium/drivers/d3d12/d3d12_video_enc_hevc.cpp b/src/gallium/drivers/d3d12/d3d12_video_enc_hevc.cpp index 004d39a1edf..ae0edc33caa 100644 --- a/src/gallium/drivers/d3d12/d3d12_video_enc_hevc.cpp +++ b/src/gallium/drivers/d3d12/d3d12_video_enc_hevc.cpp @@ -566,17 +566,21 @@ d3d12_video_encoder_update_current_encoder_config_state_hevc(struct d3d12_video_ pD3D12Enc->m_currentEncodeConfig.m_FrameCroppingCodecConfig.bottom = hevcPic->seq.conf_win_bottom_offset; } // Set profile - auto lastFrameProfile = pD3D12Enc->m_currentEncodeConfig.m_encoderProfileDesc.m_HEVCProfile; - pD3D12Enc->m_currentEncodeConfig.m_encoderProfileDesc.m_HEVCProfile = - d3d12_video_encoder_convert_profile_to_d3d12_enc_profile_hevc(pD3D12Enc->base.profile); + auto targetProfile = d3d12_video_encoder_convert_profile_to_d3d12_enc_profile_hevc(pD3D12Enc->base.profile); + if (pD3D12Enc->m_currentEncodeConfig.m_encoderProfileDesc.m_HEVCProfile != targetProfile) { + pD3D12Enc->m_currentEncodeConfig.m_ConfigDirtyFlags |= d3d12_video_encoder_config_dirty_flag_profile; + } + pD3D12Enc->m_currentEncodeConfig.m_encoderProfileDesc.m_HEVCProfile = targetProfile; // Set level - auto lastFrameLevel = pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_HEVCLevelSetting.Level; - auto lastFrameTier = pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_HEVCLevelSetting.Tier; - pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_HEVCLevelSetting.Level = - d3d12_video_encoder_convert_level_hevc(hevcPic->seq.general_level_idc); - pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_HEVCLevelSetting.Tier = - (hevcPic->seq.general_tier_flag == 0) ? D3D12_VIDEO_ENCODER_TIER_HEVC_MAIN : D3D12_VIDEO_ENCODER_TIER_HEVC_HIGH; + auto targetLevel = d3d12_video_encoder_convert_level_hevc(hevcPic->seq.general_level_idc); + auto targetTier = (hevcPic->seq.general_tier_flag == 0) ? D3D12_VIDEO_ENCODER_TIER_HEVC_MAIN : D3D12_VIDEO_ENCODER_TIER_HEVC_HIGH; + if ( (pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_HEVCLevelSetting.Level != targetLevel) + || (pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_HEVCLevelSetting.Tier != targetTier)) { + pD3D12Enc->m_currentEncodeConfig.m_ConfigDirtyFlags |= d3d12_video_encoder_config_dirty_flag_level; + } + pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_HEVCLevelSetting.Tier = targetTier; + pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_HEVCLevelSetting.Level = targetLevel; // Set codec config bool is_supported = true; @@ -654,23 +658,14 @@ d3d12_video_encoder_update_current_encoder_config_state_hevc(struct d3d12_video_ "mismatches UMD suggested D3D12_VIDEO_ENCODER_PROFILE_HEVC: %d\n", pD3D12Enc->m_currentEncodeConfig.m_encoderProfileDesc.m_HEVCProfile, pD3D12Enc->m_currentEncodeCapabilities.m_encoderSuggestedProfileDesc.m_HEVCProfile); - if (!D3D12_VIDEO_ENC_HONOR_PROFILE_LEVEL_PIPE) - pD3D12Enc->m_currentEncodeConfig.m_encoderProfileDesc.m_HEVCProfile = - pD3D12Enc->m_currentEncodeCapabilities.m_encoderSuggestedProfileDesc.m_HEVCProfile; } - if (lastFrameProfile != pD3D12Enc->m_currentEncodeConfig.m_encoderProfileDesc.m_HEVCProfile) - pD3D12Enc->m_currentEncodeConfig.m_ConfigDirtyFlags |= d3d12_video_encoder_config_dirty_flag_profile; - if (pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_HEVCLevelSetting.Tier != pD3D12Enc->m_currentEncodeCapabilities.m_encoderLevelSuggestedDesc.m_HEVCLevelSetting.Tier) { debug_printf("[d3d12_video_encoder_hevc] Warning: Requested D3D12_VIDEO_ENCODER_LEVELS_HEVC.Tier by upper layer: %d " "mismatches UMD suggested D3D12_VIDEO_ENCODER_LEVELS_HEVC.Tier: %d\n", pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_HEVCLevelSetting.Tier, pD3D12Enc->m_currentEncodeCapabilities.m_encoderLevelSuggestedDesc.m_HEVCLevelSetting.Tier); - if (!D3D12_VIDEO_ENC_HONOR_PROFILE_LEVEL_PIPE) - pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_HEVCLevelSetting.Tier = - pD3D12Enc->m_currentEncodeCapabilities.m_encoderLevelSuggestedDesc.m_HEVCLevelSetting.Tier; } if (pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_HEVCLevelSetting.Level != @@ -679,15 +674,8 @@ d3d12_video_encoder_update_current_encoder_config_state_hevc(struct d3d12_video_ "mismatches UMD suggested D3D12_VIDEO_ENCODER_LEVELS_HEVC.Level: %d\n", pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_HEVCLevelSetting.Level, pD3D12Enc->m_currentEncodeCapabilities.m_encoderLevelSuggestedDesc.m_HEVCLevelSetting.Level); - if (!D3D12_VIDEO_ENC_HONOR_PROFILE_LEVEL_PIPE) - pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_HEVCLevelSetting.Level = - pD3D12Enc->m_currentEncodeCapabilities.m_encoderLevelSuggestedDesc.m_HEVCLevelSetting.Level; } - if ( (pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_HEVCLevelSetting.Level != lastFrameLevel) - || (pD3D12Enc->m_currentEncodeConfig.m_encoderLevelDesc.m_HEVCLevelSetting.Tier != lastFrameTier)) - pD3D12Enc->m_currentEncodeConfig.m_ConfigDirtyFlags |= d3d12_video_encoder_config_dirty_flag_level; - if (pD3D12Enc->m_currentEncodeCapabilities.m_MaxSlicesInOutput > pD3D12Enc->m_currentEncodeCapabilities.m_currentResolutionSupportCaps.MaxSubregionsNumber) { debug_printf("[d3d12_video_encoder_hevc] Desired number of subregions is not supported (higher than max " diff --git a/src/gallium/drivers/d3d12/d3d12_video_types.h b/src/gallium/drivers/d3d12/d3d12_video_types.h index ca1335df9d4..38f4c11cd1e 100644 --- a/src/gallium/drivers/d3d12/d3d12_video_types.h +++ b/src/gallium/drivers/d3d12/d3d12_video_types.h @@ -93,10 +93,6 @@ const uint64_t D3D12_VIDEO_ENC_METADATA_BUFFERS_COUNT = debug_get_num_option("D3 constexpr unsigned int D3D12_VIDEO_H264_MB_IN_PIXELS = 16; -/* If enabled, the D3D12 encoder will honor the level/profile requested by pipe */ -/* If disabled, the D3D12 encoder will honor the level/profile suggested by the DX12 driver */ -const bool D3D12_VIDEO_ENC_HONOR_PROFILE_LEVEL_PIPE = debug_get_bool_option("D3D12_VIDEO_ENC_HONOR_PROFILE_LEVEL_PIPE", false); - enum d3d12_video_decode_config_specific_flags { d3d12_video_decode_config_specific_flag_none = 0, |