summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2017-11-07 11:05:16 -0800
committerEric Anholt <[email protected]>2017-11-07 12:58:03 -0800
commit3bfcd31e9816813dad0ef7ec82b0fb62dd0271a0 (patch)
treef2233511f9f31a312e4079abb143922ef349b2e5 /src
parent50906e4583357920b49c78c25787403c5b4836d0 (diff)
braodcom/vc5: Flush the job when it grows over 1GB.
Fixes GL_OUT_OF_MEMORY from streaming-texture-leak (and will hopefully keep piglit from ooming on my no-swap platform, as well).
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/vc5/vc5_context.h3
-rw-r--r--src/gallium/drivers/vc5/vc5_draw.c6
-rw-r--r--src/gallium/drivers/vc5/vc5_job.c1
3 files changed, 10 insertions, 0 deletions
diff --git a/src/gallium/drivers/vc5/vc5_context.h b/src/gallium/drivers/vc5/vc5_context.h
index 4917153fd46..73fb0d0bc53 100644
--- a/src/gallium/drivers/vc5/vc5_context.h
+++ b/src/gallium/drivers/vc5/vc5_context.h
@@ -205,6 +205,9 @@ struct vc5_job {
*/
struct set *bos;
+ /** Sum of the sizes of the BOs referenced by the job. */
+ uint32_t referenced_size;
+
struct set *write_prscs;
/* Size of the submit.bo_handles array. */
diff --git a/src/gallium/drivers/vc5/vc5_draw.c b/src/gallium/drivers/vc5/vc5_draw.c
index 6f45b634055..f834207863d 100644
--- a/src/gallium/drivers/vc5/vc5_draw.c
+++ b/src/gallium/drivers/vc5/vc5_draw.c
@@ -479,6 +479,12 @@ vc5_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info)
vc5_job_add_bo(job, rsc->bo);
}
+ if (job->referenced_size > 768 * 1024 * 1024) {
+ perf_debug("Flushing job with %dkb to try to free up memory\n",
+ job->referenced_size / 1024);
+ vc5_flush(pctx);
+ }
+
if (V3D_DEBUG & V3D_DEBUG_ALWAYS_FLUSH)
vc5_flush(pctx);
}
diff --git a/src/gallium/drivers/vc5/vc5_job.c b/src/gallium/drivers/vc5/vc5_job.c
index 46c85e7edf4..0141802b43e 100644
--- a/src/gallium/drivers/vc5/vc5_job.c
+++ b/src/gallium/drivers/vc5/vc5_job.c
@@ -118,6 +118,7 @@ vc5_job_add_bo(struct vc5_job *job, struct vc5_bo *bo)
vc5_bo_reference(bo);
_mesa_set_add(job->bos, bo);
+ job->referenced_size += bo->size;
uint32_t *bo_handles = (void *)(uintptr_t)job->submit.bo_handles;