nouveau: switch to libdrm_nouveau-2.0
[mesa.git] / src / gallium / drivers / nouveau / nouveau_winsys.h
1 #ifndef NOUVEAU_WINSYS_H
2 #define NOUVEAU_WINSYS_H
3
4 #include <stdint.h>
5 #include <inttypes.h>
6
7 #include "pipe/p_defines.h"
8
9 #include <libdrm/nouveau.h>
10
11 #ifndef NV04_PFIFO_MAX_PACKET_LEN
12 #define NV04_PFIFO_MAX_PACKET_LEN 2047
13 #endif
14
15 static INLINE uint32_t
16 PUSH_AVAIL(struct nouveau_pushbuf *push)
17 {
18 return push->end - push->cur;
19 }
20
21 static INLINE boolean
22 PUSH_SPACE(struct nouveau_pushbuf *push, uint32_t size)
23 {
24 if (PUSH_AVAIL(push) < size)
25 return nouveau_pushbuf_space(push, size, 0, 0) == 0;
26 return TRUE;
27 }
28
29 static INLINE void
30 PUSH_DATA(struct nouveau_pushbuf *push, uint32_t data)
31 {
32 *push->cur++ = data;
33 }
34
35 static INLINE void
36 PUSH_DATAp(struct nouveau_pushbuf *push, const void *data, uint32_t size)
37 {
38 memcpy(push->cur, data, size * 4);
39 push->cur += size;
40 }
41
42 static INLINE void
43 PUSH_DATAf(struct nouveau_pushbuf *push, float f)
44 {
45 union { float f; uint32_t i; } u;
46 u.f = f;
47 PUSH_DATA(push, u.i);
48 }
49
50 static INLINE void
51 PUSH_KICK(struct nouveau_pushbuf *push)
52 {
53 nouveau_pushbuf_kick(push, push->channel);
54 }
55
56
57 #define NOUVEAU_RESOURCE_FLAG_LINEAR (PIPE_RESOURCE_FLAG_DRV_PRIV << 0)
58 #define NOUVEAU_RESOURCE_FLAG_DRV_PRIV (PIPE_RESOURCE_FLAG_DRV_PRIV << 1)
59
60 static INLINE uint32_t
61 nouveau_screen_transfer_flags(unsigned pipe)
62 {
63 uint32_t flags = 0;
64
65 if (!(pipe & PIPE_TRANSFER_UNSYNCHRONIZED)) {
66 if (pipe & PIPE_TRANSFER_READ)
67 flags |= NOUVEAU_BO_RD;
68 if (pipe & PIPE_TRANSFER_WRITE)
69 flags |= NOUVEAU_BO_WR;
70 if (pipe & PIPE_TRANSFER_DONTBLOCK)
71 flags |= NOUVEAU_BO_NOBLOCK;
72 }
73
74 return flags;
75 }
76
77 extern struct pipe_screen *
78 nv50_screen_create(struct nouveau_device *);
79
80 extern struct pipe_screen *
81 nvc0_screen_create(struct nouveau_device *);
82
83 #endif