From 27be13ad2d5ab471d4a6de2bab2c9a8b7616a466 Mon Sep 17 00:00:00 2001
From: Miguel Pozo <pragma37@gmail.com>
Date: Mon, 16 Dec 2024 20:54:56 +0100
Subject: [PATCH] Revert "Fix #131134: EEVEE: Playback performance degrades
 over time"

This reverts commit f6c4841edc58663bd89df755f2b45fa1486ee9e2.

This fix caused a regression (#131420) whose fix was not added to the
backport list.
Reverting this (with permission from @lichtwerk) since it's safer than
including the second fix at the last minute.

Pull Request: https://projects.blender.org/blender/blender/pulls/131988
---
 source/blender/draw/engines/eevee_next/eevee_velocity.cc | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/source/blender/draw/engines/eevee_next/eevee_velocity.cc b/source/blender/draw/engines/eevee_next/eevee_velocity.cc
index ea688fa96d8..87407fb8872 100644
--- a/source/blender/draw/engines/eevee_next/eevee_velocity.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_velocity.cc
@@ -164,8 +164,7 @@ bool VelocityModule::step_object_sync(Object *ob,
       object_steps[STEP_PREVIOUS]->get_or_resize(
           vel.obj.ofs[STEP_PREVIOUS]) = ob->object_to_world();
     }
-    /* STEP_NEXT is not used in viewport. */
-    if (vel.obj.ofs[STEP_NEXT] == -1 && !inst_.is_viewport()) {
+    if (vel.obj.ofs[STEP_NEXT] == -1) {
       vel.obj.ofs[STEP_NEXT] = object_steps_usage[STEP_NEXT]++;
       object_steps[STEP_NEXT]->get_or_resize(vel.obj.ofs[STEP_NEXT]) = ob->object_to_world();
     }
@@ -214,11 +213,11 @@ bool VelocityModule::step_object_sync(Object *ob,
   if (step_ == STEP_CURRENT && has_motion == true && has_deform == false) {
     const float4x4 &obmat_curr = (*object_steps[STEP_CURRENT])[vel.obj.ofs[STEP_CURRENT]];
     const float4x4 &obmat_prev = (*object_steps[STEP_PREVIOUS])[vel.obj.ofs[STEP_PREVIOUS]];
+    const float4x4 &obmat_next = (*object_steps[STEP_NEXT])[vel.obj.ofs[STEP_NEXT]];
     if (inst_.is_viewport()) {
       has_motion = (obmat_curr != obmat_prev);
     }
     else {
-      const float4x4 &obmat_next = (*object_steps[STEP_NEXT])[vel.obj.ofs[STEP_NEXT]];
       has_motion = (obmat_curr != obmat_prev || obmat_curr != obmat_next);
     }
   }
@@ -315,7 +314,6 @@ void VelocityModule::step_swap()
     std::swap(geometry_steps[step_a], geometry_steps[step_b]);
     std::swap(camera_steps[step_a], camera_steps[step_b]);
     std::swap(step_time[step_a], step_time[step_b]);
-    std::swap(object_steps_usage[step_a], object_steps_usage[step_b]);
 
     for (VelocityObjectData &vel : velocity_map.values()) {
       vel.obj.ofs[step_a] = vel.obj.ofs[step_b];
@@ -346,9 +344,6 @@ void VelocityModule::begin_sync()
   step_ = STEP_CURRENT;
   step_camera_sync();
   object_steps_usage[step_] = 0;
-
-  /* STEP_NEXT is not used for viewport. (See #131134) */
-  BLI_assert(!inst_.is_viewport() || object_steps_usage[STEP_NEXT] == 0);
 }
 
 /* This is the end of the current frame sync. Not the step_sync. */
-- 
GitLab