[Mesa-dev] [RFC 6/7] xa: move surface to ref/unref api
Brian Paul
brianp at vmware.com
Tue May 28 08:56:22 PDT 2013
On 05/28/2013 08:13 AM, Rob Clark wrote:
> From: Jerome Glisse <jglisse at redhat.com>
>
> This make ddx life easier.
>
> Signed-off-by: Jerome Glisse <jglisse at redhat.com>
> ---
> src/gallium/state_trackers/xa/xa_priv.h | 1 +
> src/gallium/state_trackers/xa/xa_tracker.c | 19 +++++++++++++++++--
> src/gallium/state_trackers/xa/xa_tracker.h | 3 ++-
> 3 files changed, 20 insertions(+), 3 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..6ce711cb 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,11 +452,25 @@ xa_surface_redefine(struct xa_surface *srf,
> return XA_ERR_NONE;
> }
>
> -XA_EXPORT void
> -xa_surface_destroy(struct xa_surface *srf)
> +XA_EXPORT struct xa_surface*
> +xa_surface_ref(struct xa_surface *srf)
> +{
> + if (srf == NULL) {
> + return NULL;
> + }
> + srf->refcount++;
> + return srf;
> +}
> +
> +XA_EXPORT struct xa_surface*
> +xa_surface_unref(struct xa_surface *srf)
> {
> + if (srf == NULL || --srf->refcount) {
> + return NULL;
> + }
> pipe_resource_reference(&srf->tex, NULL);
> free(srf);
> + return NULL;
> }
Looks like this function always returns NULL. Can it be void?
>
> XA_EXPORT void
> diff --git a/src/gallium/state_trackers/xa/xa_tracker.h b/src/gallium/state_trackers/xa/xa_tracker.h
> index 4d2452e..a06edd9 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 struct xa_surface *xa_surface_unref(struct xa_surface *srf);
>
> extern int xa_surface_redefine(struct xa_surface *srf,
> int width,
>
More information about the mesa-dev
mailing list