1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef __NV50_RESOURCE_H__ 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define __NV50_RESOURCE_H__ 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_transfer.h" 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_double_list.h" 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nouveau/nouveau_winsys.h" 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nouveau/nouveau_buffer.h" 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef __NVC0_RESOURCE_H__ /* make sure we don't use these in nvc0: */ 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv50_init_resource_functions(struct pipe_context *pcontext); 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv50_screen_init_resource_functions(struct pipe_screen *pscreen); 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NV50_TILE_SHIFT_X(m) 6 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NV50_TILE_SHIFT_Y(m) ((((m) >> 4) & 0xf) + 2) 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NV50_TILE_SHIFT_Z(m) ((((m) >> 8) & 0xf) + 0) 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NV50_TILE_SIZE_X(m) 64 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NV50_TILE_SIZE_Y(m) ( 4 << (((m) >> 4) & 0xf)) 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NV50_TILE_SIZE_Z(m) ( 1 << (((m) >> 8) & 0xf)) 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NV50_TILE_SIZE_2D(m) (NV50_TILE_SIZE_X(m) << NV50_TILE_SHIFT_Y(m)) 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NV50_TILE_SIZE(m) (NV50_TILE_SIZE_2D(m) << NV50_TILE_SHIFT_Z(m)) 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* __NVC0_RESOURCE_H__ */ 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orguint32_t 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnvc0_tex_choose_tile_dims(unsigned nx, unsigned ny, unsigned nz); 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct nv50_miptree_level { 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t offset; 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t pitch; 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t tile_mode; 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NV50_MAX_TEXTURE_LEVELS 16 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct nv50_miptree { 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nv04_resource base; 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct nv50_miptree_level level[NV50_MAX_TEXTURE_LEVELS]; 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t total_size; 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t layer_stride; 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean layout_3d; /* TRUE if layer count varies with mip level */ 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint8_t ms_x; /* log2 of number of samples in x/y dimension */ 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint8_t ms_y; 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint8_t ms_mode; 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct nv50_miptree * 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv50_miptree(struct pipe_resource *pt) 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (struct nv50_miptree *)pt; 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Internal functions: 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgboolean 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv50_miptree_init_layout_linear(struct nv50_miptree *mt); 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_resource * 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv50_miptree_create(struct pipe_screen *pscreen, 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_resource *tmp); 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv50_miptree_destroy(struct pipe_screen *pscreen, struct pipe_resource *pt); 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_resource * 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv50_miptree_from_handle(struct pipe_screen *pscreen, 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_resource *template, 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct winsys_handle *whandle); 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgboolean 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv50_miptree_get_handle(struct pipe_screen *pscreen, 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *pt, 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct winsys_handle *whandle); 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct nv50_surface { 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_surface base; 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t offset; 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t width; 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint16_t height; 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint16_t depth; 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct nv50_surface * 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv50_surface(struct pipe_surface *ps) 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (struct nv50_surface *)ps; 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE enum pipe_format 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv50_zs_to_s_format(enum pipe_format format) 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (format) { 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_FORMAT_Z24_UNORM_S8_UINT: return PIPE_FORMAT_X24S8_UINT; 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_FORMAT_S8_UINT_Z24_UNORM: return PIPE_FORMAT_S8X24_UINT; 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT: return PIPE_FORMAT_X32_S8X24_UINT; 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return format; 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef __NVC0_RESOURCE_H__ 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunsigned 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv50_mt_zslice_offset(const struct nv50_miptree *mt, unsigned l, unsigned z); 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_surface * 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv50_miptree_surface_new(struct pipe_context *, 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *, 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_surface *templ); 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_transfer * 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv50_miptree_transfer_new(struct pipe_context *pcontext, 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *pt, 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned level, 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned usage, 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_box *box); 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv50_miptree_transfer_del(struct pipe_context *pcontext, 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_transfer *ptx); 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid * 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv50_miptree_transfer_map(struct pipe_context *pcontext, 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_transfer *ptx); 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv50_miptree_transfer_unmap(struct pipe_context *pcontext, 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_transfer *ptx); 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* __NVC0_RESOURCE_H__ */ 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct nv50_surface * 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv50_surface_from_miptree(struct nv50_miptree *mt, 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_surface *templ); 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_surface * 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv50_surface_from_buffer(struct pipe_context *pipe, 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *pt, 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_surface *templ); 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnv50_surface_destroy(struct pipe_context *, struct pipe_surface *); 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* __NV50_RESOURCE_H__ */ 152