1 #ifndef NOUVEAU_WINSYS_H
2 #define NOUVEAU_WINSYS_H
5 #include "pipe/internal/p_winsys_screen.h"
6 #include "pipe/p_defines.h"
8 #include "nouveau/nouveau_bo.h"
9 #include "nouveau/nouveau_channel.h"
10 #include "nouveau/nouveau_class.h"
11 #include "nouveau/nouveau_device.h"
12 #include "nouveau/nouveau_grobj.h"
13 #include "nouveau/nouveau_notifier.h"
14 #include "nouveau/nouveau_resource.h"
15 #include "nouveau/nouveau_pushbuf.h"
17 #define NOUVEAU_CAP_HW_VTXBUF (0xbeef0000)
18 #define NOUVEAU_CAP_HW_IDXBUF (0xbeef0001)
20 #define NOUVEAU_TEXTURE_USAGE_LINEAR (1 << 16)
22 #define NOUVEAU_BUFFER_USAGE_TEXTURE (1 << 16)
23 #define NOUVEAU_BUFFER_USAGE_ZETA (1 << 17)
24 #define NOUVEAU_BUFFER_USAGE_TRANSFER (1 << 18)
26 struct nouveau_winsys
{
27 struct pipe_winsys
*ws
;
29 struct nouveau_channel
*channel
;
31 int (*res_init
)(struct nouveau_resource
**heap
, unsigned start
,
33 int (*res_alloc
)(struct nouveau_resource
*heap
, int size
, void *priv
,
34 struct nouveau_resource
**);
35 void (*res_free
)(struct nouveau_resource
**);
37 int (*push_reloc
)(struct nouveau_winsys
*, void *ptr
,
38 struct pipe_buffer
*, uint32_t data
,
39 uint32_t flags
, uint32_t vor
, uint32_t tor
);
40 int (*push_flush
)(struct nouveau_winsys
*, unsigned size
,
41 struct pipe_fence_handle
**fence
);
43 int (*grobj_alloc
)(struct nouveau_winsys
*, int grclass
,
44 struct nouveau_grobj
**);
45 void (*grobj_free
)(struct nouveau_grobj
**);
47 int (*notifier_alloc
)(struct nouveau_winsys
*, int count
,
48 struct nouveau_notifier
**);
49 void (*notifier_free
)(struct nouveau_notifier
**);
50 void (*notifier_reset
)(struct nouveau_notifier
*, int id
);
51 uint32_t (*notifier_status
)(struct nouveau_notifier
*, int id
);
52 uint32_t (*notifier_retval
)(struct nouveau_notifier
*, int id
);
53 int (*notifier_wait
)(struct nouveau_notifier
*, int id
,
54 int status
, double timeout
);
56 int (*surface_copy
)(struct nouveau_winsys
*, struct pipe_surface
*,
57 unsigned, unsigned, struct pipe_surface
*,
58 unsigned, unsigned, unsigned, unsigned);
59 int (*surface_fill
)(struct nouveau_winsys
*, struct pipe_surface
*,
60 unsigned, unsigned, unsigned, unsigned, unsigned);
62 struct nouveau_bo
*(*get_bo
)(struct pipe_buffer
*);
65 extern struct pipe_screen
*
66 nv04_screen_create(struct pipe_winsys
*ws
, struct nouveau_winsys
*);
68 extern struct pipe_context
*
69 nv04_create(struct pipe_screen
*, unsigned pctx_id
);
71 extern struct pipe_screen
*
72 nv10_screen_create(struct pipe_winsys
*ws
, struct nouveau_winsys
*);
74 extern struct pipe_context
*
75 nv10_create(struct pipe_screen
*, unsigned pctx_id
);
77 extern struct pipe_screen
*
78 nv20_screen_create(struct pipe_winsys
*ws
, struct nouveau_winsys
*);
80 extern struct pipe_context
*
81 nv20_create(struct pipe_screen
*, unsigned pctx_id
);
83 extern struct pipe_screen
*
84 nv30_screen_create(struct pipe_winsys
*ws
, struct nouveau_winsys
*);
86 extern struct pipe_context
*
87 nv30_create(struct pipe_screen
*, unsigned pctx_id
);
89 extern struct pipe_screen
*
90 nv40_screen_create(struct pipe_winsys
*ws
, struct nouveau_winsys
*);
92 extern struct pipe_context
*
93 nv40_create(struct pipe_screen
*, unsigned pctx_id
);
95 extern struct pipe_screen
*
96 nv50_screen_create(struct pipe_winsys
*ws
, struct nouveau_winsys
*);
98 extern struct pipe_context
*
99 nv50_create(struct pipe_screen
*, unsigned pctx_id
);