#include "pipe/p_context.h" #include "pipe/p_state.h" #include "util/u_format.h" #include "util/u_memory.h" #include "util/u_inlines.h" #include "nouveau_drm_public.h" #include "nouveau_drmif.h" #include "nouveau_channel.h" #include "nouveau_bo.h" #include "nouveau/nouveau_winsys.h" #include "nouveau/nouveau_screen.h" struct pipe_screen * nouveau_drm_screen_create(int fd) { struct nouveau_device *dev = NULL; struct pipe_screen *(*init)(struct nouveau_device *); int ret; ret = nouveau_device_open_existing(&dev, 0, fd, 0); if (ret) return NULL; switch (dev->chipset & 0xf0) { case 0x30: case 0x40: case 0x60: init = nvfx_screen_create; break; case 0x50: case 0x80: case 0x90: case 0xa0: init = nv50_screen_create; break; case 0xc0: case 0xd0: init = nvc0_screen_create; break; default: debug_printf("%s: unknown chipset nv%02x\n", __func__, dev->chipset); return NULL; } return init(dev); }