Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mesa
Path: blob/21.2-virgl/src/gallium/drivers/nouveau/nvc0/nvc0_winsys.h
4574 views
1
2
#ifndef __NVC0_WINSYS_H__
3
#define __NVC0_WINSYS_H__
4
5
#include <stdint.h>
6
#include <unistd.h>
7
8
#include "pipe/p_defines.h"
9
10
#include "nouveau_winsys.h"
11
#include "nouveau_buffer.h"
12
13
#ifndef NV04_PFIFO_MAX_PACKET_LEN
14
#define NV04_PFIFO_MAX_PACKET_LEN 2047
15
#endif
16
17
18
static inline void
19
nv50_add_bufctx_resident_bo(struct nouveau_bufctx *bufctx, int bin,
20
unsigned flags, struct nouveau_bo *bo)
21
{
22
nouveau_bufctx_refn(bufctx, bin, bo, flags)->priv = NULL;
23
}
24
25
static inline void
26
nvc0_add_resident(struct nouveau_bufctx *bufctx, int bin,
27
struct nv04_resource *res, unsigned flags)
28
{
29
struct nouveau_bufref *ref =
30
nouveau_bufctx_refn(bufctx, bin, res->bo, flags | res->domain);
31
ref->priv = res;
32
ref->priv_data = flags;
33
}
34
35
#define BCTX_REFN_bo(ctx, bin, fl, bo) \
36
nv50_add_bufctx_resident_bo(ctx, NVC0_BIND_##bin, fl, bo);
37
38
#define BCTX_REFN(bctx, bin, res, acc) \
39
nvc0_add_resident(bctx, NVC0_BIND_##bin, res, NOUVEAU_BO_##acc)
40
41
static inline void
42
PUSH_REFN(struct nouveau_pushbuf *push, struct nouveau_bo *bo, uint32_t flags)
43
{
44
struct nouveau_pushbuf_refn ref = { bo, flags };
45
nouveau_pushbuf_refn(push, &ref, 1);
46
}
47
48
49
#define SUBC_3D(m) 0, (m)
50
#define NVC0_3D(n) SUBC_3D(NVC0_3D_##n)
51
#define NVE4_3D(n) SUBC_3D(NVE4_3D_##n)
52
53
#define SUBC_CP(m) 1, (m)
54
#define NVC0_CP(n) SUBC_CP(NVC0_COMPUTE_##n)
55
#define NVE4_CP(n) SUBC_CP(NVE4_COMPUTE_##n)
56
57
#define SUBC_M2MF(m) 2, (m)
58
#define SUBC_P2MF(m) 2, (m)
59
#define NVC0_M2MF(n) SUBC_M2MF(NVC0_M2MF_##n)
60
#define NVE4_P2MF(n) SUBC_P2MF(NVE4_P2MF_##n)
61
62
#define SUBC_2D(m) 3, (m)
63
#define NVC0_2D(n) SUBC_2D(NV50_2D_##n)
64
65
#define SUBC_COPY(m) 4, (m)
66
#define NVE4_COPY(n) SUBC_COPY(NVE4_COPY_##n)
67
68
#define SUBC_SW(m) 7, (m)
69
70
#define NVC0_3D_SERIALIZE NV50_GRAPH_SERIALIZE
71
#define NVC0_IB_ENTRY_1_NO_PREFETCH (1 << (31 - 8))
72
73
static inline uint32_t
74
NVC0_FIFO_PKHDR_SQ(int subc, int mthd, unsigned size)
75
{
76
return 0x20000000 | (size << 16) | (subc << 13) | (mthd >> 2);
77
}
78
79
static inline uint32_t
80
NVC0_FIFO_PKHDR_NI(int subc, int mthd, unsigned size)
81
{
82
return 0x60000000 | (size << 16) | (subc << 13) | (mthd >> 2);
83
}
84
85
static inline uint32_t
86
NVC0_FIFO_PKHDR_IL(int subc, int mthd, uint16_t data)
87
{
88
assert(data < 0x2000);
89
return 0x80000000 | (data << 16) | (subc << 13) | (mthd >> 2);
90
}
91
92
static inline uint32_t
93
NVC0_FIFO_PKHDR_1I(int subc, int mthd, unsigned size)
94
{
95
return 0xa0000000 | (size << 16) | (subc << 13) | (mthd >> 2);
96
}
97
98
99
static inline uint8_t
100
nouveau_bo_memtype(const struct nouveau_bo *bo)
101
{
102
return bo->config.nvc0.memtype;
103
}
104
105
106
static inline void
107
PUSH_DATAh(struct nouveau_pushbuf *push, uint64_t data)
108
{
109
*push->cur++ = (uint32_t)(data >> 32);
110
}
111
112
static inline void
113
BEGIN_NVC0(struct nouveau_pushbuf *push, int subc, int mthd, unsigned size)
114
{
115
#ifndef NVC0_PUSH_EXPLICIT_SPACE_CHECKING
116
PUSH_SPACE(push, size + 1);
117
#endif
118
PUSH_DATA (push, NVC0_FIFO_PKHDR_SQ(subc, mthd, size));
119
}
120
121
static inline void
122
BEGIN_NIC0(struct nouveau_pushbuf *push, int subc, int mthd, unsigned size)
123
{
124
#ifndef NVC0_PUSH_EXPLICIT_SPACE_CHECKING
125
PUSH_SPACE(push, size + 1);
126
#endif
127
PUSH_DATA (push, NVC0_FIFO_PKHDR_NI(subc, mthd, size));
128
}
129
130
static inline void
131
BEGIN_1IC0(struct nouveau_pushbuf *push, int subc, int mthd, unsigned size)
132
{
133
#ifndef NVC0_PUSH_EXPLICIT_SPACE_CHECKING
134
PUSH_SPACE(push, size + 1);
135
#endif
136
PUSH_DATA (push, NVC0_FIFO_PKHDR_1I(subc, mthd, size));
137
}
138
139
static inline void
140
IMMED_NVC0(struct nouveau_pushbuf *push, int subc, int mthd, uint16_t data)
141
{
142
#ifndef NVC0_PUSH_EXPLICIT_SPACE_CHECKING
143
PUSH_SPACE(push, 1);
144
#endif
145
PUSH_DATA (push, NVC0_FIFO_PKHDR_IL(subc, mthd, data));
146
}
147
148
#endif /* __NVC0_WINSYS_H__ */
149
150