On 05/28/2013 08:13 AM, Rob Clark wrote:
From: Jerome Glisse <jgli...@redhat.com>

This make ddx life easier.

Signed-off-by: Jerome Glisse <jgli...@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,


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to