d3d12: fix incorrect IsRefUsedByCurrentPic marking for P Frame

- On P Frame, we were looking at L1 list to determine IsRefUsedByCurrentPic.

Reviewed-by: Jesse Natalie <jenatali@microsoft.com>
Reviewed by: Pohsiang (John) Hsu <pohhsu@microsoft.com>

Reviewed-by: Jesse Natalie <None>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33312>
This commit is contained in:
Pohsiang (John) Hsu 2024-11-04 17:01:14 -08:00 committed by Marge Bot
parent e026f40b5f
commit ad66315a67

View file

@ -288,8 +288,11 @@ d3d12_video_encoder_references_manager_hevc::begin_frame(D3D12_VIDEO_ENCODER_PIC
// and set IsRefUsedByCurrentPic accordingly
auto endItL0 = hevcPic->ref_list0 + (hevcPic->num_ref_idx_l0_active_minus1 + 1);
bool bReferencesFromL0 = std::find(hevcPic->ref_list0, endItL0, i) != endItL0;
auto endItL1 = hevcPic->ref_list1 + (hevcPic->num_ref_idx_l1_active_minus1 + 1);
bool bReferencesFromL1 = std::find(hevcPic->ref_list1, endItL1, i) != endItL1;
bool bReferencesFromL1 = false;
if (d3d12_video_encoder_convert_frame_type_hevc(hevcPic->picture_type) == D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC_B_FRAME) {
auto endItL1 = hevcPic->ref_list1 + (hevcPic->num_ref_idx_l1_active_minus1 + 1);
bReferencesFromL1 = std::find(hevcPic->ref_list1, endItL1, i) != endItL1;
}
m_CurrentFrameReferencesData.pReferenceFramesReconPictureDescriptors[i].IsRefUsedByCurrentPic =
bReferencesFromL0 || bReferencesFromL1;