diff options
author | Christoph Bumiller <[email protected]> | 2011-07-14 12:40:04 +0200 |
---|---|---|
committer | Christoph Bumiller <[email protected]> | 2011-07-14 12:51:06 +0200 |
commit | cad17554c4b121c03e188dd0281718a52d603a15 (patch) | |
tree | f22e0d7feb5ac3323a659465cef71a16e83705e4 /src/gallium/drivers/nv50/nv50_resource.h | |
parent | ebeec1d43a7c7b2542ed76326dd3b1814ca47dc8 (diff) |
nv50,nvc0: unify nvc0_miptree and nv50_miptree structs
Share some functions and restructure miptree creation a little.
Prepare for multi-sample resources.
Diffstat (limited to 'src/gallium/drivers/nv50/nv50_resource.h')
-rw-r--r-- | src/gallium/drivers/nv50/nv50_resource.h | 65 |
1 files changed, 57 insertions, 8 deletions
diff --git a/src/gallium/drivers/nv50/nv50_resource.h b/src/gallium/drivers/nv50/nv50_resource.h index 0e9f0a2557e..a771edf4095 100644 --- a/src/gallium/drivers/nv50/nv50_resource.h +++ b/src/gallium/drivers/nv50/nv50_resource.h @@ -9,22 +9,32 @@ #include "nouveau/nouveau_buffer.h" #undef NOUVEAU_NVC0 +#ifndef __NVC0_RESOURCE_H__ /* make sure we don't use these in nvc0: */ + void nv50_init_resource_functions(struct pipe_context *pcontext); void nv50_screen_init_resource_functions(struct pipe_screen *pscreen); -#define NV50_TILE_DIM_SHIFT(m, d) (((m) >> (d * 4)) & 0xf) -#define NV50_TILE_PITCH(m) (64 << 0) -#define NV50_TILE_HEIGHT(m) ( 4 << NV50_TILE_DIM_SHIFT(m, 0)) -#define NV50_TILE_DEPTH(m) ( 1 << NV50_TILE_DIM_SHIFT(m, 1)) +#define NV50_TILE_SHIFT_X(m) 6 +#define NV50_TILE_SHIFT_Y(m) ((((m) >> 0) & 0xf) + 2) +#define NV50_TILE_SHIFT_Z(m) ((((m) >> 4) & 0xf) + 0) + +#define NV50_TILE_SIZE_X(m) 64 +#define NV50_TILE_SIZE_Y(m) ( 4 << (((m) >> 0) & 0xf)) +#define NV50_TILE_SIZE_Z(m) ( 1 << (((m) >> 4) & 0xf)) + +#define NV50_TILE_SIZE_2D(m) (NV50_TILE_SIZE_X(m) << NV50_TILE_SHIFT_Y(m)) + +#define NV50_TILE_SIZE(m) (NV50_TILE_SIZE_2D(m) << NV50_TILE_SHIFT_Z(m)) + +#endif /* __NVC0_RESOURCE_H__ */ -#define NV50_TILE_SIZE_2D(m) ((64 * 4) << \ - NV50_TILE_DIM_SHIFT(m, 0)) +uint32_t +nvc0_tex_choose_tile_dims(unsigned nx, unsigned ny, unsigned nz); -#define NV50_TILE_SIZE(m) (NV50_TILE_SIZE_2D(m) << NV50_TILE_DIM_SHIFT(m, 1)) struct nv50_miptree_level { uint32_t offset; @@ -40,6 +50,9 @@ struct nv50_miptree { uint32_t total_size; uint32_t layer_stride; boolean layout_3d; /* TRUE if layer count varies with mip level */ + uint8_t ms_x; /* log2 of number of samples in x/y dimension */ + uint8_t ms_y; + uint8_t ms_mode; }; static INLINE struct nv50_miptree * @@ -50,21 +63,57 @@ nv50_miptree(struct pipe_resource *pt) /* Internal functions: */ +boolean +nv50_miptree_init_layout_linear(struct nv50_miptree *mt); + struct pipe_resource * nv50_miptree_create(struct pipe_screen *pscreen, const struct pipe_resource *tmp); +void +nv50_miptree_destroy(struct pipe_screen *pscreen, struct pipe_resource *pt); + struct pipe_resource * nv50_miptree_from_handle(struct pipe_screen *pscreen, const struct pipe_resource *template, struct winsys_handle *whandle); +boolean +nv50_miptree_get_handle(struct pipe_screen *pscreen, + struct pipe_resource *pt, + struct winsys_handle *whandle); + +struct nv50_surface { + struct pipe_surface base; + uint32_t offset; + uint32_t width; + uint16_t height; + uint16_t depth; +}; + +static INLINE struct nv50_surface * +nv50_surface(struct pipe_surface *ps) +{ + return (struct nv50_surface *)ps; +} + +#ifndef __NVC0_RESOURCE_H__ + +unsigned +nv50_mt_zslice_offset(const struct nv50_miptree *mt, unsigned l, unsigned z); + struct pipe_surface * nv50_miptree_surface_new(struct pipe_context *, struct pipe_resource *, const struct pipe_surface *templ); +#endif /* __NVC0_RESOURCE_H__ */ + +struct nv50_surface * +nv50_surface_from_miptree(struct nv50_miptree *mt, + const struct pipe_surface *templ); + void nv50_miptree_surface_del(struct pipe_context *, struct pipe_surface *); -#endif +#endif /* __NV50_RESOURCE_H__ */ |