--- ./src/gallium/drivers/radeonsi/si_video_dec.c.orig 2026-06-03 03:37:14.000000000 -0500 +++ ./src/gallium/drivers/radeonsi/si_video_dec.c 2026-06-11 15:18:12.593455888 -0500 @@ -130,7 +130,7 @@ for (uint32_t i = 0; i < surf->num_planes; i++) { assert(tex); - surf->planes[i].va = si_dec_buf_address(vid, &tex->buffer, RADEON_USAGE_READWRITE, RADEON_DOMAIN_VRAM); + surf->planes[i].va = si_dec_buf_address(vid, &tex->buffer, usage, RADEON_DOMAIN_VRAM); if (sscreen->info.gfx_level >= GFX9) { surf->planes[i].va += tex->surface.u.gfx9.surf_offset; } else { @@ -590,8 +590,10 @@ if (pic->bottom_is_reference[j]) h264->used_for_reference_flags |= (1 << (2 * j + 1)); h264->curr_pic_ref_frame_num++; - si_dec_fill_surface(vid, ((struct vl_video_buffer *)pic->ref[j])->resources[0], - RADEON_USAGE_READWRITE, &cmd.ref_surfaces[cmd.num_refs]); + if (cmd.tier == AC_VIDEO_DEC_TIER3) { + si_dec_fill_surface(vid, ((struct vl_video_buffer *)pic->ref[j])->resources[0], + RADEON_USAGE_READWRITE, &cmd.ref_surfaces[cmd.num_refs]); + } cmd.ref_id[cmd.num_refs++] = i; found = true; } @@ -747,8 +749,10 @@ if (vid->render_pic_list[i] == pic->ref[j]) { h265->ref_poc_list[j] = pic->PicOrderCntVal[j]; h265->ref_pic_id_list[j] = i; - si_dec_fill_surface(vid, ((struct vl_video_buffer *)pic->ref[j])->resources[0], - RADEON_USAGE_READWRITE, &cmd.ref_surfaces[cmd.num_refs]); + if (cmd.tier == AC_VIDEO_DEC_TIER3) { + si_dec_fill_surface(vid, ((struct vl_video_buffer *)pic->ref[j])->resources[0], + RADEON_USAGE_READWRITE, &cmd.ref_surfaces[cmd.num_refs]); + } cmd.ref_id[cmd.num_refs++] = i; valid_ref = j; found = true; @@ -923,8 +927,10 @@ for (unsigned j = 0; j < VP9_NUM_REF_FRAMES; j++) { if (vid->render_pic_list[i] == pic->ref[j]) { vp9->ref_frame_id_list[j] = i; - si_dec_fill_surface(vid, ((struct vl_video_buffer *)pic->ref[j])->resources[0], - RADEON_USAGE_READWRITE, &cmd.ref_surfaces[cmd.num_refs]); + if (cmd.tier == AC_VIDEO_DEC_TIER3) { + si_dec_fill_surface(vid, ((struct vl_video_buffer *)pic->ref[j])->resources[0], + RADEON_USAGE_READWRITE, &cmd.ref_surfaces[cmd.num_refs]); + } cmd.ref_id[cmd.num_refs++] = i; valid_ref = j; found = true; @@ -1139,8 +1145,10 @@ for (unsigned j = 0; j < AV1_NUM_REF_FRAMES; j++) { if (vid->render_pic_list[i] == pic->ref[j]) { av1->ref_frame_id_list[j] = i; - si_dec_fill_surface(vid, ((struct vl_video_buffer *)pic->ref[j])->resources[0], - RADEON_USAGE_READWRITE, &cmd.ref_surfaces[cmd.num_refs]); + if (cmd.tier == AC_VIDEO_DEC_TIER3) { + si_dec_fill_surface(vid, ((struct vl_video_buffer *)pic->ref[j])->resources[0], + RADEON_USAGE_READWRITE, &cmd.ref_surfaces[cmd.num_refs]); + } cmd.ref_id[cmd.num_refs++] = i; valid_ref = j; found = true;