nouveau: support getting "native" bo from winsys
authorBen Skeggs <skeggsb@gmail.com>
Thu, 5 Feb 2009 03:17:12 +0000 (13:17 +1000)
committerBen Skeggs <skeggsb@gmail.com>
Thu, 5 Feb 2009 03:18:44 +0000 (13:18 +1000)
src/gallium/drivers/nouveau/nouveau_winsys.h
src/gallium/winsys/drm/nouveau/common/nouveau_winsys.c

index e935ffffc1d74864c91d6dc1040e06b5f0396128..99f8e08201ca06580cc5ace9473a6ce0bf9fe47f 100644 (file)
@@ -57,6 +57,8 @@ struct nouveau_winsys {
                            unsigned, unsigned, unsigned, unsigned);
        int (*surface_fill)(struct nouveau_winsys *, struct pipe_surface *,
                            unsigned, unsigned, unsigned, unsigned, unsigned);
+
+       struct nouveau_bo *(*get_bo)(struct pipe_buffer *);
 };
 
 extern struct pipe_screen *
index 527c09cf6bb2b94d73a1345afc7b49d5b3e96973..ef7e8aac54ae8017fa5b765fec35ee53b2fc3c8a 100644 (file)
@@ -81,6 +81,12 @@ nouveau_pipe_push_flush(struct nouveau_winsys *nvws, unsigned size,
        return nouveau_pushbuf_flush(nvws->channel, size);
 }
 
+static struct nouveau_bo *
+nouveau_pipe_get_bo(struct pipe_buffer *pb)
+{
+       return ((struct nouveau_pipe_buffer *)pb)->bo;
+}
+
 struct pipe_context *
 nouveau_pipe_create(struct nouveau_context *nv)
 {
@@ -151,6 +157,8 @@ nouveau_pipe_create(struct nouveau_context *nv)
        nvws->surface_copy      = nouveau_pipe_surface_copy;
        nvws->surface_fill      = nouveau_pipe_surface_fill;
 
+       nvws->get_bo            = nouveau_pipe_get_bo;
+
        ws = nouveau_create_pipe_winsys(nv);
 
        if (!nvc->pscreen)