nv30: Update miptree stuff
authorPatrice Mandin <pmandin@caramail.com>
Sat, 12 Apr 2008 20:16:42 +0000 (22:16 +0200)
committerPatrice Mandin <pmandin@caramail.com>
Sat, 12 Apr 2008 20:16:42 +0000 (22:16 +0200)
src/gallium/drivers/nv30/nv30_miptree.c

index afb05fdd2bfd3eb422e0ed481fd4110c55eec945..10ab46e19a5495e5e3a1f556879a02293e9992eb 100644 (file)
@@ -4,7 +4,6 @@
 #include "pipe/p_inlines.h"
 
 #include "nv30_context.h"
-#include "nv30_screen.h"
 
 static void
 nv30_miptree_layout(struct nv30_miptree *nv30mt)
@@ -13,7 +12,7 @@ nv30_miptree_layout(struct nv30_miptree *nv30mt)
        boolean swizzled = FALSE;
        uint width = pt->width[0], height = pt->height[0], depth = pt->depth[0];
        uint offset = 0;
-       int nr_faces, l, f;
+       int nr_faces, l, f, pitch;
 
        if (pt->target == PIPE_TEXTURE_CUBE) {
                nr_faces = 6;
@@ -24,17 +23,17 @@ nv30_miptree_layout(struct nv30_miptree *nv30mt)
                nr_faces = 1;
        }
        
+       pitch = pt->width[0];
        for (l = 0; l <= pt->last_level; l++) {
                pt->width[l] = width;
                pt->height[l] = height;
                pt->depth[l] = depth;
 
                if (swizzled)
-                       nv30mt->level[l].pitch = pt->width[l] * pt->cpp;
-               else
-                       nv30mt->level[l].pitch = pt->width[0] * pt->cpp;
-               nv30mt->level[l].pitch = (nv30mt->level[l].pitch + 63) & ~63;
+                       pitch = pt->width[l];
+               pitch = (pitch + 63) & ~63;
 
+               nv30mt->level[l].pitch = pitch * pt->cpp;
                nv30mt->level[l].image_offset =
                        CALLOC(nr_faces, sizeof(unsigned));
 
@@ -55,9 +54,9 @@ nv30_miptree_layout(struct nv30_miptree *nv30mt)
 }
 
 static struct pipe_texture *
-nv30_miptree_create(struct pipe_screen *screen, const struct pipe_texture *pt)
+nv30_miptree_create(struct pipe_screen *pscreen, const struct pipe_texture *pt)
 {
-       struct pipe_winsys *ws = screen->winsys;
+       struct pipe_winsys *ws = pscreen->winsys;
        struct nv30_miptree *mt;
 
        mt = MALLOC(sizeof(struct nv30_miptree));
@@ -65,24 +64,26 @@ nv30_miptree_create(struct pipe_screen *screen, const struct pipe_texture *pt)
                return NULL;
        mt->base = *pt;
        mt->base.refcount = 1;
-       mt->base.screen = screen;
+       mt->base.screen = pscreen;
 
        nv30_miptree_layout(mt);
 
-       mt->buffer = ws->buffer_create(ws, 256, PIPE_BUFFER_USAGE_PIXEL,
-                                          mt->total_size);
+       mt->buffer = ws->buffer_create(ws, 256,
+                                      PIPE_BUFFER_USAGE_PIXEL |
+                                      NOUVEAU_BUFFER_USAGE_TEXTURE,
+                                      mt->total_size);
        if (!mt->buffer) {
                FREE(mt);
                return NULL;
        }
-       
+
        return &mt->base;
 }
 
 static void
-nv30_miptree_release(struct pipe_screen *screen, struct pipe_texture **pt)
+nv30_miptree_release(struct pipe_screen *pscreen, struct pipe_texture **pt)
 {
-       struct pipe_winsys *ws = screen->winsys;
+       struct pipe_winsys *ws = pscreen->winsys;
        struct pipe_texture *mt = *pt;
 
        *pt = NULL;
@@ -106,10 +107,10 @@ nv30_miptree_update(struct pipe_context *pipe, struct pipe_texture *mt,
 }
 
 static struct pipe_surface *
-nv30_miptree_surface_get(struct pipe_screen *screen, struct pipe_texture *pt,
-                        unsigned face, unsigned level, unsigned zslice)
+nv30_miptree_surface(struct pipe_screen *pscreen, struct pipe_texture *pt,
+                     unsigned face, unsigned level, unsigned zslice)
 {
-       struct pipe_winsys *ws = screen->winsys;
+       struct pipe_winsys *ws = pscreen->winsys;
        struct nv30_miptree *nv30mt = (struct nv30_miptree *)pt;
        struct pipe_surface *ps;
 
@@ -146,6 +147,6 @@ nv30_screen_init_miptree_functions(struct pipe_screen *pscreen)
 {
        pscreen->texture_create = nv30_miptree_create;
        pscreen->texture_release = nv30_miptree_release;
-       pscreen->get_tex_surface = nv30_miptree_surface_get;
+       pscreen->get_tex_surface = nv30_miptree_surface;
 }