On 26/04/2019 10:08, Michel Dänzer wrote:
On 2019-04-26 4:06 a.m., Marek Olšák wrote:
From: Marek Olšák <marek.ol...@amd.com>

It's done by:
- decrease the number of frames in flight by 1
- flush before throttling in SwapBuffers
   (instead of wait-then-flush, do flush-then-wait)

The improvement is apparent with Unigine Heaven.

Previously:
     draw frame 2
     wait frame 0
     flush frame 2
     present frame 2

     The input lag is 2 frames.

Now:
     draw frame 2
     flush frame 2
     wait frame 1
     present frame 2

     The input lag is 1 frame. Flushing is done before waiting, because
     otherwise the device would be idle after waiting.
Nice idea. Not sure offhand about all ramifications, but certainly worth
a go.


Nine is affected because it also uses the pipe cap.
---
  src/gallium/auxiliary/util/u_screen.c         |  2 +-
  src/gallium/state_trackers/dri/dri_drawable.c | 20 +++++++++----------
  2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_screen.c 
b/src/gallium/auxiliary/util/u_screen.c
index 27f51e0898e..410f17421e6 100644
--- a/src/gallium/auxiliary/util/u_screen.c
+++ b/src/gallium/auxiliary/util/u_screen.c
@@ -349,21 +349,21 @@ u_pipe_screen_get_param_defaults(struct pipe_screen 
*pscreen,
     case PIPE_CAP_MAX_VARYINGS:
        return 8;
case PIPE_CAP_COMPUTE_GRID_INFO_LAST_BLOCK:
        return 0;
case PIPE_CAP_COMPUTE_SHADER_DERIVATIVES:
        return 0;
case PIPE_CAP_MAX_FRAMES_IN_FLIGHT:
-      return 2;
+      return 1;
This might be slightly misleading, as there can still be two frames in
flight (on the GPU) at the same time. Might be better to leave this at 2
(so Nine isn't affected) and adjust its treatment in
src/gallium/state_trackers/dri/dri_drawable.c .


Checking what gallium nine does currently, it seems we already do flush then wait, however we call swap_fences_pop_front and swap_fences_push_back in the reverse order compared to your patch.
We compensate by taking PIPE_CAP_MAX_FRAMES_IN_FLIGHT + 1

In conclusion, with the proposed patch, gl and nine should have the same behaviour (and thus if gl benefits from a value of 1, nine should as well). I haven't have noticed input lag, I guess I have to test on heaven if you see a difference. How can I slow down my gpu to test that ? I use to use the /sys/kernel/debug/dri/0/ vars to force low dpm, but it doesn't seem to be possible anymore as the related files are gone (rx480) ?


Axel

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to