xa: move surface to ref/unref api
authorJerome Glisse <jglisse@redhat.com>
Thu, 7 Mar 2013 22:03:04 +0000 (17:03 -0500)
committerRob Clark <robclark@freedesktop.org>
Thu, 25 Jul 2013 17:59:55 +0000 (13:59 -0400)
This make ddx life easier.

Signed-off-by: Jerome Glisse <jglisse@redhat.com>
Signed-off-by: Rob Clark <robclark@freedesktop.org>
src/gallium/state_trackers/xa/xa_priv.h
src/gallium/state_trackers/xa/xa_tracker.c
src/gallium/state_trackers/xa/xa_tracker.h

index 2ab11b82b26a972e17d677ee9be136240426804a..ee182e792224e52f43344fbd321a5e3ccca16b2f 100644 (file)
@@ -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;
index 945ed36a2920930d6702ca06293ce658ff8ae267..cda6501fcd4f04a24ee3db27746dee3e9b0928c8 100644 (file)
@@ -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);
 }
index 4d2452e9286de48199d859363af8dbdac2f44675..65a67bb58d7f436c1a89d58ed98f9dc5af2a28f4 100644 (file)
@@ -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,