4ca286bfe8da60ba145d4ff83f3200dcee1a5999
[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 sysmem_bindings;
21
22 uint16_t class_3d;
23
24 struct {
25 struct nouveau_fence *head;
26 struct nouveau_fence *tail;
27 struct nouveau_fence *current;
28 u32 sequence;
29 u32 sequence_ack;
30 void (*emit)(struct pipe_screen *, u32 *sequence);
31 u32 (*update)(struct pipe_screen *);
32 } fence;
33
34 struct nouveau_mman *mm_VRAM;
35 struct nouveau_mman *mm_GART;
36 };
37
38 static INLINE struct nouveau_screen *
39 nouveau_screen(struct pipe_screen *pscreen)
40 {
41 return (struct nouveau_screen *)pscreen;
42 }
43
44 boolean
45 nouveau_screen_bo_get_handle(struct pipe_screen *pscreen,
46 struct nouveau_bo *bo,
47 unsigned stride,
48 struct winsys_handle *whandle);
49 struct nouveau_bo *
50 nouveau_screen_bo_from_handle(struct pipe_screen *pscreen,
51 struct winsys_handle *whandle,
52 unsigned *out_stride);
53
54
55 int nouveau_screen_init(struct nouveau_screen *, struct nouveau_device *);
56 void nouveau_screen_fini(struct nouveau_screen *);
57
58 void nouveau_screen_init_vdec(struct nouveau_screen *);
59
60 #endif