i965: Fix memory leaks in brw_upload_cs_work_groups_surface().
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 9 May 2019 22:40:13 +0000 (15:40 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Fri, 10 May 2019 19:50:19 +0000 (12:50 -0700)
This was taking a reference to the 64kB upload buffer and never
returning it, leaking a reference each time this atom triggered.

This leaked lots of 64kB upload BOs, eventually running us out of
of VMA space.  This would usually happen when using mpv to watch a
movie, after 20-40 minutes.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=110134
Fixes: 63d7b33f516 i965/cs: Setup surface binding for gl_NumWorkGroups
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
src/mesa/drivers/dri/i965/brw_wm_surface_state.c

index 8175fbf0db49356dc7ca086f9595e0be11108655..f1defb3f148eb47bda13734e523792cfd5bae053 100644 (file)
@@ -1685,6 +1685,11 @@ brw_upload_cs_work_groups_surface(struct brw_context *brw)
                                     ISL_FORMAT_RAW,
                                     3 * sizeof(GLuint), 1,
                                     RELOC_WRITE);
+
+      /* The state buffer now holds a reference to our upload, drop ours. */
+      if (bo != brw->compute.num_work_groups_bo)
+         brw_bo_unreference(bo);
+
       brw->ctx.NewDriverState |= BRW_NEW_SURFACES;
    }
 }