d3d12: d3d12_video_encoder_references_manager_hevc remove double resize() and add reserve() to cached vectors

Reviewed-by: Pohsiang (John) Hsu <pohhsu@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38057>
This commit is contained in:
Silvio Vilerino 2025-10-22 00:51:45 -04:00 committed by Marge Bot
parent ed53936308
commit 31c9874891
2 changed files with 20 additions and 3 deletions

View file

@ -94,6 +94,7 @@ d3d12_video_encoder_friendly_frame_type_hevc(D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC
}
}
#ifdef MESA_DEBUG
void
d3d12_video_encoder_references_manager_hevc::print_l0_l1_lists()
{
@ -169,7 +170,9 @@ d3d12_video_encoder_references_manager_hevc::print_l0_l1_lists()
modificationOrderList1ContentsString.c_str());
}
}
#endif // MESA_DEBUG
#ifdef MESA_DEBUG
void
d3d12_video_encoder_references_manager_hevc::print_dpb()
{
@ -218,6 +221,7 @@ d3d12_video_encoder_references_manager_hevc::print_dpb()
dpbContents.c_str());
}
}
#endif // MESA_DEBUG
static D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC
d3d12_video_encoder_convert_frame_type_hevc(enum pipe_h2645_enc_picture_type picType)
@ -271,7 +275,6 @@ d3d12_video_encoder_references_manager_hevc::begin_frame(const D3D12_VIDEO_ENCOD
m_CurrentFrameReferencesData.pReferenceFramesReconPictureDescriptors.resize(hevcPic->dpb_size);
m_CurrentFrameReferencesData.ReferenceTextures.pResources.resize(hevcPic->dpb_size);
m_CurrentFrameReferencesData.ReferenceTextures.pSubresources.resize(hevcPic->dpb_size);
m_CurrentFrameReferencesData.pReferenceFramesReconPictureDescriptors.resize(hevcPic->dpb_size);
m_CurrentFrameReferencesData.ReconstructedPicTexture = { NULL, 0u };
for (uint8_t i = 0; i < hevcPic->dpb_size; i++) {
//
@ -384,6 +387,8 @@ d3d12_video_encoder_references_manager_hevc::begin_frame(const D3D12_VIDEO_ENCOD
}
}
#ifdef MESA_DEBUG
print_dpb();
print_l0_l1_lists();
#endif
}

View file

@ -26,6 +26,7 @@
#include "d3d12_video_types.h"
#include "d3d12_video_encoder_references_manager.h"
#include "pipe/p_video_state.h"
class d3d12_video_encoder_references_manager_hevc : public d3d12_video_encoder_references_manager_interface
{
@ -48,7 +49,16 @@ class d3d12_video_encoder_references_manager_hevc : public d3d12_video_encoder_r
{ }
d3d12_video_encoder_references_manager_hevc(bool fArrayOfTextures) : m_fArrayOfTextures(fArrayOfTextures)
{ }
{
// Reserve memory for typical HEVC encoder usage to avoid per-frame allocations
m_CurrentFrameReferencesData.pReferenceFramesReconPictureDescriptors.reserve(PIPE_H265_MAX_DPB_SIZE);
m_CurrentFrameReferencesData.ReferenceTextures.pResources.reserve(PIPE_H265_MAX_DPB_SIZE);
m_CurrentFrameReferencesData.ReferenceTextures.pSubresources.reserve(PIPE_H265_MAX_DPB_SIZE);
m_CurrentFrameReferencesData.pList0ReferenceFrames.reserve(PIPE_H265_MAX_NUM_LIST_REF);
m_CurrentFrameReferencesData.pList1ReferenceFrames.reserve(PIPE_H265_MAX_NUM_LIST_REF);
m_CurrentFrameReferencesData.pList0RefPicModifications.reserve(PIPE_H265_MAX_NUM_LIST_REF);
m_CurrentFrameReferencesData.pList1RefPicModifications.reserve(PIPE_H265_MAX_NUM_LIST_REF);
}
~d3d12_video_encoder_references_manager_hevc()
{ }
@ -56,8 +66,10 @@ class d3d12_video_encoder_references_manager_hevc : public d3d12_video_encoder_r
private:
// Class helpers
void update_fifo_dpb_push_front_cur_recon_pic();
#ifdef MESA_DEBUG
void print_dpb();
void print_l0_l1_lists();
#endif
// Class members
struct d3d12_video_dpb
@ -80,7 +92,7 @@ class d3d12_video_encoder_references_manager_hevc : public d3d12_video_encoder_r
current_frame_references_data m_CurrentFrameReferencesData;
bool m_isCurrentFrameUsedAsReference = false;
D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC2 m_curFrameState = {};
D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC2 m_curFrameState = {};
bool m_fArrayOfTextures = false;
};