1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef __NVC0_RESOURCE_H__
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define __NVC0_RESOURCE_H__
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nv50/nv50_resource.h"
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_RESOURCE_FLAG_VIDEO (NOUVEAU_RESOURCE_FLAG_DRV_PRIV << 0)
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_TILE_SHIFT_X(m) ((((m) >> 0) & 0xf) + 6)
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_TILE_SHIFT_Y(m) ((((m) >> 4) & 0xf) + 3)
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_TILE_SHIFT_Z(m) ((((m) >> 8) & 0xf) + 0)
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_TILE_SIZE_X(m) (64 << (((m) >> 0) & 0xf))
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_TILE_SIZE_Y(m) ( 8 << (((m) >> 4) & 0xf))
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_TILE_SIZE_Z(m) ( 1 << (((m) >> 8) & 0xf))
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* it's ok to mask only in the end because max value is 3 * 5 */
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_TILE_SIZE_2D(m) ((64 * 8) << (((m) + ((m) >> 4)) & 0xf))
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NVC0_TILE_SIZE(m) ((64 * 8) << (((m) + ((m) >> 4) + ((m) >> 8)) & 0xf))
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnvc0_init_resource_functions(struct pipe_context *pcontext);
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnvc0_screen_init_resource_functions(struct pipe_screen *pscreen);
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Internal functions:
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_resource *
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnvc0_miptree_create(struct pipe_screen *pscreen,
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                    const struct pipe_resource *tmp);
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgconst struct u_resource_vtbl nvc0_miptree_vtbl;
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_surface *
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnvc0_miptree_surface_new(struct pipe_context *,
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         struct pipe_resource *,
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         const struct pipe_surface *templ);
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunsigned
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnvc0_mt_zslice_offset(const struct nv50_miptree *, unsigned l, unsigned z);
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_transfer *
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnvc0_miptree_transfer_new(struct pipe_context *pcontext,
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                          struct pipe_resource *pt,
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                          unsigned level,
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                          unsigned usage,
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                          const struct pipe_box *box);
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnvc0_miptree_transfer_del(struct pipe_context *pcontext,
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                          struct pipe_transfer *ptx);
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid *
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnvc0_miptree_transfer_map(struct pipe_context *pcontext,
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                          struct pipe_transfer *ptx);
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnvc0_miptree_transfer_unmap(struct pipe_context *pcontext,
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                            struct pipe_transfer *ptx);
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
64