From: Jerome Glisse <jgli...@redhat.com> This make ddx life easier.
Signed-off-by: Jerome Glisse <jgli...@redhat.com> Signed-off-by: Rob Clark <robcl...@freedesktop.org> --- src/gallium/state_trackers/xa/xa_priv.h | 1 + src/gallium/state_trackers/xa/xa_tracker.c | 16 +++++++++++++++- src/gallium/state_trackers/xa/xa_tracker.h | 3 ++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/gallium/state_trackers/xa/xa_priv.h b/src/gallium/state_trackers/xa/xa_priv.h index 2ab11b8..ee182e7 100644 --- a/src/gallium/state_trackers/xa/xa_priv.h +++ b/src/gallium/state_trackers/xa/xa_priv.h @@ -59,6 +59,7 @@ struct xa_format_descriptor { }; struct xa_surface { + int refcount; struct pipe_resource template; struct xa_tracker *xa; struct pipe_resource *tex; diff --git a/src/gallium/state_trackers/xa/xa_tracker.c b/src/gallium/state_trackers/xa/xa_tracker.c index 945ed36..cda6501 100644 --- a/src/gallium/state_trackers/xa/xa_tracker.c +++ b/src/gallium/state_trackers/xa/xa_tracker.c @@ -328,6 +328,7 @@ surface_create(struct xa_tracker *xa, if (!srf->tex) goto out_no_tex; + srf->refcount = 1; srf->xa = xa; srf->flags = flags; srf->fdesc = fdesc; @@ -451,9 +452,22 @@ xa_surface_redefine(struct xa_surface *srf, return XA_ERR_NONE; } +XA_EXPORT struct xa_surface* +xa_surface_ref(struct xa_surface *srf) +{ + if (srf == NULL) { + return NULL; + } + srf->refcount++; + return srf; +} + XA_EXPORT void -xa_surface_destroy(struct xa_surface *srf) +xa_surface_unref(struct xa_surface *srf) { + if (srf == NULL || --srf->refcount) { + return; + } pipe_resource_reference(&srf->tex, NULL); free(srf); } diff --git a/src/gallium/state_trackers/xa/xa_tracker.h b/src/gallium/state_trackers/xa/xa_tracker.h index 4d2452e..65a67bb 100644 --- a/src/gallium/state_trackers/xa/xa_tracker.h +++ b/src/gallium/state_trackers/xa/xa_tracker.h @@ -176,7 +176,8 @@ extern struct xa_surface * xa_surface_from_handle(struct xa_tracker *xa, enum xa_formats xa_surface_format(const struct xa_surface *srf); -extern void xa_surface_destroy(struct xa_surface *srf); +extern struct xa_surface *xa_surface_ref(struct xa_surface *srf); +extern void xa_surface_unref(struct xa_surface *srf); extern int xa_surface_redefine(struct xa_surface *srf, int width, -- 1.8.1.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev