5a3cfab92e993f90f9813e39ab83f8e7ec7916c1
[mesa.git] / src / gallium / drivers / nouveau / nouveau_screen.h
1 #ifndef __NOUVEAU_SCREEN_H__
2 #define __NOUVEAU_SCREEN_H__
3
4 #include "pipe/p_screen.h"
5 #include "util/u_memory.h"
6
7 typedef uint32_t u32;
8
9 extern int nouveau_mesa_debug;
10
11 struct nouveau_bo;
12
13 struct nouveau_screen {
14 struct pipe_screen base;
15 struct nouveau_device *device;
16 struct nouveau_object *channel;
17 struct nouveau_client *client;
18 struct nouveau_pushbuf *pushbuf;
19
20 unsigned vidmem_bindings; /* PIPE_BIND_* where VRAM placement is desired */
21 unsigned sysmem_bindings; /* PIPE_BIND_* where GART placement is desired */
22 unsigned lowmem_bindings; /* PIPE_BIND_* that require an address < 4 GiB */
23 /*
24 * For bindings with (vidmem & sysmem) bits set set, PIPE_USAGE_* decides
25 * placement.
26 */
27
28 uint16_t class_3d;
29
30 struct {
31 struct nouveau_fence *head;
32 struct nouveau_fence *tail;
33 struct nouveau_fence *current;
34 u32 sequence;
35 u32 sequence_ack;
36 void (*emit)(struct pipe_screen *, u32 *sequence);
37 u32 (*update)(struct pipe_screen *);
38 } fence;
39
40 struct nouveau_mman *mm_VRAM;
41 struct nouveau_mman *mm_GART;
42 };
43
44 static INLINE struct nouveau_screen *
45 nouveau_screen(struct pipe_screen *pscreen)
46 {
47 return (struct nouveau_screen *)pscreen;
48 }
49
50 boolean
51 nouveau_screen_bo_get_handle(struct pipe_screen *pscreen,
52 struct nouveau_bo *bo,
53 unsigned stride,
54 struct winsys_handle *whandle);
55 struct nouveau_bo *
56 nouveau_screen_bo_from_handle(struct pipe_screen *pscreen,
57 struct winsys_handle *whandle,
58 unsigned *out_stride);
59
60
61 int nouveau_screen_init(struct nouveau_screen *, struct nouveau_device *);
62 void nouveau_screen_fini(struct nouveau_screen *);
63
64 void nouveau_screen_init_vdec(struct nouveau_screen *);
65
66 #endif