super_block_yrd: merge rate/dist/skip/sse RD_STATS

Change-Id: I88df7c226f9d14e5c3546e0582bea2c38d0efbd6
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index d68e6ef..bd60817 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -1781,28 +1781,21 @@
 #endif
 }
 
-static void super_block_yrd(const AV1_COMP *const cpi, MACROBLOCK *x, int *rate,
-                            int64_t *distortion, int *skip, int64_t *psse,
-                            BLOCK_SIZE bs, int64_t ref_best_rd) {
+static void super_block_yrd(const AV1_COMP *const cpi, MACROBLOCK *x,
+                            RD_STATS *rd_stats, BLOCK_SIZE bs,
+                            int64_t ref_best_rd) {
   MACROBLOCKD *xd = &x->e_mbd;
-  int64_t sse;
-  int64_t *ret_sse = psse ? psse : &sse;
-  RD_STATS rd_stats;
-  av1_init_rd_stats(&rd_stats);
+  av1_init_rd_stats(rd_stats);
 
   assert(bs == xd->mi[0]->mbmi.sb_type);
 
   if (xd->lossless[xd->mi[0]->mbmi.segment_id]) {
-    choose_smallest_tx_size(cpi, x, &rd_stats, ref_best_rd, bs);
+    choose_smallest_tx_size(cpi, x, rd_stats, ref_best_rd, bs);
   } else if (cpi->sf.tx_size_search_method == USE_LARGESTALL) {
-    choose_largest_tx_size(cpi, x, &rd_stats, ref_best_rd, bs);
+    choose_largest_tx_size(cpi, x, rd_stats, ref_best_rd, bs);
   } else {
-    choose_tx_size_type_from_rd(cpi, x, &rd_stats, ref_best_rd, bs);
+    choose_tx_size_type_from_rd(cpi, x, rd_stats, ref_best_rd, bs);
   }
-  *rate = rd_stats.rate;
-  *distortion = rd_stats.dist;
-  *ret_sse = rd_stats.sse;
-  *skip = rd_stats.skip;
 }
 
 static int conditional_skipintra(PREDICTION_MODE mode,
@@ -1833,8 +1826,9 @@
   MODE_INFO *const mic = xd->mi[0];
   const int rows = 4 * num_4x4_blocks_high_lookup[bsize];
   const int cols = 4 * num_4x4_blocks_wide_lookup[bsize];
-  int this_rate, this_rate_tokenonly, s, colors, n;
-  int64_t this_distortion, this_rd;
+  int this_rate, colors, n;
+  RD_STATS tokenonly_rd_stats;
+  int64_t this_rd;
   const int src_stride = x->plane[0].src.stride;
   const uint8_t *const src = x->plane[0].src.buf;
 
@@ -1925,12 +1919,11 @@
 
       av1_calc_indices(data, centroids, color_map, rows * cols, k, 1);
 
-      super_block_yrd(cpi, x, &this_rate_tokenonly, &this_distortion, &s, NULL,
-                      bsize, *best_rd);
-      if (this_rate_tokenonly == INT_MAX) continue;
+      super_block_yrd(cpi, x, &tokenonly_rd_stats, bsize, *best_rd);
+      if (tokenonly_rd_stats.rate == INT_MAX) continue;
 
       this_rate =
-          this_rate_tokenonly + dc_mode_cost +
+          tokenonly_rd_stats.rate + dc_mode_cost +
           cpi->common.bit_depth * k * av1_cost_bit(128, 0) +
           cpi->palette_y_size_cost[bsize - BLOCK_8X8][k - 2] +
           write_uniform_cost(k, color_map[0]) +
@@ -1946,7 +1939,7 @@
           this_rate += cpi->palette_y_color_cost[k - 2][color_ctx][color_idx];
         }
       }
-      this_rd = RDCOST(x->rdmult, x->rddiv, this_rate, this_distortion);
+      this_rd = RDCOST(x->rdmult, x->rddiv, this_rate, tokenonly_rd_stats.dist);
 
       if (this_rd < *best_rd) {
         *best_rd = this_rd;
@@ -1956,7 +1949,7 @@
         *mode_selected = DC_PRED;
         *best_tx = mbmi->tx_size;
         *best_tx_type = mbmi->tx_type;
-        rate_overhead = this_rate - this_rate_tokenonly;
+        rate_overhead = this_rate - tokenonly_rd_stats.rate;
       }
     }
   }
@@ -2435,9 +2428,10 @@
   MACROBLOCKD *const xd = &x->e_mbd;
   MODE_INFO *const mic = xd->mi[0];
   MB_MODE_INFO *mbmi = &mic->mbmi;
-  int this_rate, this_rate_tokenonly, s;
+  int this_rate;
+  RD_STATS tokenonly_rd_stats;
   int filter_intra_selected_flag = 0;
-  int64_t this_distortion, this_rd;
+  int64_t this_rd;
   FILTER_INTRA_MODE mode;
   TX_SIZE best_tx_size = TX_4X4;
   FILTER_INTRA_MODE_INFO filter_intra_mode_info;
@@ -2453,14 +2447,13 @@
   for (mode = 0; mode < FILTER_INTRA_MODES; ++mode) {
     if (skip_mask & (1 << mode)) continue;
     mbmi->filter_intra_mode_info.filter_intra_mode[0] = mode;
-    super_block_yrd(cpi, x, &this_rate_tokenonly, &this_distortion, &s, NULL,
-                    bsize, *best_rd);
-    if (this_rate_tokenonly == INT_MAX) continue;
+    super_block_yrd(cpi, x, &tokenonly_rd_stats, bsize, *best_rd);
+    if (tokenonly_rd_stats.rate == INT_MAX) continue;
 
-    this_rate = this_rate_tokenonly +
+    this_rate = tokenonly_rd_stats.rate +
                 av1_cost_bit(cpi->common.fc->filter_intra_probs[0], 1) +
                 write_uniform_cost(FILTER_INTRA_MODES, mode) + mode_cost;
-    this_rd = RDCOST(x->rdmult, x->rddiv, this_rate, this_distortion);
+    this_rd = RDCOST(x->rdmult, x->rddiv, this_rate, tokenonly_rd_stats.dist);
 
     if (this_rd < *best_rd) {
       *best_rd = this_rd;
@@ -2468,9 +2461,9 @@
       filter_intra_mode_info = mbmi->filter_intra_mode_info;
       best_tx_type = mic->mbmi.tx_type;
       *rate = this_rate;
-      *rate_tokenonly = this_rate_tokenonly;
-      *distortion = this_distortion;
-      *skippable = s;
+      *rate_tokenonly = tokenonly_rd_stats.rate;
+      *distortion = tokenonly_rd_stats.dist;
+      *skippable = tokenonly_rd_stats.skip;
       filter_intra_selected_flag = 1;
     }
   }
@@ -2496,15 +2489,15 @@
     int64_t *distortion, int *skippable, int *best_angle_delta,
     TX_SIZE *best_tx_size, TX_TYPE *best_tx_type, INTRA_FILTER *best_filter,
     BLOCK_SIZE bsize, int rate_overhead, int64_t *best_rd) {
-  int this_rate, this_rate_tokenonly, s;
-  int64_t this_distortion, this_rd;
+  int this_rate;
+  RD_STATS tokenonly_rd_stats;
+  int64_t this_rd;
   MB_MODE_INFO *mbmi = &x->e_mbd.mi[0]->mbmi;
-  super_block_yrd(cpi, x, &this_rate_tokenonly, &this_distortion, &s, NULL,
-                  bsize, *best_rd);
-  if (this_rate_tokenonly == INT_MAX) return;
+  super_block_yrd(cpi, x, &tokenonly_rd_stats, bsize, *best_rd);
+  if (tokenonly_rd_stats.rate == INT_MAX) return;
 
-  this_rate = this_rate_tokenonly + rate_overhead;
-  this_rd = RDCOST(x->rdmult, x->rddiv, this_rate, this_distortion);
+  this_rate = tokenonly_rd_stats.rate + rate_overhead;
+  this_rd = RDCOST(x->rdmult, x->rddiv, this_rate, tokenonly_rd_stats.dist);
 
   if (this_rd < *best_rd) {
     *best_rd = this_rd;
@@ -2513,9 +2506,9 @@
     *best_filter = mbmi->intra_filter;
     *best_tx_type = mbmi->tx_type;
     *rate = this_rate;
-    *rate_tokenonly = this_rate_tokenonly;
-    *distortion = this_distortion;
-    *skippable = s;
+    *rate_tokenonly = tokenonly_rd_stats.rate;
+    *distortion = tokenonly_rd_stats.dist;
+    *skippable = tokenonly_rd_stats.skip;
   }
 }
 
@@ -2527,12 +2520,13 @@
   MACROBLOCKD *const xd = &x->e_mbd;
   MODE_INFO *const mic = xd->mi[0];
   MB_MODE_INFO *mbmi = &mic->mbmi;
-  int this_rate, this_rate_tokenonly, s;
+  int this_rate;
+  RD_STATS tokenonly_rd_stats;
   int angle_delta, best_angle_delta = 0, p_angle;
   const int intra_filter_ctx = av1_get_pred_context_intra_interp(xd);
   INTRA_FILTER filter, best_filter = INTRA_FILTER_LINEAR;
   const double rd_adjust = 1.2;
-  int64_t this_distortion, this_rd;
+  int64_t this_rd;
   TX_SIZE best_tx_size = mic->mbmi.tx_size;
   TX_TYPE best_tx_type = mbmi->tx_type;
 
@@ -2558,17 +2552,17 @@
             (i == 0 && filter == INTRA_FILTER_LINEAR && best_rd < INT64_MAX)
                 ? (int64_t)(best_rd * rd_adjust)
                 : best_rd;
-        super_block_yrd(cpi, x, &this_rate_tokenonly, &this_distortion, &s,
-                        NULL, bsize, tmp_best_rd);
-        if (this_rate_tokenonly == INT_MAX) {
+        super_block_yrd(cpi, x, &tokenonly_rd_stats, bsize, tmp_best_rd);
+        if (tokenonly_rd_stats.rate == INT_MAX) {
           if (i == 0 && filter == INTRA_FILTER_LINEAR)
             return best_rd;
           else
             continue;
         }
-        this_rate = this_rate_tokenonly + rate_overhead +
+        this_rate = tokenonly_rd_stats.rate + rate_overhead +
                     cpi->intra_filter_cost[intra_filter_ctx][filter];
-        this_rd = RDCOST(x->rdmult, x->rddiv, this_rate, this_distortion);
+        this_rd =
+            RDCOST(x->rdmult, x->rddiv, this_rate, tokenonly_rd_stats.dist);
         if (i == 0 && filter == INTRA_FILTER_LINEAR && best_rd < INT64_MAX &&
             this_rd > best_rd * rd_adjust)
           return best_rd;
@@ -2580,9 +2574,9 @@
           best_filter = mbmi->intra_filter;
           best_tx_type = mbmi->tx_type;
           *rate = this_rate;
-          *rate_tokenonly = this_rate_tokenonly;
-          *distortion = this_distortion;
-          *skippable = s;
+          *rate_tokenonly = tokenonly_rd_stats.rate;
+          *distortion = tokenonly_rd_stats.dist;
+          *skippable = tokenonly_rd_stats.skip;
         }
       }
     }
@@ -2866,6 +2860,7 @@
 
   /* Y Search for intra prediction mode */
   for (mode_idx = DC_PRED; mode_idx <= FINAL_MODE_SEARCH; ++mode_idx) {
+    RD_STATS this_rd_stats;
     if (mode_idx == FINAL_MODE_SEARCH) {
       if (x->use_default_intra_tx_type == 0) break;
       mic->mbmi.mode = mode_selected;
@@ -2890,12 +2885,16 @@
                                         &s, bsize, rate_overhead, best_rd);
     } else {
       mic->mbmi.angle_delta[0] = 0;
-      super_block_yrd(cpi, x, &this_rate_tokenonly, &this_distortion, &s, NULL,
-                      bsize, best_rd);
+      super_block_yrd(cpi, x, &this_rd_stats, bsize, best_rd);
+      this_rate_tokenonly = this_rd_stats.rate;
+      this_distortion = this_rd_stats.dist;
+      s = this_rd_stats.skip;
     }
 #else
-    super_block_yrd(cpi, x, &this_rate_tokenonly, &this_distortion, &s, NULL,
-                    bsize, best_rd);
+    super_block_yrd(cpi, x, &this_rd_stats, bsize, best_rd);
+    this_rate_tokenonly = this_rd_stats.rate;
+    this_distortion = this_rd_stats.dist;
+    s = this_rd_stats.skip;
 #endif  // CONFIG_EXT_INTRA
 
     if (this_rate_tokenonly == INT_MAX) continue;
@@ -7788,32 +7787,41 @@
       RD_STATS rd_stats_uv;
 #endif
 
-// Y cost and distortion
+      {
+        // Y cost and distortion
+        RD_STATS rd_stats_y;
+        av1_subtract_plane(x, bsize, 0);
 #if !CONFIG_PVQ
-      av1_subtract_plane(x, bsize, 0);
+        av1_subtract_plane(x, bsize, 0);
 #endif
 #if CONFIG_VAR_TX
-      if (cm->tx_mode == TX_MODE_SELECT && !xd->lossless[mbmi->segment_id]) {
-        RD_STATS rd_stats_y;
-        select_tx_type_yrd(cpi, x, &rd_stats_y, bsize, ref_best_rd);
+        if (cm->tx_mode == TX_MODE_SELECT && !xd->lossless[mbmi->segment_id]) {
+          select_tx_type_yrd(cpi, x, &rd_stats_y, bsize, ref_best_rd);
+          *rate_y = rd_stats_y.rate;
+          distortion_y = rd_stats_y.dist;
+          skippable_y = rd_stats_y.skip;
+          *psse = rd_stats_y.sse;
+        } else {
+          int idx, idy;
+          super_block_yrd(cpi, x, &rd_stats_y, bsize, ref_best_rd);
+          *rate_y = rd_stats_y.rate;
+          distortion_y = rd_stats_y.dist;
+          skippable_y = rd_stats_y.skip;
+          *psse = rd_stats_y.sse;
+          for (idy = 0; idy < xd->n8_h; ++idy)
+            for (idx = 0; idx < xd->n8_w; ++idx)
+              mbmi->inter_tx_size[idy][idx] = mbmi->tx_size;
+          memset(x->blk_skip[0], skippable_y,
+                 sizeof(uint8_t) * xd->n8_h * xd->n8_w * 4);
+        }
+#else
+        super_block_yrd(cpi, x, &rd_stats_y, bsize, ref_best_rd);
         *rate_y = rd_stats_y.rate;
         distortion_y = rd_stats_y.dist;
         skippable_y = rd_stats_y.skip;
         *psse = rd_stats_y.sse;
-      } else {
-        int idx, idy;
-        super_block_yrd(cpi, x, rate_y, &distortion_y, &skippable_y, psse,
-                        bsize, ref_best_rd);
-        for (idy = 0; idy < xd->n8_h; ++idy)
-          for (idx = 0; idx < xd->n8_w; ++idx)
-            mbmi->inter_tx_size[idy][idx] = mbmi->tx_size;
-        memset(x->blk_skip[0], skippable_y,
-               sizeof(uint8_t) * xd->n8_h * xd->n8_w * 4);
-      }
-#else
-    super_block_yrd(cpi, x, rate_y, &distortion_y, &skippable_y, psse, bsize,
-                    ref_best_rd);
 #endif  // CONFIG_VAR_TX
+      }
 
       if (*rate_y == INT_MAX) {
         *rate2 = INT_MAX;
@@ -8938,6 +8946,7 @@
 #endif  // CONFIG_EXT_INTER
 
     if (ref_frame == INTRA_FRAME) {
+      RD_STATS rd_stats_y;
       TX_SIZE uv_tx;
       struct macroblockd_plane *const pd = &xd->plane[1];
 #if CONFIG_EXT_INTRA
@@ -8965,12 +8974,16 @@
                                     &skippable, bsize, rate_overhead, best_rd);
       } else {
         mbmi->angle_delta[0] = 0;
-        super_block_yrd(cpi, x, &rate_y, &distortion_y, &skippable, NULL, bsize,
-                        best_rd);
+        super_block_yrd(cpi, x, &rd_stats_y, bsize, best_rd);
+        rate_y = rd_stats_y.rate;
+        distortion_y = rd_stats_y.dist;
+        skippable = rd_stats_y.skip;
       }
 #else
-      super_block_yrd(cpi, x, &rate_y, &distortion_y, &skippable, NULL, bsize,
-                      best_rd);
+      super_block_yrd(cpi, x, &rd_stats_y, bsize, best_rd);
+      rate_y = rd_stats_y.rate;
+      distortion_y = rd_stats_y.dist;
+      skippable = rd_stats_y.skip;
 #endif  // CONFIG_EXT_INTRA
 
       if (rate_y == INT_MAX) continue;
@@ -9499,10 +9512,8 @@
         is_inter_mode(best_mbmode.mode)) ||
        (sf->tx_type_search.fast_intra_tx_type_search == 1 &&
         !is_inter_mode(best_mbmode.mode)))) {
-    int rate_y = 0, rate_uv = 0;
-    int64_t dist_y = 0, dist_uv = 0;
-    int skip_y = 0, skip_uv = 0, skip_blk = 0;
-    int64_t sse_y = 0, sse_uv = 0;
+    int skip_blk = 0;
+    RD_STATS rd_stats_y, rd_stats_uv;
 
     x->use_default_inter_tx_type = 0;
     x->use_default_intra_tx_type = 0;
@@ -9519,9 +9530,6 @@
     }
 
     if (is_inter_mode(mbmi->mode)) {
-#if CONFIG_VAR_TX
-      RD_STATS rd_stats_uv;
-#endif
       av1_build_inter_predictors_sb(xd, mi_row, mi_col, bsize);
 #if CONFIG_MOTION_VAR
       if (mbmi->motion_mode == OBMC_CAUSAL)
@@ -9531,55 +9539,45 @@
       av1_subtract_plane(x, bsize, 0);
 #if CONFIG_VAR_TX
       if (cm->tx_mode == TX_MODE_SELECT || xd->lossless[mbmi->segment_id]) {
-        RD_STATS rd_stats_y;
         select_tx_type_yrd(cpi, x, &rd_stats_y, bsize, INT64_MAX);
-        rate_y = rd_stats_y.rate;
-        dist_y = rd_stats_y.dist;
-        sse_y = rd_stats_y.sse;
-        skip_y = rd_stats_y.skip;
       } else {
         int idx, idy;
-        super_block_yrd(cpi, x, &rate_y, &dist_y, &skip_y, &sse_y, bsize,
-                        INT64_MAX);
+        super_block_yrd(cpi, x, &rd_stats_y, bsize, INT64_MAX);
         for (idy = 0; idy < xd->n8_h; ++idy)
           for (idx = 0; idx < xd->n8_w; ++idx)
             mbmi->inter_tx_size[idy][idx] = mbmi->tx_size;
-        memset(x->blk_skip[0], skip_y,
+        memset(x->blk_skip[0], rd_stats_y.skip,
                sizeof(uint8_t) * xd->n8_h * xd->n8_w * 4);
       }
 
       inter_block_uvrd(cpi, x, &rd_stats_uv, bsize, INT64_MAX);
-      rate_uv = rd_stats_uv.rate;
-      dist_uv = rd_stats_uv.dist;
-      skip_uv = rd_stats_uv.skip;
-      sse_uv = rd_stats_uv.sse;
 #else
-      super_block_yrd(cpi, x, &rate_y, &dist_y, &skip_y, &sse_y, bsize,
-                      INT64_MAX);
-      super_block_uvrd(cpi, x, &rate_uv, &dist_uv, &skip_uv, &sse_uv, bsize,
-                       INT64_MAX);
+      super_block_yrd(cpi, x, &rd_stats_y, bsize, INT64_MAX);
+      super_block_uvrd(cpi, x, &rd_stats_uv.rate, &rd_stats_uv.dist,
+                       &rd_stats_uv.skip, &rd_stats_uv.sse, bsize, INT64_MAX);
 #endif  // CONFIG_VAR_TX
     } else {
-      super_block_yrd(cpi, x, &rate_y, &dist_y, &skip_y, &sse_y, bsize,
-                      INT64_MAX);
-      super_block_uvrd(cpi, x, &rate_uv, &dist_uv, &skip_uv, &sse_uv, bsize,
-                       INT64_MAX);
+      super_block_yrd(cpi, x, &rd_stats_y, bsize, INT64_MAX);
+      super_block_uvrd(cpi, x, &rd_stats_uv.rate, &rd_stats_uv.dist,
+                       &rd_stats_uv.skip, &rd_stats_uv.sse, bsize, INT64_MAX);
     }
 
-    if (RDCOST(x->rdmult, x->rddiv, rate_y + rate_uv, (dist_y + dist_uv)) >
-        RDCOST(x->rdmult, x->rddiv, 0, (sse_y + sse_uv))) {
+    if (RDCOST(x->rdmult, x->rddiv, rd_stats_y.rate + rd_stats_uv.rate,
+               (rd_stats_y.dist + rd_stats_uv.dist)) >
+        RDCOST(x->rdmult, x->rddiv, 0, (rd_stats_y.sse + rd_stats_uv.sse))) {
       skip_blk = 1;
-      rate_y = av1_cost_bit(av1_get_skip_prob(cm, xd), 1);
-      rate_uv = 0;
-      dist_y = sse_y;
-      dist_uv = sse_uv;
+      rd_stats_y.rate = av1_cost_bit(av1_get_skip_prob(cm, xd), 1);
+      rd_stats_uv.rate = 0;
+      rd_stats_y.dist = rd_stats_y.sse;
+      rd_stats_uv.dist = rd_stats_uv.sse;
     } else {
       skip_blk = 0;
-      rate_y += av1_cost_bit(av1_get_skip_prob(cm, xd), 0);
+      rd_stats_y.rate += av1_cost_bit(av1_get_skip_prob(cm, xd), 0);
     }
 
     if (RDCOST(x->rdmult, x->rddiv, best_rate_y + best_rate_uv, rd_cost->dist) >
-        RDCOST(x->rdmult, x->rddiv, rate_y + rate_uv, (dist_y + dist_uv))) {
+        RDCOST(x->rdmult, x->rddiv, rd_stats_y.rate + rd_stats_uv.rate,
+               (rd_stats_y.dist + rd_stats_uv.dist))) {
 #if CONFIG_VAR_TX
       int idx, idy;
 #endif
@@ -9596,8 +9594,9 @@
 
       best_mbmode.min_tx_size = mbmi->min_tx_size;
 #endif
-      rd_cost->rate += (rate_y + rate_uv - best_rate_y - best_rate_uv);
-      rd_cost->dist = dist_y + dist_uv;
+      rd_cost->rate +=
+          (rd_stats_y.rate + rd_stats_uv.rate - best_rate_y - best_rate_uv);
+      rd_cost->dist = rd_stats_y.dist + rd_stats_uv.dist;
       rd_cost->rdcost =
           RDCOST(x->rdmult, x->rddiv, rd_cost->rate, rd_cost->dist);
       best_skip2 = skip_blk;
@@ -9608,12 +9607,13 @@
   // Only try palette mode when the best mode so far is an intra mode.
   if (cm->allow_screen_content_tools && !is_inter_mode(best_mbmode.mode)) {
     PREDICTION_MODE mode_selected;
-    int rate2 = 0, rate_y = 0;
+    int rate2 = 0;
 #if CONFIG_SUPERTX
     int best_rate_nocoef;
 #endif
-    int64_t distortion2 = 0, distortion_y = 0, dummy_rd = best_rd, this_rd;
+    int64_t distortion2 = 0, dummy_rd = best_rd, this_rd;
     int skippable = 0, rate_overhead_palette = 0;
+    RD_STATS rd_stats_y;
     TX_SIZE best_tx_size, uv_tx;
     TX_TYPE best_tx_type;
     PALETTE_MODE_INFO palette_mode_info;
@@ -9639,9 +9639,8 @@
       memcpy(color_map, best_palette_color_map,
              rows * cols * sizeof(best_palette_color_map[0]));
     }
-    super_block_yrd(cpi, x, &rate_y, &distortion_y, &skippable, NULL, bsize,
-                    best_rd);
-    if (rate_y == INT_MAX) goto PALETTE_EXIT;
+    super_block_yrd(cpi, x, &rd_stats_y, bsize, best_rd);
+    if (rd_stats_y.rate == INT_MAX) goto PALETTE_EXIT;
     uv_tx = uv_txsize_lookup[bsize][mbmi->tx_size][xd->plane[1].subsampling_x]
                             [xd->plane[1].subsampling_y];
     if (rate_uv_intra[uv_tx] == INT_MAX) {
@@ -9673,20 +9672,20 @@
           filter_intra_mode_info_uv[uv_tx].filter_intra_mode[1];
     }
 #endif  // CONFIG_FILTER_INTRA
-    skippable = skippable && skip_uvs[uv_tx];
-    distortion2 = distortion_y + dist_uvs[uv_tx];
-    rate2 = rate_y + rate_overhead_palette + rate_uv_intra[uv_tx];
+    skippable = rd_stats_y.skip && skip_uvs[uv_tx];
+    distortion2 = rd_stats_y.dist + dist_uvs[uv_tx];
+    rate2 = rd_stats_y.rate + rate_overhead_palette + rate_uv_intra[uv_tx];
     rate2 += ref_costs_single[INTRA_FRAME];
 
     if (skippable) {
-      rate2 -= (rate_y + rate_uv_tokenonly[uv_tx]);
+      rate2 -= (rd_stats_y.rate + rate_uv_tokenonly[uv_tx]);
 #if CONFIG_SUPERTX
       best_rate_nocoef = rate2;
 #endif
       rate2 += av1_cost_bit(av1_get_skip_prob(cm, xd), 1);
     } else {
 #if CONFIG_SUPERTX
-      best_rate_nocoef = rate2 - (rate_y + rate_uv_tokenonly[uv_tx]);
+      best_rate_nocoef = rate2 - (rd_stats_y.rate + rate_uv_tokenonly[uv_tx]);
 #endif
       rate2 += av1_cost_bit(av1_get_skip_prob(cm, xd), 0);
     }