Merge branch '7.8'
[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
6 struct nouveau_screen {
7 struct pipe_screen base;
8 struct nouveau_device *device;
9 struct nouveau_channel *channel;
10
11 /* note that OpenGL doesn't distinguish between these, so
12 * these almost always should be set to the same value */
13 unsigned vertex_buffer_flags;
14 unsigned index_buffer_flags;
15 };
16
17 static inline struct nouveau_screen *
18 nouveau_screen(struct pipe_screen *pscreen)
19 {
20 return (struct nouveau_screen *)pscreen;
21 }
22
23
24
25 /* Not really sure if this is needed, or whether the individual
26 * drivers are happy to talk to the bo functions themselves. In a way
27 * this is what we'd expect from a regular winsys interface.
28 */
29 struct nouveau_bo *
30 nouveau_screen_bo_new(struct pipe_screen *pscreen, unsigned alignment,
31 unsigned usage, unsigned bind, unsigned size);
32 struct nouveau_bo *
33 nouveau_screen_bo_user(struct pipe_screen *pscreen, void *ptr, unsigned bytes);
34 void *
35 nouveau_screen_bo_map(struct pipe_screen *pscreen,
36 struct nouveau_bo *pb,
37 unsigned usage);
38 void *
39 nouveau_screen_bo_map_range(struct pipe_screen *pscreen, struct nouveau_bo *bo,
40 unsigned offset, unsigned length, unsigned usage);
41 void
42 nouveau_screen_bo_map_flush_range(struct pipe_screen *pscreen, struct nouveau_bo *bo,
43 unsigned offset, unsigned length);
44 void
45 nouveau_screen_bo_unmap(struct pipe_screen *pscreen, struct nouveau_bo *bo);
46 void
47 nouveau_screen_bo_release(struct pipe_screen *pscreen, struct nouveau_bo *bo);
48
49 boolean
50 nouveau_screen_bo_get_handle(struct pipe_screen *pscreen,
51 struct nouveau_bo *bo,
52 unsigned stride,
53 struct winsys_handle *whandle);
54 struct nouveau_bo *
55 nouveau_screen_bo_from_handle(struct pipe_screen *pscreen,
56 struct winsys_handle *whandle,
57 unsigned *out_stride);
58
59 unsigned int
60 nouveau_reference_flags(struct nouveau_bo *bo);
61
62
63
64 int nouveau_screen_init(struct nouveau_screen *, struct nouveau_device *);
65 void nouveau_screen_fini(struct nouveau_screen *);
66
67
68
69
70 static __inline__ unsigned
71 RING_3D(unsigned mthd, unsigned size)
72 {
73 return (7 << 13) | (size << 18) | mthd;
74 }
75
76 static __inline__ unsigned
77 RING_3D_NI(unsigned mthd, unsigned size)
78 {
79 return 0x40000000 | (7 << 13) | (size << 18) | mthd;
80 }
81
82 #endif