This make ddx life easier.
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
Signed-off-by: Rob Clark <robclark@freedesktop.org>
};
struct xa_surface {
+ int refcount;
struct pipe_resource template;
struct xa_tracker *xa;
struct pipe_resource *tex;
if (!srf->tex)
goto out_no_tex;
+ srf->refcount = 1;
srf->xa = xa;
srf->flags = flags;
srf->fdesc = fdesc;
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);
}
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,