summaryrefslogtreecommitdiff
path: root/src/gallium
diff options
context:
space:
mode:
authorSil Vilerino <sivileri@microsoft.com>2023-03-31 11:12:28 -0400
committerMarge Bot <emma+marge@anholt.net>2023-03-31 20:13:20 +0000
commit1995762d6851b6466c791c472817718bd8811e3e (patch)
treed43f8695685ff79e569b193558dbce2a619af56b /src/gallium
parent0f60c18f298bc809c37c9fb917c42c37b5061c13 (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.cpp28
-rw-r--r--src/gallium/drivers/d3d12/d3d12_video_enc_hevc.cpp38
-rw-r--r--src/gallium/drivers/d3d12/d3d12_video_types.h4
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,