[Mesa-dev] [PATCH] llvmpipe: Do not use barriers if not using threads.

Roland Scheidegger sroland at vmware.com
Thu Feb 11 01:32:08 UTC 2016


Am 11.02.2016 um 01:47 schrieb Vinson Lee:
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94088
> Signed-off-by: Vinson Lee <vlee at freedesktop.org>
> ---
>  src/gallium/drivers/llvmpipe/lp_rast.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/src/gallium/drivers/llvmpipe/lp_rast.c b/src/gallium/drivers/llvmpipe/lp_rast.c
> index d22e507..9e56c96 100644
> --- a/src/gallium/drivers/llvmpipe/lp_rast.c
> +++ b/src/gallium/drivers/llvmpipe/lp_rast.c
> @@ -910,7 +910,9 @@ lp_rast_create( unsigned num_threads )
>     create_rast_threads(rast);
>  
>     /* for synchronizing rasterization threads */
> -   pipe_barrier_init( &rast->barrier, rast->num_threads );
> +   if (rast->num_threads > 0) {
> +      pipe_barrier_init( &rast->barrier, rast->num_threads );
> +   }
>  
>     memset(lp_dummy_tile, 0, sizeof lp_dummy_tile);
>  
> @@ -967,7 +969,9 @@ void lp_rast_destroy( struct lp_rasterizer *rast )
>     }
>  
>     /* for synchronizing rasterization threads */
> -   pipe_barrier_destroy( &rast->barrier );
> +   if (rast->num_threads > 0) {
> +      pipe_barrier_destroy( &rast->barrier );
> +   }
>  
>     lp_scene_queue_destroy(rast->full_scenes);
>  
> 

Oh good find. I am wondering why it worked before - barriers with 0
count were never legal, and it looks like the glibc implementation would
always have returned an error on creation (thus using some uninitialized
data when calling destroy).
In any case,
Reviewed-by: Roland Scheidegger <sroland at vmware.com>

I think this should also go to stable.

Roland



More information about the mesa-dev mailing list