mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 11:28:05 +02:00
gallium: re-org of i965 texture/surface code, functions
This commit is contained in:
parent
882a4b5054
commit
4eae65c8e0
4 changed files with 60 additions and 57 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue