r600g: inline r600_bo_reference.
authorDave Airlie <airlied@redhat.com>
Tue, 7 Jun 2011 01:03:59 +0000 (11:03 +1000)
committerDave Airlie <airlied@redhat.com>
Wed, 8 Jun 2011 01:46:59 +0000 (11:46 +1000)
This relies on the reference member being first, so document it.

Signed-off-by: Dave Airlie <airlied@redhat.com>
src/gallium/drivers/r600/r600.h
src/gallium/winsys/r600/drm/r600_bo.c
src/gallium/winsys/r600/drm/r600_priv.h

index 84232b10037df93f2d1654bfb12790c8196a0f0e..0d37376594bb86401457c116207e7ec8357dbdd2 100644 (file)
@@ -30,6 +30,7 @@
 #include <stdint.h>
 #include <stdio.h>
 #include <util/u_double_list.h>
+#include <util/u_inlines.h>
 #include <pipe/p_compiler.h>
 
 #define RADEON_CTX_MAX_PM4     (64 * 1024 / 4)
@@ -103,14 +104,24 @@ struct r600_bo *r600_bo_handle(struct radeon *radeon,
                                unsigned handle, unsigned *array_mode);
 void *r600_bo_map(struct radeon *radeon, struct r600_bo *bo, unsigned usage, void *ctx);
 void r600_bo_unmap(struct radeon *radeon, struct r600_bo *bo);
-void r600_bo_reference(struct radeon *radeon, struct r600_bo **dst,
-                           struct r600_bo *src);
 boolean r600_bo_get_winsys_handle(struct radeon *radeon, struct r600_bo *pb_bo,
                                unsigned stride, struct winsys_handle *whandle);
 static INLINE unsigned r600_bo_offset(struct r600_bo *bo)
 {
        return 0;
 }
+void r600_bo_destroy(struct radeon *radeon, struct r600_bo *bo);
+
+/* this relies on the pipe_reference being the first member of r600_bo */
+static INLINE void r600_bo_reference(struct radeon *radeon, struct r600_bo **dst, struct r600_bo *src)
+{
+       struct r600_bo *old = *dst;
+
+       if (pipe_reference((struct pipe_reference *)(*dst), (struct pipe_reference *)src)) {
+               r600_bo_destroy(radeon, old);
+       }
+       *dst = src;
+}
 
 
 /* R600/R700 STATES */
index 2bfb8e4e1933247f459aa1dca77bdf3986babe54..8bb216dc7a8e37e41fb96967676b91a357fd08ce 100644 (file)
@@ -180,16 +180,6 @@ void r600_bo_destroy(struct radeon *radeon, struct r600_bo *bo)
        free(bo);
 }
 
-void r600_bo_reference(struct radeon *radeon, struct r600_bo **dst, struct r600_bo *src)
-{
-       struct r600_bo *old = *dst;
-
-       if (pipe_reference(&(*dst)->reference, &src->reference)) {
-               r600_bo_destroy(radeon, old);
-       }
-       *dst = src;
-}
-
 boolean r600_bo_get_winsys_handle(struct radeon *radeon, struct r600_bo *bo,
                                unsigned stride, struct winsys_handle *whandle)
 {
index d9cb52409cdc96a42194b1d36bfd0899c4d201e9..da31a42b2a058cbb63c97139805c1a03409fcfea 100644 (file)
@@ -95,7 +95,8 @@ struct radeon_bo {
 };
 
 struct r600_bo {
-       struct pipe_reference           reference;
+       struct pipe_reference           reference; /* this must be the first member for the r600_bo_reference inline to work */
+       /* DO NOT MOVE THIS ^ */
        unsigned                        size;
        unsigned                        tiling_flags;
        unsigned                        kernel_pitch;