Module: Mesa
Branch: gallium-resources
Commit: b94f3e7389cbd1b6465de3c04e8059ce73f1ea1f
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b94f3e7389cbd1b6465de3c04e8059ce73f1ea1f

Author: Luca Barbieri <[email protected]>
Date:   Sat Apr  3 01:48:33 2010 +0200

nouveau: fix for gallium-resources

---

 src/gallium/drivers/nouveau/nouveau_screen.c |   25 +++++++++----
 src/gallium/drivers/nouveau/nouveau_screen.h |    4 ++-
 src/gallium/drivers/nouveau/nouveau_winsys.h |   49 --------------------------
 src/gallium/drivers/nv50/nv50_buffer.c       |    3 +-
 src/gallium/drivers/nvfx/nvfx_buffer.c       |    3 +-
 src/gallium/drivers/nvfx/nvfx_miptree.c      |    7 +---
 src/gallium/drivers/nvfx/nvfx_resource.c     |   16 ++++----
 src/gallium/drivers/nvfx/nvfx_resource.h     |    2 +-
 8 files changed, 34 insertions(+), 75 deletions(-)

diff --git a/src/gallium/drivers/nouveau/nouveau_screen.c 
b/src/gallium/drivers/nouveau/nouveau_screen.c
index 746ddca..b11faa4 100644
--- a/src/gallium/drivers/nouveau/nouveau_screen.c
+++ b/src/gallium/drivers/nouveau/nouveau_screen.c
@@ -37,33 +37,42 @@ nouveau_screen_get_vendor(struct pipe_screen *pscreen)
 
 struct nouveau_bo *
 nouveau_screen_bo_new(struct pipe_screen *pscreen, unsigned alignment,
-                     unsigned usage, unsigned size)
+                     unsigned usage, unsigned bind, unsigned size)
 {
        struct nouveau_device *dev = nouveau_screen(pscreen)->device;
        struct nouveau_bo *bo = NULL;
        uint32_t flags = NOUVEAU_BO_MAP, tile_mode = 0, tile_flags = 0;
        int ret;
 
-       if (usage & NOUVEAU_BUFFER_USAGE_TRANSFER)
+       /* TODO: this is somewhat wrong */
+       if (usage == PIPE_USAGE_STAGING)
                flags |= NOUVEAU_BO_GART;
        else
-       if (usage & NOUVEAU_BUFFER_USAGE_VERTEX) {
+       if (bind & PIPE_BIND_VERTEX_BUFFER) {
                if (pscreen->get_param(pscreen, NOUVEAU_CAP_HW_VTXBUF))
                        flags |= NOUVEAU_BO_GART;
        } else
-       if (usage & NOUVEAU_BUFFER_USAGE_INDEX) {
+       if (usage & PIPE_BIND_INDEX_BUFFER) {
                if (pscreen->get_param(pscreen, NOUVEAU_CAP_HW_IDXBUF))
                        flags |= NOUVEAU_BO_GART;
        }
 
-       if (usage & NOUVEAU_BUFFER_USAGE_PIXEL) {
-               if (usage & NOUVEAU_BUFFER_USAGE_TEXTURE)
+       if (bind & (PIPE_BIND_RENDER_TARGET |
+                       PIPE_BIND_DEPTH_STENCIL |
+                       PIPE_BIND_BLIT_SOURCE |
+                       PIPE_BIND_BLIT_DESTINATION |
+                       PIPE_BIND_SCANOUT |
+                       PIPE_BIND_DISPLAY_TARGET |
+                       PIPE_BIND_SAMPLER_VIEW))
+       {
+               /* TODO: this may be incorrect or suboptimal */
+               if (!(bind & PIPE_BIND_SCANOUT))
                        flags |= NOUVEAU_BO_GART;
-               if (!(usage & NOUVEAU_BUFFER_USAGE_CPU_READ_WRITE))
+               if (usage != PIPE_USAGE_DYNAMIC)
                        flags |= NOUVEAU_BO_VRAM;
 
                if (dev->chipset == 0x50 || dev->chipset >= 0x80) {
-                       if (usage & NOUVEAU_BUFFER_USAGE_ZETA)
+                       if (bind & PIPE_BIND_DEPTH_STENCIL)
                                tile_flags = 0x2800;
                        else
                                tile_flags = 0x7000;
diff --git a/src/gallium/drivers/nouveau/nouveau_screen.h 
b/src/gallium/drivers/nouveau/nouveau_screen.h
index 1ba4113..37caf51 100644
--- a/src/gallium/drivers/nouveau/nouveau_screen.h
+++ b/src/gallium/drivers/nouveau/nouveau_screen.h
@@ -1,6 +1,8 @@
 #ifndef __NOUVEAU_SCREEN_H__
 #define __NOUVEAU_SCREEN_H__
 
+#define PIPE_USAGE_STAGING         5
+
 struct nouveau_screen {
        struct pipe_screen base;
        struct nouveau_device *device;
@@ -21,7 +23,7 @@ nouveau_screen(struct pipe_screen *pscreen)
  */
 struct nouveau_bo *
 nouveau_screen_bo_new(struct pipe_screen *pscreen, unsigned alignment,
-                     unsigned usage, unsigned size);
+                     unsigned usage, unsigned bind, unsigned size);
 struct nouveau_bo *
 nouveau_screen_bo_user(struct pipe_screen *pscreen, void *ptr, unsigned bytes);
 void *
diff --git a/src/gallium/drivers/nouveau/nouveau_winsys.h 
b/src/gallium/drivers/nouveau/nouveau_winsys.h
index 423255c..b144bef 100644
--- a/src/gallium/drivers/nouveau/nouveau_winsys.h
+++ b/src/gallium/drivers/nouveau/nouveau_winsys.h
@@ -16,19 +16,6 @@
 #define NOUVEAU_CAP_HW_VTXBUF (0xbeef0000)
 #define NOUVEAU_CAP_HW_IDXBUF (0xbeef0001)
 
-/* These were poorly defined flags at the pipe interface previously.
- * They have been removed, but nouveau can continue to use its own
- * versions internally:
- */
-#define NOUVEAU_BUFFER_USAGE_PIXEL           0x1
-#define NOUVEAU_BUFFER_USAGE_VERTEX          0x2
-#define NOUVEAU_BUFFER_USAGE_CPU_READ_WRITE  0x4
-#define NOUVEAU_BUFFER_USAGE_GPU_WRITE       0x8
-#define NOUVEAU_BUFFER_USAGE_DISCARD         0x10
-#define NOUVEAU_BUFFER_USAGE_TEXTURE         0x20
-#define NOUVEAU_BUFFER_USAGE_ZETA            0x40
-#define NOUVEAU_BUFFER_USAGE_TRANSFER        0x80
-
 static inline uint32_t
 nouveau_screen_transfer_flags(unsigned pipe)
 {
@@ -49,42 +36,6 @@ nouveau_screen_transfer_flags(unsigned pipe)
        return flags;
 }
 
-static INLINE unsigned 
-nouveau_screen_bind_flags( unsigned bind )
-{
-       unsigned buf_usage = 0;
-
-       if (bind & PIPE_BIND_VERTEX_BUFFER)
-               buf_usage |= NOUVEAU_BUFFER_USAGE_VERTEX;
-
-       if (bind & PIPE_BIND_INDEX_BUFFER)
-               buf_usage |= PIPE_BIND_INDEX_BUFFER;
-
-       if (bind & (PIPE_BIND_RENDER_TARGET |
-                   PIPE_BIND_DEPTH_STENCIL |
-                   PIPE_BIND_BLIT_SOURCE |
-                   PIPE_BIND_BLIT_DESTINATION |
-                   PIPE_BIND_SCANOUT |
-                   PIPE_BIND_DISPLAY_TARGET |
-                   PIPE_BIND_SAMPLER_VIEW))
-               buf_usage |= NOUVEAU_BUFFER_USAGE_PIXEL;
-
-       if (bind & (PIPE_BIND_TRANSFER_WRITE |
-                   PIPE_BIND_TRANSFER_READ))
-               buf_usage |= NOUVEAU_BUFFER_USAGE_CPU_READ_WRITE;
-
-       /* Not sure where these two came from:
-        */
-       if (0)
-               buf_usage |= NOUVEAU_BUFFER_USAGE_TRANSFER;
-
-       if (0)
-               buf_usage |= NOUVEAU_BUFFER_USAGE_ZETA;
-
-       return buf_usage;
-}
-
-
 extern struct pipe_screen *
 nvfx_screen_create(struct pipe_winsys *ws, struct nouveau_device *);
 
diff --git a/src/gallium/drivers/nv50/nv50_buffer.c 
b/src/gallium/drivers/nv50/nv50_buffer.c
index 550f05c..094e05e 100644
--- a/src/gallium/drivers/nv50/nv50_buffer.c
+++ b/src/gallium/drivers/nv50/nv50_buffer.c
@@ -100,7 +100,8 @@ nv50_buffer_create(struct pipe_screen *pscreen,
 
        buffer->bo = nouveau_screen_bo_new(pscreen,
                                           16,
-                                          
nouveau_screen_bind_flags(buffer->base.bind),
+                                          buffer->base._usage,
+                                          buffer->base.bind,
                                           buffer->base.width0);
 
        if (buffer->bo == NULL)
diff --git a/src/gallium/drivers/nvfx/nvfx_buffer.c 
b/src/gallium/drivers/nvfx/nvfx_buffer.c
index 36c3e8f..24e0a0c 100644
--- a/src/gallium/drivers/nvfx/nvfx_buffer.c
+++ b/src/gallium/drivers/nvfx/nvfx_buffer.c
@@ -103,7 +103,8 @@ nvfx_buffer_create(struct pipe_screen *pscreen,
 
        buffer->bo = nouveau_screen_bo_new(pscreen,
                                           16,
-                                          
nouveau_screen_bind_flags(buffer->base.bind),
+                                          buffer->base._usage,
+                                          buffer->base.bind,
                                           buffer->base.width0);
 
        if (buffer->bo == NULL)
diff --git a/src/gallium/drivers/nvfx/nvfx_miptree.c 
b/src/gallium/drivers/nvfx/nvfx_miptree.c
index 432fb29..a5965ca 100644
--- a/src/gallium/drivers/nvfx/nvfx_miptree.c
+++ b/src/gallium/drivers/nvfx/nvfx_miptree.c
@@ -124,8 +124,6 @@ struct pipe_resource *
 nvfx_miptree_create(struct pipe_screen *pscreen, const struct pipe_resource 
*pt)
 {
        struct nvfx_miptree *mt;
-       unsigned buf_usage = NOUVEAU_BUFFER_USAGE_PIXEL |
-                            NOUVEAU_BUFFER_USAGE_TEXTURE;
        static int no_swizzle = -1;
        if(no_swizzle < 0)
                no_swizzle = debug_get_bool_option("NOUVEAU_NO_SWIZZLE", FALSE);
@@ -179,9 +177,6 @@ nvfx_miptree_create(struct pipe_screen *pscreen, const 
struct pipe_resource *pt)
                }
        }
 
-       if (pt->_usage == PIPE_USAGE_DYNAMIC)
-               buf_usage |= NOUVEAU_BUFFER_USAGE_CPU_READ_WRITE;
-
        /* apparently we can't render to swizzled surfaces smaller than 64 
bytes, so make them linear.
         * If the user did not ask for a render target, they can still render 
to it, but it will cost them an extra copy.
         * This also happens for small mipmaps of large textures. */
@@ -192,7 +187,7 @@ nvfx_miptree_create(struct pipe_screen *pscreen, const 
struct pipe_resource *pt)
        nvfx_miptree_layout(mt);
 
        mt->base.bo = nouveau_screen_bo_new(pscreen, 256,
-                                           buf_usage, mt->total_size);
+            pt->_usage, pt->bind, mt->total_size);
        if (!mt->base.bo) {
                FREE(mt);
                return NULL;
diff --git a/src/gallium/drivers/nvfx/nvfx_resource.c 
b/src/gallium/drivers/nvfx/nvfx_resource.c
index 5bf1e5c..10cdeed 100644
--- a/src/gallium/drivers/nvfx/nvfx_resource.c
+++ b/src/gallium/drivers/nvfx/nvfx_resource.c
@@ -42,15 +42,15 @@ nvfx_resource_from_handle(struct pipe_screen * screen,
 }
 
 void
-nvfx_init_resource_functions(struct pipe_context *pcontext)
+nvfx_init_resource_functions(struct pipe_context *pipe)
 {
-       pcontext->get_transfer = u_get_transfer_vtbl;
-       pcontext->transfer_map = u_transfer_map_vtbl;
-       pcontext->transfer_flush_region = u_transfer_flush_region_vtbl;
-       pcontext->transfer_unmap = u_transfer_unmap_vtbl;
-       pcontext->transfer_destroy = u_transfer_destroy_vtbl;
-       pcontext->transfer_inline_write = u_transfer_inline_write_vtbl;
-       pcontext->is_resource_referenced = nvfx_resource_is_referenced;
+       pipe->get_transfer = u_get_transfer_vtbl;
+       pipe->transfer_map = u_transfer_map_vtbl;
+       pipe->transfer_flush_region = u_transfer_flush_region_vtbl;
+       pipe->transfer_unmap = u_transfer_unmap_vtbl;
+       pipe->transfer_destroy = u_transfer_destroy_vtbl;
+       pipe->transfer_inline_write = u_transfer_inline_write_vtbl;
+       pipe->is_resource_referenced = nvfx_resource_is_referenced;
 }
 
 void
diff --git a/src/gallium/drivers/nvfx/nvfx_resource.h 
b/src/gallium/drivers/nvfx/nvfx_resource.h
index 93133e8..a68c14c 100644
--- a/src/gallium/drivers/nvfx/nvfx_resource.h
+++ b/src/gallium/drivers/nvfx/nvfx_resource.h
@@ -50,7 +50,7 @@ nvfx_surface_buffer(struct pipe_surface *surf)
 
 
 void
-nvfx_init_resource_functions(struct pipe_context *pcontext);
+nvfx_init_resource_functions(struct pipe_context *pipe);
 
 void
 nvfx_screen_init_resource_functions(struct pipe_screen *pscreen);

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to