[Mesa-stable] [Mesa-dev] [PATCH 1/2] i965: Fix reference counting in new basevertex upload code.

Ian Romanick idr at freedesktop.org
Fri Sep 12 08:35:03 PDT 2014


On 09/10/2014 03:41 PM, Kenneth Graunke wrote:
> In the non-indirect draw case, we call intel_upload_data to upload
> gl_BaseVertex.  It makes brw->draw.draw_params_bo point to the upload
> buffer, and increments the upload BO reference count.
> 
> So, we need to unreference it when making brw->draw.draw_params_bo point
> at something else, or else we'll retain a reference to stale upload
> buffers and hold on to them forever.
> 
> This also means that the indirect case should increment the reference
> count on the indirect draw buffer when making brw->draw.draw_params_bo
> point at it.  That way, both paths increment the reference count, so
> we can safely unreference it every time.
> 
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> Cc: "10.3" <mesa-stable at lists.freedesktop.org>
> ---
>  src/mesa/drivers/dri/i965/brw_draw.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_draw.c b/src/mesa/drivers/dri/i965/brw_draw.c
> index efa85de..b28eaf2 100644
> --- a/src/mesa/drivers/dri/i965/brw_draw.c
> +++ b/src/mesa/drivers/dri/i965/brw_draw.c
> @@ -434,10 +434,13 @@ static bool brw_try_draw_prims( struct gl_context *ctx,
>        brw->draw.start_vertex_location = prims[i].start;
>        brw->draw.base_vertex_location = prims[i].basevertex;
>  
> +      drm_intel_bo_unreference(brw->draw.draw_params_bo);
> +
>        if (prims[i].is_indirect) {
>           /* Point draw_params_bo at the indirect buffer. */
>           brw->draw.draw_params_bo =
>              intel_buffer_object(ctx->DrawIndirectBuffer)->buffer;
> +         drm_intel_bo_reference(brw->draw.draw_params_bo);

Is there are a race here, or do we know that the reference count is at
least two when we unreference above?

>           brw->draw.draw_params_offset =
>              prims[i].indirect_offset + (prims[i].indexed ? 12 : 8);
>        } else {
> 



More information about the mesa-stable mailing list