nv30: Update miptree stuff

This commit is contained in:
Patrice Mandin
2008-04-12 22:16:42 +02:00
parent 186277ee92
commit 7f811f2c42
+19 -18
View 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;
}