On Tue, Apr 23, 2019 at 7:30 PM Marek Olšák <mar...@gmail.com> wrote:
> On Tue, Apr 23, 2019 at 4:49 PM Kenneth Graunke <kenn...@whitecape.org> > wrote: > >> On Monday, April 22, 2019 6:29:43 PM PDT Marek Olšák wrote: >> > From: Marek Olšák <marek.ol...@amd.com> >> > >> > for better CPU-GPU parallelism >> > --- >> > src/gallium/state_trackers/dri/dri_drawable.c | 20 +++++++++---------- >> > 1 file changed, 10 insertions(+), 10 deletions(-) >> > >> > diff --git a/src/gallium/state_trackers/dri/dri_drawable.c >> b/src/gallium/state_trackers/dri/dri_drawable.c >> > index 26bfdbecc53..c1de3bed9dd 100644 >> > --- a/src/gallium/state_trackers/dri/dri_drawable.c >> > +++ b/src/gallium/state_trackers/dri/dri_drawable.c >> > @@ -555,33 +555,33 @@ dri_flush(__DRIcontext *cPriv, >> > * >> > * This pulls a fence off the throttling queue and waits for it >> if the >> > * number of fences on the throttling queue has reached the >> desired >> > * number. >> > * >> > * Then flushes to insert a fence at the current rendering >> position, and >> > * pushes that fence on the queue. This requires that the >> st_context_iface >> > * flush method returns a fence even if there are no commands to >> flush. >> > */ >> > struct pipe_screen *screen = drawable->screen->base.screen; >> > - struct pipe_fence_handle *fence; >> > + struct pipe_fence_handle *oldest_fence, *new_fence = NULL; >> > >> > - fence = swap_fences_pop_front(drawable); >> > - if (fence) { >> > - (void) screen->fence_finish(screen, NULL, fence, >> PIPE_TIMEOUT_INFINITE); >> > - screen->fence_reference(screen, &fence, NULL); >> > - } >> > + st->flush(st, flush_flags, &new_fence); >> > >> > - st->flush(st, flush_flags, &fence); >> > + oldest_fence = swap_fences_pop_front(drawable); >> > + if (oldest_fence) { >> > + screen->fence_finish(screen, NULL, oldest_fence, >> PIPE_TIMEOUT_INFINITE); >> > + screen->fence_reference(screen, &oldest_fence, NULL); >> > + } >> > >> > - if (fence) { >> > - swap_fences_push_back(drawable, fence); >> > - screen->fence_reference(screen, &fence, NULL); >> > + if (new_fence) { >> > + swap_fences_push_back(drawable, new_fence); >> > + screen->fence_reference(screen, &new_fence, NULL); >> > } >> > } >> > else if (flags & (__DRI2_FLUSH_DRAWABLE | __DRI2_FLUSH_CONTEXT)) { >> > st->flush(st, flush_flags, NULL); >> > } >> > >> > if (drawable) { >> > drawable->flushing = FALSE; >> > } >> >> It seems like this will let us submit one more batch before throttling, >> which is a little like increasing the throttle value from 2 to 3...but >> not exactly. I'm not sure I have an opinion on which is better... >> > > "Wait then flush" adds latency (input lag) to the unflushed frame. > "Flush then wait" doesn't add latency. > Actually, if it has to wait, there is already large input lag, so I guess this patch doesn't change anything other than increasing the number. I'll drop it. Marek
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev