nouveau_screen.c revision bc466be695913cd504cefddd857ac1cefda87a04
1bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs#include <pipe/p_defines.h>
2bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs#include <pipe/p_screen.h>
3bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs#include <pipe/p_state.h>
4bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
5bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs#include <util/u_memory.h>
6bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
7bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs#include "nouveau/nouveau_bo.h"
8bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs#include "nouveau_winsys.h"
9bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs#include "nouveau_screen.h"
10bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
11bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsstatic const char *
12bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsnouveau_screen_get_name(struct pipe_screen *pscreen)
13bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs{
14bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	struct nouveau_device *dev = nouveau_screen(pscreen)->device;
15bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	static char buffer[128];
16bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
17bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	snprintf(buffer, sizeof(buffer), "NV%02X", dev->chipset);
18bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	return buffer;
19bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs}
20bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
21bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsstatic const char *
22bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsnouveau_screen_get_vendor(struct pipe_screen *pscreen)
23bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs{
24bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	return "nouveau";
25bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs}
26bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
27bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsstatic struct pipe_buffer *
28bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsnouveau_screen_bo_skel(struct pipe_screen *pscreen, struct nouveau_bo *bo,
29bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs		       unsigned alignment, unsigned usage, unsigned size)
30bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs{
31bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	struct pipe_buffer *pb;
32bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
33bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	pb = CALLOC(1, sizeof(struct pipe_buffer)+sizeof(struct nouveau_bo *));
34bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	if (!pb) {
35bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs		nouveau_bo_ref(NULL, &bo);
36bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs		return NULL;
37bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	}
38bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
39bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	pipe_reference_init(&pb->reference, 1);
40bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	pb->screen = pscreen;
41bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	pb->alignment = alignment;
42bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	pb->usage = usage;
43bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	pb->size = size;
44bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	*(struct nouveau_bo **)(pb + 1) = bo;
45bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	return pb;
46bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs}
47bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
48bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsstatic struct pipe_buffer *
49bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsnouveau_screen_bo_new(struct pipe_screen *pscreen, unsigned alignment,
50bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs		      unsigned usage, unsigned size)
51bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs{
52bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	struct nouveau_device *dev = nouveau_screen(pscreen)->device;
53bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	struct nouveau_bo *bo = NULL;
54bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	uint32_t flags = NOUVEAU_BO_MAP;
55bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	int ret;
56bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
57bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	if (usage & NOUVEAU_BUFFER_USAGE_TRANSFER)
58bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs		flags |= NOUVEAU_BO_GART;
59bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	else
60bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	if (usage & PIPE_BUFFER_USAGE_VERTEX) {
61bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs		if (pscreen->get_param(pscreen, NOUVEAU_CAP_HW_VTXBUF))
62bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs			flags |= NOUVEAU_BO_GART;
63bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	} else
64bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	if (usage & PIPE_BUFFER_USAGE_INDEX) {
65bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs		if (pscreen->get_param(pscreen, NOUVEAU_CAP_HW_IDXBUF))
66bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs			flags |= NOUVEAU_BO_GART;
67bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	}
68bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
69bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	if (usage & PIPE_BUFFER_USAGE_PIXEL) {
70bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs		if (usage & NOUVEAU_BUFFER_USAGE_TEXTURE)
71bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs			flags |= NOUVEAU_BO_GART;
72bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs		if (!(usage & PIPE_BUFFER_USAGE_CPU_READ_WRITE))
73bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs			flags |= NOUVEAU_BO_VRAM;
74bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
75bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs		if (dev->chipset == 0x50 || dev->chipset >= 0x80) {
76bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs			flags |= NOUVEAU_BO_TILED;
77bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs			if (usage & NOUVEAU_BUFFER_USAGE_ZETA)
78bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs				flags |= NOUVEAU_BO_ZTILE;
79bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs		}
80bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	}
81bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
82bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	ret = nouveau_bo_new(dev, flags, alignment, size, &bo);
83bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	if (ret)
84bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs		return NULL;
85bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
86bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	return nouveau_screen_bo_skel(pscreen, bo, alignment, usage, size);
87bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs}
88bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
89bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsstatic struct pipe_buffer *
90bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsnouveau_screen_bo_user(struct pipe_screen *pscreen, void *ptr, unsigned bytes)
91bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs{
92bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	struct nouveau_device *dev = nouveau_screen(pscreen)->device;
93bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	struct nouveau_bo *bo = NULL;
94bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	int ret;
95bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
96bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	ret = nouveau_bo_user(dev, ptr, bytes, &bo);
97bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	if (ret)
98bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs		return NULL;
99bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
100bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	return nouveau_screen_bo_skel(pscreen, bo, 0, 0, bytes);
101bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs}
102bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
103bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsstatic inline uint32_t
104bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsnouveau_screen_map_flags(unsigned pipe)
105bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs{
106bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	uint32_t flags = 0;
107bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
108bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	if (pipe & PIPE_BUFFER_USAGE_CPU_READ)
109bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs		flags |= NOUVEAU_BO_RD;
110bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	if (pipe & PIPE_BUFFER_USAGE_CPU_WRITE)
111bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs		flags |= NOUVEAU_BO_WR;
112bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs#ifdef NOUVEAU_BO_NOWAIT
113bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	if (pipe & PIPE_BUFFER_USAGE_DISCARD)
114bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs		flags |= NOUVEAU_BO_INVAL;
115bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
116bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	if (pipe & PIPE_BUFFER_USAGE_DONTBLOCK)
117bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs		flags |= NOUVEAU_BO_NOWAIT;
118bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	else
119bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	if (pipe & 0 /*PIPE_BUFFER_USAGE_UNSYNCHRONIZED*/)
120bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs		flags |= NOUVEAU_BO_NOSYNC;
121bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs#endif
122bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
123bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	return flags;
124bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs}
125bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
126bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsstatic void *
127bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsnouveau_screen_bo_map(struct pipe_screen *pscreen, struct pipe_buffer *pb,
128bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs		      unsigned usage)
129bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs{
130bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	struct nouveau_bo *bo = nouveau_bo(pb);
131bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	int ret;
132bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
133bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	ret = nouveau_bo_map(bo, nouveau_screen_map_flags(usage));
134bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	if (ret) {
135bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs		debug_printf("map failed: %d\n", ret);
136bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs		return NULL;
137bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	}
138bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
139bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	return bo->map;
140bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs}
141bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
142bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs#ifdef NOUVEAU_BO_NOWAIT
143bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsstatic void *
144bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsnouveau_screen_bo_map_range(struct pipe_screen *pscreen, struct pipe_buffer *pb,
145bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs			    unsigned offset, unsigned length, unsigned usage)
146bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs{
147bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	struct nouveau_bo *bo = nouveau_bo(pb);
148bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	int ret;
149bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
150bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	ret = nouveau_bo_map_range(bo, offset, length,
151bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs				   nouveau_screen_map_flags(usage));
152bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	if (ret) {
153bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs		debug_printf("map_range failed: %d\n", ret);
154bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs		return NULL;
155bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	}
156bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
157bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	return bo->map;
158bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs}
159bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
160bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsstatic void
161bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsnouveau_screen_bo_map_flush(struct pipe_screen *pscreen, struct pipe_buffer *pb,
162bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs			    unsigned offset, unsigned length)
163bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs{
164bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	struct nouveau_bo *bo = nouveau_bo(pb);
165bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
166bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	nouveau_bo_map_flush(bo, offset, length);
167bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs}
168bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs#endif
169bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
170bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsstatic void
171bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsnouveau_screen_bo_unmap(struct pipe_screen *pscreen, struct pipe_buffer *pb)
172bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs{
173bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	struct nouveau_bo *bo = nouveau_bo(pb);
174bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
175bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	nouveau_bo_unmap(bo);
176bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs}
177bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
178bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsstatic void
179bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsnouveau_screen_bo_del(struct pipe_buffer *pb)
180bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs{
181bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	struct nouveau_bo *bo = nouveau_bo(pb);
182bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
183bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	nouveau_bo_ref(NULL, &bo);
184bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	FREE(pb);
185bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs}
186bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
187bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsstatic void
188bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsnouveau_screen_fence_ref(struct pipe_screen *pscreen,
189bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs			 struct pipe_fence_handle **ptr,
190bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs			 struct pipe_fence_handle *pfence)
191bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs{
192bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	*ptr = pfence;
193bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs}
194bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
195bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsstatic int
196bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsnouveau_screen_fence_signalled(struct pipe_screen *screen,
197bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs			       struct pipe_fence_handle *pfence,
198bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs			       unsigned flags)
199bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs{
200bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	return 0;
201bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs}
202bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
203bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsstatic int
204bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsnouveau_screen_fence_finish(struct pipe_screen *screen,
205bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs			    struct pipe_fence_handle *pfence,
206bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs			    unsigned flags)
207bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs{
208bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	return 0;
209bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs}
210bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
211bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsint
212bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsnouveau_screen_init(struct nouveau_screen *screen, struct nouveau_device *dev)
213bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs{
214bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	struct pipe_screen *pscreen = &screen->base;
215bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
216bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	screen->device = dev;
217bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
218bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	pscreen->get_name = nouveau_screen_get_name;
219bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	pscreen->get_vendor = nouveau_screen_get_vendor;
220bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
221bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	pscreen->buffer_create = nouveau_screen_bo_new;
222bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	pscreen->user_buffer_create = nouveau_screen_bo_user;
223bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	pscreen->buffer_map = nouveau_screen_bo_map;
224bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs#ifdef NOUVEAU_BO_NOWAIT
225bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	pscreen->buffer_map_range = nouveau_screen_bo_map_range;
226bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	pscreen->buffer_flush_mapped_range = nouveau_screen_bo_map_flush;
227bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs#endif
228bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	pscreen->buffer_unmap = nouveau_screen_bo_unmap;
229bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	pscreen->buffer_destroy = nouveau_screen_bo_del;
230bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
231bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	pscreen->fence_reference = nouveau_screen_fence_ref;
232bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	pscreen->fence_signalled = nouveau_screen_fence_signalled;
233bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	pscreen->fence_finish = nouveau_screen_fence_finish;
234bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
235bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs	return 0;
236bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs}
237bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
238bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsvoid
239bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggsnouveau_screen_fini(struct nouveau_screen *screen)
240bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs{
241bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs}
242bc466be695913cd504cefddd857ac1cefda87a04Ben Skeggs
243