diff --git a/av1/common/blockd.h b/av1/common/blockd.h
index b2d812a..a104738 100644
--- a/av1/common/blockd.h
+++ b/av1/common/blockd.h
@@ -481,6 +481,8 @@
 #else
   WarpedMotionParams wm_params;
 #endif  // CONFIG_EXTENDED_WARP_PREDICTION
+  /*! \brief Whether global affine warp is used for the block */
+  int global_mv_block[2];
   /*! \brief The type of intra mode used by inter-intra */
   INTERINTRA_MODE interintra_mode;
   /*! \brief The type of wedge used in interintra mode. */
diff --git a/av1/common/mvref_common.c b/av1/common/mvref_common.c
index 9c7c461..36a6bb5 100644
--- a/av1/common/mvref_common.c
+++ b/av1/common/mvref_common.c
@@ -384,7 +384,6 @@
     const MV_REFERENCE_FRAME rf[2], uint8_t *refmv_count,
     uint8_t *ref_match_count, uint8_t *newmv_count, CANDIDATE_MV *ref_mv_stack,
     uint16_t *ref_mv_weight, int_mv *gm_mv_candidates,
-    const WarpedMotionParams *gm_params[INTER_REFS_PER_FRAME],
 #if CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
     const MB_MODE_INFO *mbmi,
     MV_REFERENCE_FRAME ref_frame_idx0[MAX_REF_MV_STACK_SIZE],
@@ -437,7 +436,7 @@
 #endif
       int_mv this_refmv[2];
       for (ref = 0; ref < 2; ++ref) {
-        if (is_global_mv_block(candidate, gm_params[rf[ref]]->wmtype))
+        if (candidate->global_mv_block[ref])
           this_refmv[ref] = gm_mv_candidates[ref];
         else
           this_refmv[ref] = get_block_mv(candidate,
@@ -488,10 +487,9 @@
 #endif  // CONFIG_C071_SUBBLK_WARPMV
                                     ref);
         } else {
-          const int is_gm_block =
-              rf[0] == NONE_FRAME || rf[0] == INTRA_FRAME
-                  ? 0
-                  : is_global_mv_block(candidate, gm_params[rf[0]]->wmtype);
+          const int is_gm_block = rf[0] == NONE_FRAME || rf[0] == INTRA_FRAME
+                                      ? 0
+                                      : candidate->global_mv_block[ref];
           this_refmv = is_gm_block ? gm_mv_candidates[0]
                                    : get_block_mv(candidate,
 #if CONFIG_C071_SUBBLK_WARPMV
@@ -500,10 +498,9 @@
                                                   ref);
         }
 #else
-        const int is_gm_block =
-            rf[0] == NONE_FRAME || rf[0] == INTRA_FRAME
-                ? 0
-                : is_global_mv_block(candidate, gm_params[rf[0]]->wmtype);
+        const int is_gm_block = rf[0] == NONE_FRAME || rf[0] == INTRA_FRAME
+                                    ? 0
+                                    : candidate->global_mv_block[ref];
         const int_mv this_refmv = is_gm_block ? gm_mv_candidates[0]
                                               : get_block_mv(candidate,
 #if CONFIG_C071_SUBBLK_WARPMV
@@ -554,8 +551,7 @@
           const int cand_to_ref_dist =
               cm->ref_frame_relative_dist[candidate->ref_frame[ref]];
 
-          const int is_gm_block = is_global_mv_block(
-              candidate, gm_params[candidate->ref_frame[ref]]->wmtype);
+          const int is_gm_block = candidate->global_mv_block[ref];
           const int_mv cand_refmv = is_gm_block ? gm_mv_candidates[0]
                                                 : get_block_mv(candidate,
 #if CONFIG_C071_SUBBLK_WARPMV
@@ -616,7 +612,7 @@
         int_mv this_refmv[2];
 
         for (ref = 0; ref < 2; ++ref) {
-          if (is_global_mv_block(candidate, gm_params[rf[ref]]->wmtype))
+          if (candidate->global_mv_block[ref])
             this_refmv[ref] = gm_mv_candidates[ref];
           else
             this_refmv[ref] = get_block_mv(candidate,
@@ -666,8 +662,8 @@
 
         if (candidate_ref_idx0 != -1 && candidate_ref_idx1 != -1) {
           int_mv this_refmv[2];
-          const int is_gm_block = is_global_mv_block(
-              candidate, gm_params[rf[candidate_ref_idx0]]->wmtype);
+          const int is_gm_block =
+              candidate->global_mv_block[candidate_ref_idx0];
           this_refmv[candidate_ref_idx0] =
               is_gm_block ? gm_mv_candidates[candidate_ref_idx0]
                           : get_block_mv(candidate,
@@ -819,7 +815,6 @@
     int mi_col, const MV_REFERENCE_FRAME rf[2], int row_offset,
     CANDIDATE_MV *ref_mv_stack, uint16_t *ref_mv_weight, uint8_t *refmv_count,
     uint8_t *ref_match_count, uint8_t *newmv_count, int_mv *gm_mv_candidates,
-    const WarpedMotionParams *gm_params[INTER_REFS_PER_FRAME],
     int max_row_offset,
 #if CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
     MV_REFERENCE_FRAME *ref_frame_idx0, MV_REFERENCE_FRAME *ref_frame_idx1,
@@ -922,7 +917,6 @@
 #endif  // CONFIG_C071_SUBBLK_WARPMV
                          rf, refmv_count, ref_match_count, newmv_count,
                          ref_mv_stack, ref_mv_weight, gm_mv_candidates,
-                         gm_params,
 #if CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
                          xd->mi[0], ref_frame_idx0, ref_frame_idx1,
 #endif  // CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
@@ -981,9 +975,7 @@
 #endif  // CONFIG_TIP || CONFIG_EXT_RECUR_PARTITIONS
     const MV_REFERENCE_FRAME rf[2], int col_offset, CANDIDATE_MV *ref_mv_stack,
     uint16_t *ref_mv_weight, uint8_t *refmv_count, uint8_t *ref_match_count,
-    uint8_t *newmv_count, int_mv *gm_mv_candidates,
-    const WarpedMotionParams *gm_params[INTER_REFS_PER_FRAME],
-    int max_col_offset,
+    uint8_t *newmv_count, int_mv *gm_mv_candidates, int max_col_offset,
 #if CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
     MV_REFERENCE_FRAME *ref_frame_idx0, MV_REFERENCE_FRAME *ref_frame_idx1,
 #endif  // CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
@@ -1083,7 +1075,6 @@
 #endif  // CONFIG_C071_SUBBLK_WARPMV
                          rf, refmv_count, ref_match_count, newmv_count,
                          ref_mv_stack, ref_mv_weight, gm_mv_candidates,
-                         gm_params,
 #if CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
                          xd->mi[0], ref_frame_idx0, ref_frame_idx1,
 #endif  // CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
@@ -1131,7 +1122,6 @@
     const int mi_col, const MV_REFERENCE_FRAME rf[2], int row_offset,
     int col_offset, CANDIDATE_MV *ref_mv_stack, uint16_t *ref_mv_weight,
     uint8_t *ref_match_count, uint8_t *newmv_count, int_mv *gm_mv_candidates,
-    const WarpedMotionParams *gm_params[INTER_REFS_PER_FRAME],
 #if CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
     MV_REFERENCE_FRAME *ref_frame_idx0, MV_REFERENCE_FRAME *ref_frame_idx1,
 #endif  // CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
@@ -1193,7 +1183,6 @@
 #endif  // CONFIG_C071_SUBBLK_WARPMV
                          rf, refmv_count, ref_match_count, newmv_count,
                          ref_mv_stack, ref_mv_weight, gm_mv_candidates,
-                         gm_params,
 #if CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
                          xd->mi[0], ref_frame_idx0, ref_frame_idx1,
 #endif  // CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
@@ -1789,10 +1778,6 @@
   const int has_bl = has_bottom_left(cm, xd, mi_row, mi_col, bs);
 #endif  // CONFIG_C043_MVP_IMPROVEMENTS
 #endif  // CONFIG_EXT_RECUR_PARTITIONS
-  const WarpedMotionParams *gm_params[INTER_REFS_PER_FRAME];
-  for (int r = 0; r < INTER_REFS_PER_FRAME; ++r) {
-    gm_params[r] = effective_global_motion(xd, r);
-  }
 
   MV_REFERENCE_FRAME rf[2];
   const TileInfo *const tile = &xd->tile;
@@ -1862,7 +1847,7 @@
   if (xd->left_available) {
     scan_blk_mbmi(cm, xd, mi_row, mi_col, rf, (xd->height - 1), -1,
                   ref_mv_stack, ref_mv_weight, &col_match_count, &newmv_count,
-                  gm_mv_candidates, gm_params,
+                  gm_mv_candidates,
 #if CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
                   ref_frame_idx0, ref_frame_idx1,
 #endif  // CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
@@ -1881,7 +1866,7 @@
   if (xd->up_available) {
     scan_blk_mbmi(cm, xd, mi_row, mi_col, rf, -1, (xd->width - 1), ref_mv_stack,
                   ref_mv_weight, &row_match_count, &newmv_count,
-                  gm_mv_candidates, gm_params,
+                  gm_mv_candidates,
 #if CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
                   ref_frame_idx0, ref_frame_idx1,
 #endif  // CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
@@ -1898,7 +1883,7 @@
   if (xd->left_available) {
     scan_blk_mbmi(cm, xd, mi_row, mi_col, rf, 0, -1, ref_mv_stack,
                   ref_mv_weight, &col_match_count, &newmv_count,
-                  gm_mv_candidates, gm_params,
+                  gm_mv_candidates,
 #if CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
                   ref_frame_idx0, ref_frame_idx1,
 #endif  // CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
@@ -1917,7 +1902,7 @@
   if (xd->up_available) {
     scan_blk_mbmi(cm, xd, mi_row, mi_col, rf, -1, 0, ref_mv_stack,
                   ref_mv_weight, &row_match_count, &newmv_count,
-                  gm_mv_candidates, gm_params,
+                  gm_mv_candidates,
 #if CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
                   ref_frame_idx0, ref_frame_idx1,
 #endif  // CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
@@ -1934,7 +1919,7 @@
   if (has_bl) {
     scan_blk_mbmi(cm, xd, mi_row, mi_col, rf, xd->height, -1, ref_mv_stack,
                   ref_mv_weight, &col_match_count, &newmv_count,
-                  gm_mv_candidates, gm_params,
+                  gm_mv_candidates,
 #if CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
                   ref_frame_idx0, ref_frame_idx1,
 #endif  // CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
@@ -1951,7 +1936,7 @@
   if (has_tr) {
     scan_blk_mbmi(cm, xd, mi_row, mi_col, rf, -1, xd->width, ref_mv_stack,
                   ref_mv_weight, &row_match_count, &newmv_count,
-                  gm_mv_candidates, gm_params,
+                  gm_mv_candidates,
 #if CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
                   ref_frame_idx0, ref_frame_idx1,
 #endif  // CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
@@ -1970,7 +1955,7 @@
     uint8_t dummy_new_mv_count = 0;
     scan_blk_mbmi(cm, xd, mi_row, mi_col, rf, -1, -1, ref_mv_stack,
                   ref_mv_weight, &dummy_ref_match_count, &dummy_new_mv_count,
-                  gm_mv_candidates, gm_params,
+                  gm_mv_candidates,
 #if CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
                   ref_frame_idx0, ref_frame_idx1,
 #endif  // CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
@@ -1987,7 +1972,7 @@
   if (xd->left_available) {
     scan_blk_mbmi(cm, xd, mi_row, mi_col, rf, (xd->height >> 1), -1,
                   ref_mv_stack, ref_mv_weight, &col_match_count, &newmv_count,
-                  gm_mv_candidates, gm_params,
+                  gm_mv_candidates,
 #if CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
                   ref_frame_idx0, ref_frame_idx1,
 #endif  // CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
@@ -2006,7 +1991,7 @@
   if (xd->up_available) {
     scan_blk_mbmi(cm, xd, mi_row, mi_col, rf, -1, (xd->width >> 1),
                   ref_mv_stack, ref_mv_weight, &row_match_count, &newmv_count,
-                  gm_mv_candidates, gm_params,
+                  gm_mv_candidates,
 #if CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
                   ref_frame_idx0, ref_frame_idx1,
 #endif  // CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
@@ -2028,7 +2013,7 @@
                   mi_row,
 #endif  // CONFIG_TIP || CONFIG_EXT_RECUR_PARTITIONS
                   mi_col, rf, -1, ref_mv_stack, ref_mv_weight, refmv_count,
-                  &row_match_count, &newmv_count, gm_mv_candidates, gm_params,
+                  &row_match_count, &newmv_count, gm_mv_candidates,
                   max_row_offset,
 #if CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
                   ref_frame_idx0, ref_frame_idx1,
@@ -2050,7 +2035,7 @@
                   mi_col,
 #endif  // CONFIG_TIP || CONFIG_EXT_RECUR_PARTITIONS
                   rf, -1, ref_mv_stack, ref_mv_weight, refmv_count,
-                  &col_match_count, &newmv_count, gm_mv_candidates, gm_params,
+                  &col_match_count, &newmv_count, gm_mv_candidates,
                   max_col_offset,
 #if CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
                   ref_frame_idx0, ref_frame_idx1,
@@ -2069,7 +2054,7 @@
   if (has_tr)
     scan_blk_mbmi(cm, xd, mi_row, mi_col, rf, -1, xd->width, ref_mv_stack,
                   ref_mv_weight, &row_match_count, &newmv_count,
-                  gm_mv_candidates, gm_params,
+                  gm_mv_candidates,
 #if CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
                   ref_frame_idx0, ref_frame_idx1,
 #endif  // CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
@@ -2206,7 +2191,6 @@
   // Scan the second outer area.
   scan_blk_mbmi(cm, xd, mi_row, mi_col, rf, -1, -1, ref_mv_stack, ref_mv_weight,
                 &row_match_count, &dummy_newmv_count, gm_mv_candidates,
-                gm_params,
 #if CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
                 ref_frame_idx0, ref_frame_idx1,
 #endif  // CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
@@ -2232,7 +2216,7 @@
 #endif  // CONFIG_TIP || CONFIG_EXT_RECUR_PARTITIONS
                     rf, col_offset, ref_mv_stack, ref_mv_weight, refmv_count,
                     &col_match_count, &dummy_newmv_count, gm_mv_candidates,
-                    gm_params, max_col_offset,
+                    max_col_offset,
 #if CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
                     ref_frame_idx0, ref_frame_idx1,
 #endif  // CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
@@ -2258,7 +2242,7 @@
 #endif  // CONFIG_TIP || CONFIG_EXT_RECUR_PARTITIONS
                     mi_col, rf, row_offset, ref_mv_stack, ref_mv_weight,
                     refmv_count, &row_match_count, &dummy_newmv_count,
-                    gm_mv_candidates, gm_params, max_row_offset,
+                    gm_mv_candidates, max_row_offset,
 #if CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
                     ref_frame_idx0, ref_frame_idx1,
 #endif  // CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
@@ -2277,7 +2261,7 @@
 #endif  // CONFIG_TIP || CONFIG_EXT_RECUR_PARTITIONS
                     rf, col_offset, ref_mv_stack, ref_mv_weight, refmv_count,
                     &col_match_count, &dummy_newmv_count, gm_mv_candidates,
-                    gm_params, max_col_offset,
+                    max_col_offset,
 #if CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
                     ref_frame_idx0, ref_frame_idx1,
 #endif  // CONFIG_SKIP_MODE_DRL_WITH_REF_IDX
diff --git a/av1/common/mvref_common.h b/av1/common/mvref_common.h
index e86a73a..ee36d33 100644
--- a/av1/common/mvref_common.h
+++ b/av1/common/mvref_common.h
@@ -981,7 +981,7 @@
       }
     }
   }
-  *params = effective_global_motion(xd, mbmi->ref_frame[0]);
+  *params = *effective_global_motion(xd, mbmi->ref_frame[0]);
 #else
   assert(mbmi->warp_ref_idx < mbmi->max_num_warp_candidates);
   *params = warp_param_stack[mbmi->warp_ref_idx].wm_params;
@@ -1007,13 +1007,11 @@
                                                const MACROBLOCKD *xd,
                                                const MB_MODE_INFO *neighbor_mi,
                                                WarpedMotionParams *wm_params) {
-  const WarpedMotionParams *gm_params =
-      &cm->global_motion[neighbor_mi->ref_frame[0]];
-
+  (void)cm;
   if (is_warp_mode(neighbor_mi->motion_mode)) {
     *wm_params = neighbor_mi->wm_params[0];
-  } else if (is_global_mv_block(neighbor_mi, gm_params->wmtype)) {
-    *wm_params = *gm_params;
+  } else if (neighbor_mi->global_mv_block[0]) {
+    *wm_params = neighbor_mi->wm_params[0];
   } else {
     // Neighbor block is translation-only, so doesn't have
     // a warp model. So we need to synthesize one.
@@ -1057,11 +1055,9 @@
         xd->mi[mi_pos.row * xd->mi_stride + mi_pos.col];
     if (!is_inter_ref_frame(left_mi->ref_frame[0])) return 1;
     if (left_mi->ref_frame[0] != mbmi->ref_frame[0]) return 1;
-    const WarpedMotionParams *gm_params =
-        &xd->global_motion[left_mi->ref_frame[0]];
     if (is_warp_mode(left_mi->motion_mode)) {
       return 2;
-    } else if (is_global_mv_block(left_mi, gm_params->wmtype)) {
+    } else if (left_mi->global_mv_block[0]) {
       return 3;
     } else {
       // Neighbor block is translation-only
@@ -1084,11 +1080,9 @@
         xd->mi[mi_pos.row * xd->mi_stride + mi_pos.col];
     if (!is_inter_ref_frame(above_mi->ref_frame[0])) return 1;
     if (above_mi->ref_frame[0] != mbmi->ref_frame[0]) return 1;
-    const WarpedMotionParams *gm_params =
-        &xd->global_motion[above_mi->ref_frame[0]];
     if (is_warp_mode(above_mi->motion_mode)) {
       return 2;
-    } else if (is_global_mv_block(above_mi, gm_params->wmtype)) {
+    } else if (above_mi->global_mv_block[0]) {
       return 3;
     } else {
       // Neighbor block is translation-only
diff --git a/av1/common/warped_motion.h b/av1/common/warped_motion.h
index 7ac8e0d..0d44c49 100644
--- a/av1/common/warped_motion.h
+++ b/av1/common/warped_motion.h
@@ -366,6 +366,38 @@
   wm_params->wmtype = HOMOGRAPHY;
 }
 
+static INLINE void copy_global_motion_to_mbmi(const MACROBLOCKD *xd,
+                                              MB_MODE_INFO *mbmi) {
+  const BLOCK_SIZE bsize = mbmi->sb_type[PLANE_TYPE_Y];
+  const int block_size_allowed =
+      AOMMIN(block_size_wide[bsize], block_size_high[bsize]) >= 8;
+  mbmi->global_mv_block[0] = 0;
+  mbmi->global_mv_block[1] = 0;
+  if (!block_size_allowed) return;
+  const PREDICTION_MODE this_mode = mbmi->mode;
+  if (this_mode == GLOBALMV) {
+    const WarpedMotionParams *gm0 =
+        effective_global_motion(xd, mbmi->ref_frame[0]);
+    if (gm0->wmtype > TRANSLATION) {
+      mbmi->wm_params[0] = *gm0;
+      mbmi->global_mv_block[0] = 1;
+    }
+  } else if (this_mode == GLOBAL_GLOBALMV) {
+    const WarpedMotionParams *gm0 =
+        effective_global_motion(xd, mbmi->ref_frame[0]);
+    const WarpedMotionParams *gm1 =
+        effective_global_motion(xd, mbmi->ref_frame[1]);
+    if (gm0->wmtype > TRANSLATION) {
+      mbmi->wm_params[0] = *gm0;
+      mbmi->global_mv_block[0] = 1;
+    }
+    if (gm1->wmtype > TRANSLATION) {
+      mbmi->wm_params[1] = *gm1;
+      mbmi->global_mv_block[1] = 1;
+    }
+  }
+}
+
 #if CONFIG_IMPROVED_GLOBAL_MOTION
 static INLINE void av1_scale_warp_model(const WarpedMotionParams *in_params,
                                         int in_distance,
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index e47ee97..0df31b6 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -3191,6 +3191,10 @@
   AV1_COMMON *const cm = &pbi->common;
   MACROBLOCKD *const xd = &dcb->xd;
   MB_MODE_INFO *const mi = xd->mi[0];
+  mi->wm_params[0] = default_warp_params;
+  mi->wm_params[1] = default_warp_params;
+  mi->global_mv_block[0] = 0;
+  mi->global_mv_block[1] = 0;
   mi->use_intrabc[xd->tree_type == CHROMA_PART] = 0;
 
   if (xd->tree_type == SHARED_PART)
@@ -3210,6 +3214,7 @@
                            y_inside_boundary);
   } else {
     read_inter_frame_mode_info(pbi, dcb, r);
+    copy_global_motion_to_mbmi(xd, mi);
 #if CONFIG_BVP_IMPROVEMENT && CONFIG_REF_MV_BANK
     if (cm->seq_params.enable_refmvbank) {
       MB_MODE_INFO *const mbmi = xd->mi[0];
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index da3e767..7dd0b37 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -5599,6 +5599,10 @@
   ctx->rd_stats.skip_txfm = 0;
   mbmi->ref_frame[0] = INTRA_FRAME;
   mbmi->ref_frame[1] = NONE_FRAME;
+  mbmi->wm_params[0] = default_warp_params;
+  mbmi->wm_params[1] = default_warp_params;
+  mbmi->global_mv_block[0] = 0;
+  mbmi->global_mv_block[1] = 0;
   mbmi->use_intrabc[xd->tree_type == CHROMA_PART] = 0;
   if (xd->tree_type != CHROMA_PART) {
     mbmi->mv[0].as_int = 0;
@@ -7154,6 +7158,11 @@
   mbmi->mv[0].as_int = mbmi->mv[1].as_int = 0;
   mbmi->motion_mode = SIMPLE_TRANSLATION;
   mbmi->interintra_mode = (INTERINTRA_MODE)(II_DC_PRED - 1);
+  mbmi->wm_params[0] = default_warp_params;
+  mbmi->wm_params[1] = default_warp_params;
+  mbmi->global_mv_block[0] = 0;
+  mbmi->global_mv_block[1] = 0;
+  copy_global_motion_to_mbmi(xd, mbmi);
   set_default_interp_filters(mbmi,
 #if CONFIG_OPTFLOW_REFINEMENT
                              cm,
@@ -8907,6 +8916,7 @@
       assert(mbmi->interp_fltr == av1_unswitchable_filter(interp_filter));
     }
   }
+  copy_global_motion_to_mbmi(xd, mbmi);
 
   for (i = 0; i < REFERENCE_MODES; ++i) {
     if (search_state.intra_search_state.best_pred_rd[i] == INT64_MAX) {
@@ -9015,6 +9025,11 @@
   const MV_REFERENCE_FRAME last_frame = get_closest_pastcur_ref_index(cm);
   mbmi->ref_frame[0] = last_frame;
   mbmi->ref_frame[1] = NONE_FRAME;
+  mbmi->wm_params[0] = default_warp_params;
+  mbmi->wm_params[1] = default_warp_params;
+  mbmi->global_mv_block[0] = 0;
+  mbmi->global_mv_block[1] = 0;
+  copy_global_motion_to_mbmi(xd, mbmi);
 #if CONFIG_TIP
   if (is_tip_ref_frame(mbmi->ref_frame[0])) {
     mbmi->mv[0].as_int = 0;
@@ -9129,6 +9144,7 @@
   }
 
   av1_zero(best_pred_diff);
+  copy_global_motion_to_mbmi(xd, mbmi);
 
   store_coding_context(x, ctx, best_pred_diff, 0
 #if CONFIG_C071_SUBBLK_WARPMV
