intel: Make gem export the drm_api_hocks
authorJakob Bornecrantz <wallbraker@gmail.com>
Mon, 2 Feb 2009 00:30:05 +0000 (01:30 +0100)
committerJakob Bornecrantz <wallbraker@gmail.com>
Thu, 12 Feb 2009 21:05:37 +0000 (22:05 +0100)
12 files changed:
src/gallium/winsys/drm/intel/egl/Makefile
src/gallium/winsys/drm/intel/egl/intel_api.c [deleted file]
src/gallium/winsys/drm/intel/egl/intel_api.h [deleted file]
src/gallium/winsys/drm/intel/egl/intel_context.c [deleted file]
src/gallium/winsys/drm/intel/egl/intel_device.c [deleted file]
src/gallium/winsys/drm/intel/gem/Makefile
src/gallium/winsys/drm/intel/gem/intel_be_api.c [new file with mode: 0644]
src/gallium/winsys/drm/intel/gem/intel_be_api.h [new file with mode: 0644]
src/gallium/winsys/drm/intel/gem/intel_be_context.c
src/gallium/winsys/drm/intel/gem/intel_be_context.h
src/gallium/winsys/drm/intel/gem/intel_be_device.c
src/gallium/winsys/drm/intel/gem/intel_be_device.h

index 7147d89e0d0a86f06aaacea6f14f6f1bb165c7dc..c5217ad2d634b538a6d106f1926c763a8577c159 100644 (file)
@@ -1,19 +1,16 @@
 TOP = ../../../../../..
+GALLIUMDIR = ../../../..
 include $(TOP)/configs/current
 
 LIBNAME = EGL_i915.so
 
 PIPE_DRIVERS = \
-       ../gem/libinteldrm.a \
-       $(TOP)/src/gallium/drivers/softpipe/libsoftpipe.a \
-       $(TOP)/src/gallium/drivers/i915simple/libi915simple.a \
        $(TOP)/src/gallium/state_trackers/egl/libegldrm.a \
+       $(GALLIUMDIR)/winsys/drm/intel/gem/libinteldrm.a \
+       $(TOP)/src/gallium/drivers/softpipe/libsoftpipe.a \
+       $(TOP)/src/gallium/drivers/i915simple/libi915simple.a
 
-
-DRIVER_SOURCES = \
-       intel_context.c \
-       intel_device.c \
-       intel_api.c
+DRIVER_SOURCES =
 
 C_SOURCES = \
        $(COMMON_GALLIUM_SOURCES) \
diff --git a/src/gallium/winsys/drm/intel/egl/intel_api.c b/src/gallium/winsys/drm/intel/egl/intel_api.c
deleted file mode 100644 (file)
index 5dc4a7b..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-#include "intel_api.h"
-
-struct drm_api drm_api_hocks =
-{
-       .create_screen = intel_create_screen,
-       .create_context = intel_create_context,
-       .buffer_from_handle = intel_be_buffer_from_handle,
-       .handle_from_buffer = intel_be_handle_from_buffer,
-};
diff --git a/src/gallium/winsys/drm/intel/egl/intel_api.h b/src/gallium/winsys/drm/intel/egl/intel_api.h
deleted file mode 100644 (file)
index 8ec165a..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-
-#ifndef _INTEL_API_H_
-#define _INTEL_API_H_
-
-#include "pipe/p_compiler.h"
-
-#include "state_tracker/drm_api.h"
-
-#include "intel_be_device.h"
-
-struct pipe_screen *intel_create_screen(int drmFD, int pciID);
-struct pipe_context *intel_create_context(struct pipe_screen *screen);
-
-#endif
diff --git a/src/gallium/winsys/drm/intel/egl/intel_context.c b/src/gallium/winsys/drm/intel/egl/intel_context.c
deleted file mode 100644 (file)
index 57e5ff7..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-
-#include "i915simple/i915_screen.h"
-
-#include "intel_be_device.h"
-#include "intel_be_context.h"
-
-#include "pipe/p_defines.h"
-#include "pipe/p_context.h"
-
-#include "intel_api.h"
-
-struct intel_context
-{
-       struct intel_be_context base;
-
-       /* stuff */
-};
-
-/*
- * Hardware lock functions.
- * Doesn't do anything in EGL
- */
-
-static void
-intel_lock_hardware(struct intel_be_context *context)
-{
-       (void)context;
-}
-
-static void
-intel_unlock_hardware(struct intel_be_context *context)
-{
-       (void)context;
-}
-
-static boolean
-intel_locked_hardware(struct intel_be_context *context)
-{
-       (void)context;
-       return FALSE;
-}
-
-
-/*
- * Misc functions.
- */
-static void
-intel_destroy_be_context(struct i915_winsys *winsys)
-{
-       struct intel_context *intel = (struct intel_context *)winsys;
-
-       intel_be_destroy_context(&intel->base);
-       free(intel);
-}
-
-struct pipe_context *
-intel_create_context(struct pipe_screen *screen)
-{
-       struct intel_context *intel;
-       struct pipe_context *pipe;
-       struct intel_be_device *device = (struct intel_be_device *)screen->winsys;
-
-       intel = (struct intel_context *)malloc(sizeof(*intel));
-       memset(intel, 0, sizeof(*intel));
-
-       intel->base.hardware_lock = intel_lock_hardware;
-       intel->base.hardware_unlock = intel_unlock_hardware;
-       intel->base.hardware_locked = intel_locked_hardware;
-
-       intel_be_init_context(&intel->base, device);
-
-       intel->base.base.destroy = intel_destroy_be_context;
-
-#if 0
-       pipe = intel_create_softpipe(intel, screen->winsys);
-#else
-       pipe = i915_create_context(screen, &device->base, &intel->base.base);
-#endif
-
-       pipe->priv = intel;
-
-       return pipe;
-}
diff --git a/src/gallium/winsys/drm/intel/egl/intel_device.c b/src/gallium/winsys/drm/intel/egl/intel_device.c
deleted file mode 100644 (file)
index 6b28140..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-
-#include <stdio.h>
-#include "pipe/p_defines.h"
-#include "intel_be_device.h"
-#include "i915simple/i915_screen.h"
-
-#include "intel_api.h"
-
-struct intel_device
-{
-       struct intel_be_device base;
-
-       int deviceID;
-};
-
-static void
-intel_destroy_winsys(struct pipe_winsys *winsys)
-{
-       struct intel_device *dev = (struct intel_device *)winsys;
-
-       intel_be_destroy_device(&dev->base);
-
-       free(dev);
-}
-
-struct pipe_screen *
-intel_create_screen(int drmFD, int deviceID)
-{
-       struct intel_device *dev;
-       struct pipe_screen *screen;
-
-       /* Allocate the private area */
-       dev = malloc(sizeof(*dev));
-       if (!dev)
-               return NULL;
-       memset(dev, 0, sizeof(*dev));
-
-       dev->deviceID = deviceID;
-
-       intel_be_init_device(&dev->base, drmFD, deviceID);
-
-       /* we need to hock our own destroy function in here */
-       dev->base.base.destroy = intel_destroy_winsys;
-
-       screen = i915_create_screen(&dev->base.base, deviceID);
-
-       return screen;
-}
index b25fc258f45e06b099366673480f96a6f125afa8..7a85a3f149823fdf990b1b89b8b87f9a2aeede4e 100644 (file)
@@ -6,7 +6,8 @@ LIBNAME = inteldrm
 C_SOURCES = \
        intel_be_batchbuffer.c \
        intel_be_context.c \
-       intel_be_device.c
+       intel_be_device.c \
+       intel_be_api.c
 
 
 include ./Makefile.template
diff --git a/src/gallium/winsys/drm/intel/gem/intel_be_api.c b/src/gallium/winsys/drm/intel/gem/intel_be_api.c
new file mode 100644 (file)
index 0000000..6cffed5
--- /dev/null
@@ -0,0 +1,12 @@
+
+#include "intel_be_api.h"
+
+struct drm_api drm_api_hocks =
+{
+       /* intel_be_context.c */
+       .create_context = intel_be_create_context,
+       /* intel_be_screen.c */
+       .create_screen = intel_be_create_screen,
+       .buffer_from_handle = intel_be_buffer_from_handle,
+       .handle_from_buffer = intel_be_handle_from_buffer,
+};
diff --git a/src/gallium/winsys/drm/intel/gem/intel_be_api.h b/src/gallium/winsys/drm/intel/gem/intel_be_api.h
new file mode 100644 (file)
index 0000000..73e458d
--- /dev/null
@@ -0,0 +1,14 @@
+
+#ifndef _INTEL_BE_API_H_
+#define _INTEL_BE_API_H_
+
+#include "pipe/p_compiler.h"
+
+#include "state_tracker/drm_api.h"
+
+#include "intel_be_device.h"
+
+struct pipe_screen *intel_be_create_screen(int drmFD, int pciID);
+struct pipe_context *intel_be_create_context(struct pipe_screen *screen);
+
+#endif
index 95e761d78d0f8050010992909c43ef5d4656e007..bb6f1b916c270ded609372c804f87de07daeda17 100644 (file)
@@ -1,10 +1,14 @@
 
+#include "pipe/p_screen.h"
+
 #include "intel_be_device.h"
 #include "intel_be_context.h"
 #include "intel_be_batchbuffer.h"
 
 #include "i915_drm.h"
 
+#include "intel_be_api.h"
+
 static struct i915_batchbuffer *
 intel_be_batch_get(struct i915_winsys *sws)
 {
@@ -57,6 +61,21 @@ intel_be_batch_flush(struct i915_winsys *sws,
        intel_be_batchbuffer_flush(intel->batch, f);
 }
 
+
+/*
+ * Misc functions.
+ */
+
+static void
+intel_be_destroy_context(struct i915_winsys *winsys)
+{
+       struct intel_be_context *intel = intel_be_context(winsys);
+
+       intel_be_batchbuffer_free(intel->batch);
+
+       free(intel);
+}
+
 boolean
 intel_be_init_context(struct intel_be_context *intel, struct intel_be_device *device)
 {
@@ -68,13 +87,32 @@ intel_be_init_context(struct intel_be_context *intel, struct intel_be_device *de
        intel->base.batch_reloc = intel_be_batch_reloc;
        intel->base.batch_flush = intel_be_batch_flush;
 
+       intel->base.destroy = intel_be_destroy_context;
+
        intel->batch = intel_be_batchbuffer_alloc(intel);
 
        return true;
 }
 
-void
-intel_be_destroy_context(struct intel_be_context *intel)
+struct pipe_context *
+intel_be_create_context(struct pipe_screen *screen)
 {
-       intel_be_batchbuffer_free(intel->batch);
+       struct intel_be_context *intel;
+       struct pipe_context *pipe;
+       struct intel_be_device *device = intel_be_device(screen->winsys);
+
+       intel = (struct intel_be_context *)malloc(sizeof(*intel));
+       memset(intel, 0, sizeof(*intel));
+
+       intel_be_init_context(intel, device);
+
+#if 0
+       pipe = intel_create_softpipe(intel, screen->winsys);
+#else
+       pipe = i915_create_context(screen, &device->base, &intel->base);
+#endif
+
+       pipe->priv = intel;
+
+       return pipe;
 }
index 9cee1a4e52bef4352ca801c2a03d5eff52e3e6a4..5a369669c0d672916b6ed63127a732d070ab4575 100644 (file)
@@ -11,15 +11,6 @@ struct intel_be_context
 
        struct intel_be_device *device;
        struct intel_be_batchbuffer *batch;
-
-       /*
-        * Hardware lock functions.
-        *
-        * Needs to be filled in by the winsys.
-        */
-       void (*hardware_lock)(struct intel_be_context *context);
-       void (*hardware_unlock)(struct intel_be_context *context);
-       boolean (*hardware_locked)(struct intel_be_context *context);
 };
 
 static INLINE struct intel_be_context *
@@ -37,12 +28,4 @@ boolean
 intel_be_init_context(struct intel_be_context *intel,
                      struct intel_be_device *device);
 
-/**
- * Destroy a intel_be_context.
- *
- * Does not free the struct that is up to the winsys.
- */
-void
-intel_be_destroy_context(struct intel_be_context *intel);
-
 #endif
index 82c1cb2f32ac532f06c3f57b5cbfb80ede30303d..a2163a1e6d98994767e5f9e8cd6db5553ed1443a 100644 (file)
 
 #include "i915simple/i915_screen.h"
 
-
-/**
- *  Turn a pipe winsys into an intel/pipe winsys:
- */
-static INLINE struct intel_be_device *
-intel_be_device(struct pipe_winsys *winsys)
-{
-       return (struct intel_be_device *)winsys;
-}
+#include "intel_be_api.h"
 
 /*
  * Buffer
@@ -233,10 +225,21 @@ intel_be_fence_finish(struct pipe_winsys *sws,
  * Misc functions
  */
 
+static void
+intel_be_destroy_winsys(struct pipe_winsys *winsys)
+{
+       struct intel_be_device *dev = intel_be_device(winsys);
+
+       drm_intel_bufmgr_destroy(dev->pools.gem);
+
+       free(dev);
+}
+
 boolean
 intel_be_init_device(struct intel_be_device *dev, int fd, unsigned id)
 {
        dev->fd = fd;
+       dev->id = id;
        dev->max_batch_size = 16 * 4096;
        dev->max_vertex_size = 128 * 4096;
 
@@ -253,13 +256,28 @@ intel_be_init_device(struct intel_be_device *dev, int fd, unsigned id)
        dev->base.fence_signalled = intel_be_fence_signalled;
        dev->base.fence_finish = intel_be_fence_finish;
 
+       dev->base.destroy = intel_be_destroy_winsys;
+
        dev->pools.gem = drm_intel_bufmgr_gem_init(dev->fd, dev->max_batch_size);
 
        return true;
 }
 
-void
-intel_be_destroy_device(struct intel_be_device *dev)
+struct pipe_screen *
+intel_be_create_screen(int drmFD, int deviceID)
 {
-       drm_intel_bufmgr_destroy(dev->pools.gem);
+       struct intel_be_device *dev;
+       struct pipe_screen *screen;
+
+       /* Allocate the private area */
+       dev = malloc(sizeof(*dev));
+       if (!dev)
+               return NULL;
+       memset(dev, 0, sizeof(*dev));
+
+       intel_be_init_device(dev, drmFD, deviceID);
+
+       screen = i915_create_screen(&dev->base, deviceID);
+
+       return screen;
 }
index f06890163cc55f4985ca99a038daa8384520471d..c4837e65fac0cc353ca00fca7e9cec9b68368dd3 100644 (file)
@@ -18,6 +18,8 @@ struct intel_be_device
 
        int fd; /**< Drm file discriptor */
 
+       unsigned id;
+
        size_t max_batch_size;
        size_t max_vertex_size;
 
@@ -26,12 +28,15 @@ struct intel_be_device
        } pools;
 };
 
+static INLINE struct intel_be_device *
+intel_be_device(struct pipe_winsys *winsys)
+{
+       return (struct intel_be_device *)winsys;
+}
+
 boolean
 intel_be_init_device(struct intel_be_device *device, int fd, unsigned id);
 
-void
-intel_be_destroy_device(struct intel_be_device *dev);
-
 /*
  * Buffer
  */