[Mesa-dev] [PATCH v2] gallium: Implement APPLE_object_purgeable (iris, freedeno, vc4)
eric at anholt.net
Wed Feb 27 02:19:32 UTC 2019
Chris Wilson <chris at chris-wilson.co.uk> writes:
> A few of the GEM drivers provide matching ioctls to allow control of
> their bo caches. Hook these up to APPLE_object_purgeable to allow
> clients to discard video memory under pressure where they are able to
> fallback to restoring content themselves, e.g. from their own (presumably
> compressed, on disk) caches.
> v2: Refactor the repeated resource purging.
> Cc: Eric Anholt <eric at anholt.net>
> Cc: Kenneth Graunke <kenneth at whitecape.org>
> Cc: Rob Clark <robdclark at gmail.com>
> .../drivers/freedreno/freedreno_resource.c | 10 ++
> .../drivers/freedreno/freedreno_screen.c | 1 +
> src/gallium/drivers/iris/iris_resource.c | 10 ++
> src/gallium/drivers/iris/iris_screen.c | 1 +
> src/gallium/drivers/vc4/vc4_bufmgr.c | 15 ++
> src/gallium/drivers/vc4/vc4_bufmgr.h | 3 +
> src/gallium/drivers/vc4/vc4_resource.c | 10 ++
> src/gallium/drivers/vc4/vc4_screen.c | 3 +
> src/gallium/include/pipe/p_defines.h | 1 +
> src/gallium/include/pipe/p_screen.h | 20 +++
> src/mesa/Makefile.sources | 2 +
> src/mesa/meson.build | 2 +
> src/mesa/state_tracker/st_cb_objectpurge.c | 141 ++++++++++++++++++
> src/mesa/state_tracker/st_cb_objectpurge.h | 38 +++++
> src/mesa/state_tracker/st_context.c | 2 +
> src/mesa/state_tracker/st_extensions.c | 1 +
> 16 files changed, 260 insertions(+)
> create mode 100644 src/mesa/state_tracker/st_cb_objectpurge.c
> create mode 100644 src/mesa/state_tracker/st_cb_objectpurge.h
u_screen.c needs an update so that other drivers get the right defaults.
> diff --git a/src/gallium/drivers/vc4/vc4_resource.c b/src/gallium/drivers/vc4/vc4_resource.c
> index c12187d7872..d844c5d888a 100644
> --- a/src/gallium/drivers/vc4/vc4_resource.c
> +++ b/src/gallium/drivers/vc4/vc4_resource.c
> @@ -269,6 +269,15 @@ vc4_texture_subdata(struct pipe_context *pctx,
> +static boolean
> +vc4_resource_madvise(struct pipe_screen *pscreen,
> + struct pipe_resource *prsc,
> + boolean dontneed)
> + struct vc4_resource *rsc = vc4_resource(prsc);
> + return vc4_bo_madvise(rsc->bo, dontneed);
I think you'd need to flush any readers/writers of the resource.
Otherwise, if outstanding prior rendering using the BO got flushed, the
whole job would -EINVAL instead of rendering.
> +static GLenum
> +st_render_object_purgeable(struct gl_context *ctx,
> + struct gl_renderbuffer *obj,
> + GLenum option)
> + struct st_renderbuffer *stobj = st_renderbuffer(obj);
> + return st_resource_purgeable(ctx, stobj->texture, option);
If you purge a renderbuffer that's a single level of a texture object
with miplevels, I don't think we can madvise the whole resource.
Also be careful with purging just depth of packed depth/stencil.
Overall, I'm hesitatant to land support for actually doing anything with
APPLE_object_purgeable when there are no functional tests of it. I
don't mean to actually have tests that force purging, but at least
making sure that we don't accidentally break rendering by having marked
things purgeable at all.
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 832 bytes
Desc: not available
More information about the mesa-dev