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)47nouveau_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