nouveau: get rid of winsys object
[mesa.git] / src / gallium / drivers / nouveau / nouveau_screen.c
index a9426df686f928add89793574b07111e145a0d28..99546a213198538b0e8331ebb9b2641bc240c955 100644 (file)
 
 #include <stdio.h>
 #include <errno.h>
+#include <stdlib.h>
 
 #include "nouveau/nouveau_bo.h"
+#include "nouveau/nouveau_mm.h"
 #include "nouveau_winsys.h"
 #include "nouveau_screen.h"
+#include "nouveau_fence.h"
 
 /* XXX this should go away */
 #include "state_tracker/drm_driver.h"
 #include "util/u_simple_screen.h"
 
+#include "nouveau_drmif.h"
+
+int nouveau_mesa_debug = 0;
+
 static const char *
 nouveau_screen_get_name(struct pipe_screen *pscreen)
 {
@@ -79,20 +86,6 @@ nouveau_screen_bo_new(struct pipe_screen *pscreen, unsigned alignment,
        return bo;
 }
 
-struct nouveau_bo *
-nouveau_screen_bo_user(struct pipe_screen *pscreen, void *ptr, unsigned bytes)
-{
-       struct nouveau_device *dev = nouveau_screen(pscreen)->device;
-       struct nouveau_bo *bo = NULL;
-       int ret;
-
-       ret = nouveau_bo_user(dev, ptr, bytes, &bo);
-       if (ret)
-               return NULL;
-
-       return bo;
-}
-
 void *
 nouveau_screen_bo_map(struct pipe_screen *pscreen,
                      struct nouveau_bo *bo,
@@ -150,23 +143,22 @@ nouveau_screen_fence_ref(struct pipe_screen *pscreen,
                         struct pipe_fence_handle **ptr,
                         struct pipe_fence_handle *pfence)
 {
-       *ptr = pfence;
+       nouveau_fence_ref(nouveau_fence(pfence), (struct nouveau_fence **)ptr);
 }
 
-static int
+static boolean
 nouveau_screen_fence_signalled(struct pipe_screen *screen,
-                              struct pipe_fence_handle *pfence,
-                              unsigned flags)
+                               struct pipe_fence_handle *pfence)
 {
-       return 0;
+        return nouveau_fence_signalled(nouveau_fence(pfence));
 }
 
-static int
+static boolean
 nouveau_screen_fence_finish(struct pipe_screen *screen,
                            struct pipe_fence_handle *pfence,
-                           unsigned flags)
+                            uint64_t timeout)
 {
-       return 0;
+        return nouveau_fence_wait(nouveau_fence(pfence));
 }
 
 
@@ -209,32 +201,16 @@ nouveau_screen_bo_get_handle(struct pipe_screen *pscreen,
        }
 }
 
-
-unsigned int
-nouveau_reference_flags(struct nouveau_bo *bo)
-{
-       uint32_t bo_flags;
-       int flags = 0;
-
-       bo_flags = nouveau_bo_pending(bo);
-       if (bo_flags & NOUVEAU_BO_RD)
-               flags |= PIPE_REFERENCED_FOR_READ;
-       if (bo_flags & NOUVEAU_BO_WR)
-               flags |= PIPE_REFERENCED_FOR_WRITE;
-
-       return flags;
-}
-
-
-
-
-
 int
 nouveau_screen_init(struct nouveau_screen *screen, struct nouveau_device *dev)
 {
        struct pipe_screen *pscreen = &screen->base;
        int ret;
 
+       char *nv_dbg = getenv("NOUVEAU_MESA_DEBUG");
+       if (nv_dbg)
+          nouveau_mesa_debug = atoi(nv_dbg);
+
        ret = nouveau_channel_alloc(dev, 0xbeef0201, 0xbeef0202,
                                    512*1024, &screen->channel);
        if (ret)
@@ -250,15 +226,21 @@ nouveau_screen_init(struct nouveau_screen *screen, struct nouveau_device *dev)
 
        util_format_s3tc_init();
 
+       screen->mm_GART = nouveau_mm_create(dev,
+                                           NOUVEAU_BO_GART | NOUVEAU_BO_MAP,
+                                           0x000);
+       screen->mm_VRAM = nouveau_mm_create(dev, NOUVEAU_BO_VRAM, 0x000);
        return 0;
 }
 
 void
 nouveau_screen_fini(struct nouveau_screen *screen)
 {
-       struct pipe_winsys *ws = screen->base.winsys;
+       nouveau_mm_destroy(screen->mm_GART);
+       nouveau_mm_destroy(screen->mm_VRAM);
+
        nouveau_channel_free(&screen->channel);
-       if (ws)
-               ws->destroy(ws);
+
+       nouveau_device_close(&screen->device);
 }