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...

The rest of the series is:
Reviewed-by: Kenneth Graunke <kenn...@whitecape.org>

It looks like iris ends up with PIPE_CAP_MAX_FRAMES_IN_FLIGHT == 0 at
the end of the series.  It was 2 before I botched the DRM_CONF config
when adding driconf XML support, so I'd probably like it to be that way
again.  Feel free to just fix that in your patch that introduces the
cap, or I can push a patch after your series lands.

Thanks for cleaning this up, it's nice to have one fewer place to
configure this sort of stuff.

Attachment: signature.asc
Description: This is a digitally signed message part.

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

Reply via email to