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 	int64_t cpu_gpu_time_delta;
44 };
45 
46 static INLINE struct nouveau_screen *
nouveau_screen(struct pipe_screen * pscreen)47 nouveau_screen(struct pipe_screen *pscreen)
48 {
49 	return (struct nouveau_screen *)pscreen;
50 }
51 
52 boolean
53 nouveau_screen_bo_get_handle(struct pipe_screen *pscreen,
54 			     struct nouveau_bo *bo,
55 			     unsigned stride,
56 			     struct winsys_handle *whandle);
57 struct nouveau_bo *
58 nouveau_screen_bo_from_handle(struct pipe_screen *pscreen,
59 			      struct winsys_handle *whandle,
60 			      unsigned *out_stride);
61 
62 
63 int nouveau_screen_init(struct nouveau_screen *, struct nouveau_device *);
64 void nouveau_screen_fini(struct nouveau_screen *);
65 
66 void nouveau_screen_init_vdec(struct nouveau_screen *);
67 
68 #endif
69