diff options
author | Alexandros Frantzis <[email protected]> | 2019-06-05 16:50:11 +0300 |
---|---|---|
committer | Chia-I Wu <[email protected]> | 2019-06-07 21:45:45 -0700 |
commit | f8f222ea364f5b6c3867ab643ff60e212302eb31 (patch) | |
tree | 1f706d17f1e5b3042a7be5e668ba8d9c46fa613e /src/gallium/drivers/virgl/virgl_context.h | |
parent | e34f79c9182f0beafaec6d254df168515e219568 (diff) |
virgl: Work around possible memory exhaustion
Since we don't normally flush before performing copy transfers, it's
possible in some scenarios to use too much memory for staging resources
and start failing. This can happen either because we exhaust the total
available memory (including system memory virtio-gpu swaps out to), or,
more commonly, because the total size of resources in a command buffer
doesn't fit in virtio-gpu video memory.
To reduce the chances of this happening, force a flush before a copy
transfer if the total size of queued staging resources exceeds a certain
limit. Since after a flush any queued staging resources will be
eventually released, this ensures both that each command buffer doesn't
require too much video memory, and that we don't end up consuming too
much memory for staging resources in total.
Fixes kernel errors reported when running texture_upload tests in glbench.
Signed-off-by: Alexandros Frantzis <[email protected]>
Reviewed-by: Chia-I Wu <[email protected]>
Diffstat (limited to 'src/gallium/drivers/virgl/virgl_context.h')
-rw-r--r-- | src/gallium/drivers/virgl/virgl_context.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/gallium/drivers/virgl/virgl_context.h b/src/gallium/drivers/virgl/virgl_context.h index 1449c64189a..b0fa03ca499 100644 --- a/src/gallium/drivers/virgl/virgl_context.h +++ b/src/gallium/drivers/virgl/virgl_context.h @@ -97,6 +97,9 @@ struct virgl_context { struct primconvert_context *primconvert; uint32_t hw_sub_ctx_id; + + /* The total size of staging resources used in queued copy transfers. */ + uint64_t queued_staging_res_size; }; static inline struct virgl_sampler_view * |