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