Chris Wilson <ch...@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 <e...@anholt.net> > Cc: Kenneth Graunke <kenn...@whitecape.org> > Cc: Rob Clark <robdcl...@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, > box); > } > > +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.
signature.asc
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev