From c9dcef66aa7070faaf51b29eedabcdc97ed15695 Mon Sep 17 00:00:00 2001 From: dancingmirrors Date: Wed, 8 Jul 2026 13:19:36 -0600 Subject: [PATCH] hasvk: Emit MFX_AVC_WEIGHTOFFSET_STATE for both list 0 and list 1. Fixes Haswell corruption with https://files.lynne.ee/testsamples/bbc2.sample.h264. This is the correct thing to do anyway and only worked on Ivy Bridge by accident. Assisted-by: Claude --- src/intel/vulkan_hasvk/genX_cmd_video.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/intel/vulkan_hasvk/genX_cmd_video.c b/src/intel/vulkan_hasvk/genX_cmd_video.c index 24942c2..a8a2e2e 100644 --- a/src/intel/vulkan_hasvk/genX_cmd_video.c +++ b/src/intel/vulkan_hasvk/genX_cmd_video.c @@ -794,11 +794,14 @@ anv_h264_decode_video(struct anv_cmd_buffer *cmd_buffer, } } - bool need_w_l0 = (pps->flags.weighted_pred_flag && - cur && (cur->slice_type == ANV_H264_SLICE_P || - cur->slice_type == ANV_H264_SLICE_SP)); - bool need_w_l1 = (pps->weighted_bipred_idc == 1 && - cur && cur->slice_type == ANV_H264_SLICE_B); + /* Emit MFX_AVC_WEIGHTOFFSET_STATE for both list 0 and list 1. */ + bool is_b = cur && cur->slice_type == ANV_H264_SLICE_B; + bool need_w_l0 = cur && + ((pps->flags.weighted_pred_flag && + (cur->slice_type == ANV_H264_SLICE_P || + cur->slice_type == ANV_H264_SLICE_SP)) || + (pps->weighted_bipred_idc == 1 && is_b)); + bool need_w_l1 = pps->weighted_bipred_idc == 1 && is_b; if (need_w_l0 || need_w_l1) { for (unsigned list = 0; list <= 1; list++) { if (list == 0 && !need_w_l0) continue;