--- ./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;
