1 #ifndef __NOUVEAU_SCREEN_H__
2 #define __NOUVEAU_SCREEN_H__
4 struct nouveau_screen
{
5 struct pipe_screen base
;
6 struct nouveau_device
*device
;
7 struct nouveau_channel
*channel
;
10 static inline struct nouveau_screen
*
11 nouveau_screen(struct pipe_screen
*pscreen
)
13 return (struct nouveau_screen
*)pscreen
;
18 /* Not really sure if this is needed, or whether the individual
19 * drivers are happy to talk to the bo functions themselves. In a way
20 * this is what we'd expect from a regular winsys interface.
23 nouveau_screen_bo_new(struct pipe_screen
*pscreen
, unsigned alignment
,
24 unsigned usage
, unsigned bind
, unsigned size
);
26 nouveau_screen_bo_user(struct pipe_screen
*pscreen
, void *ptr
, unsigned bytes
);
28 nouveau_screen_bo_map(struct pipe_screen
*pscreen
,
29 struct nouveau_bo
*pb
,
32 nouveau_screen_bo_map_range(struct pipe_screen
*pscreen
, struct nouveau_bo
*bo
,
33 unsigned offset
, unsigned length
, unsigned usage
);
35 nouveau_screen_bo_map_flush_range(struct pipe_screen
*pscreen
, struct nouveau_bo
*bo
,
36 unsigned offset
, unsigned length
);
38 nouveau_screen_bo_unmap(struct pipe_screen
*pscreen
, struct nouveau_bo
*bo
);
40 nouveau_screen_bo_release(struct pipe_screen
*pscreen
, struct nouveau_bo
*bo
);
43 nouveau_screen_bo_get_handle(struct pipe_screen
*pscreen
,
44 struct nouveau_bo
*bo
,
46 struct winsys_handle
*whandle
);
48 nouveau_screen_bo_from_handle(struct pipe_screen
*pscreen
,
49 struct winsys_handle
*whandle
,
50 unsigned *out_stride
);
53 nouveau_reference_flags(struct nouveau_bo
*bo
);
57 int nouveau_screen_init(struct nouveau_screen
*, struct nouveau_device
*);
58 void nouveau_screen_fini(struct nouveau_screen
*);
63 static __inline__
unsigned
64 RING_3D(unsigned mthd
, unsigned size
)
66 return (7 << 13) | (size
<< 18) | mthd
;
69 static __inline__
unsigned
70 RING_3D_NI(unsigned mthd
, unsigned size
)
72 return 0x40000000 | (7 << 13) | (size
<< 18) | mthd
;