gallium: re-org of i965 texture/surface code, functions

This commit is contained in:
Brian 2008-02-20 14:04:05 -07:00
parent 882a4b5054
commit 4eae65c8e0
4 changed files with 60 additions and 57 deletions

View file

@ -222,11 +222,9 @@ struct pipe_context *brw_create(struct pipe_winsys *pipe_winsys,
brw->pipe.get_param = brw_get_param;
brw->pipe.get_paramf = brw_get_paramf;
brw->pipe.clear = brw_clear;
brw->pipe.texture_create = brw_texture_create;
brw->pipe.texture_release = brw_texture_release;
brw->pipe.texture_update = brw_texture_update;
brw_init_surface_functions(brw);
brw_init_texture_functions(brw);
brw_init_state_functions(brw);
brw_init_flush_functions(brw);
brw_init_string_functions(brw);

View file

@ -35,47 +35,6 @@
#include "util/p_tile.h"
/*
* XXX note: same as code in sp_surface.c
*/
static struct pipe_surface *
brw_get_tex_surface(struct pipe_context *pipe,
struct pipe_texture *pt,
unsigned face, unsigned level, unsigned zslice)
{
struct brw_texture *tex = (struct brw_texture *)pt;
struct pipe_surface *ps;
unsigned offset; /* in bytes */
offset = tex->level_offset[level];
if (pt->target == PIPE_TEXTURE_CUBE) {
offset += tex->image_offset[level][face] * pt->cpp;
}
else if (pt->target == PIPE_TEXTURE_3D) {
offset += tex->image_offset[level][zslice] * pt->cpp;
}
else {
assert(face == 0);
assert(zslice == 0);
}
ps = pipe->winsys->surface_alloc(pipe->winsys);
if (ps) {
assert(ps->format);
assert(ps->refcount);
pipe_buffer_reference(pipe->winsys, &ps->buffer, tex->buffer);
ps->format = pt->format;
ps->cpp = pt->cpp;
ps->width = pt->width[level];
ps->height = pt->height[level];
ps->pitch = tex->pitch;
ps->offset = offset;
}
return ps;
}
/* Upload data to a rectangular sub-region. Lots of choices how to do this:
*
* - memcpy by span to current destination
@ -201,10 +160,10 @@ brw_surface_fill(struct pipe_context *pipe,
}
}
void
brw_init_surface_functions(struct brw_context *brw)
{
brw->pipe.get_tex_surface = brw_get_tex_surface;
brw->pipe.surface_copy = brw_surface_copy;
brw->pipe.surface_fill = brw_surface_fill;
}

View file

@ -300,8 +300,9 @@ static boolean brw_miptree_layout(struct pipe_context *pipe, struct brw_texture
}
struct pipe_texture *
brw_texture_create(struct pipe_context *pipe, const struct pipe_texture *templat)
static struct pipe_texture *
brw_texture_create(struct pipe_context *pipe,
const struct pipe_texture *templat)
{
struct brw_texture *tex = CALLOC_STRUCT(brw_texture);
@ -323,7 +324,8 @@ brw_texture_create(struct pipe_context *pipe, const struct pipe_texture *templat
return &tex->base;
}
void
static void
brw_texture_release(struct pipe_context *pipe, struct pipe_texture **pt)
{
if (!*pt)
@ -353,9 +355,59 @@ brw_texture_release(struct pipe_context *pipe, struct pipe_texture **pt)
}
void
static void
brw_texture_update(struct pipe_context *pipe, struct pipe_texture *texture)
{
/* no-op? */
}
/*
* XXX note: same as code in sp_surface.c
*/
static struct pipe_surface *
brw_get_tex_surface(struct pipe_context *pipe,
struct pipe_texture *pt,
unsigned face, unsigned level, unsigned zslice)
{
struct brw_texture *tex = (struct brw_texture *)pt;
struct pipe_surface *ps;
unsigned offset; /* in bytes */
offset = tex->level_offset[level];
if (pt->target == PIPE_TEXTURE_CUBE) {
offset += tex->image_offset[level][face] * pt->cpp;
}
else if (pt->target == PIPE_TEXTURE_3D) {
offset += tex->image_offset[level][zslice] * pt->cpp;
}
else {
assert(face == 0);
assert(zslice == 0);
}
ps = pipe->winsys->surface_alloc(pipe->winsys);
if (ps) {
assert(ps->format);
assert(ps->refcount);
pipe_buffer_reference(pipe->winsys, &ps->buffer, tex->buffer);
ps->format = pt->format;
ps->cpp = pt->cpp;
ps->width = pt->width[level];
ps->height = pt->height[level];
ps->pitch = tex->pitch;
ps->offset = offset;
}
return ps;
}
void
brw_init_texture_functions(struct brw_context *brw)
{
brw->pipe.texture_create = brw_texture_create;
brw->pipe.texture_release = brw_texture_release;
brw->pipe.texture_update = brw_texture_update;
brw->pipe.get_tex_surface = brw_get_tex_surface;
}

View file

@ -1,18 +1,12 @@
#ifndef BRW_TEX_LAYOUT_H
#define BRW_TEX_LAYOUT_H
#include "pipe/p_compiler.h"
struct pipe_context;
struct pipe_texture;
struct brw_context;
extern struct pipe_texture *
brw_texture_create(struct pipe_context *pipe, const struct pipe_texture *templat);
extern void
brw_texture_release(struct pipe_context *pipe, struct pipe_texture **pt);
brw_init_texture_functions(struct brw_context *brw);
extern void
brw_texture_update(struct pipe_context *pipe, struct pipe_texture *texture);
#endif