Mesa (master): intel: Make gem export the drm_api_hocks

Jakob Bornecrantz wallbraker at kemper.freedesktop.org
Thu Feb 12 21:09:09 UTC 2009


Module: Mesa
Branch: master
Commit: 67fc3ace65419b0865253e3ef54b20abbca1dfb5
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=67fc3ace65419b0865253e3ef54b20abbca1dfb5

Author: Jakob Bornecrantz <wallbraker at gmail.com>
Date:   Mon Feb  2 01:30:05 2009 +0100

intel: Make gem export the drm_api_hocks

---

 src/gallium/winsys/drm/intel/egl/Makefile          |   13 +--
 src/gallium/winsys/drm/intel/egl/intel_api.c       |   10 ---
 src/gallium/winsys/drm/intel/egl/intel_api.h       |   14 ----
 src/gallium/winsys/drm/intel/egl/intel_context.c   |   83 --------------------
 src/gallium/winsys/drm/intel/egl/intel_device.c    |   48 -----------
 src/gallium/winsys/drm/intel/gem/Makefile          |    3 +-
 src/gallium/winsys/drm/intel/gem/intel_be_api.c    |   12 +++
 src/gallium/winsys/drm/intel/gem/intel_be_api.h    |   14 ++++
 .../winsys/drm/intel/gem/intel_be_context.c        |   44 ++++++++++-
 .../winsys/drm/intel/gem/intel_be_context.h        |   17 ----
 src/gallium/winsys/drm/intel/gem/intel_be_device.c |   42 +++++++---
 src/gallium/winsys/drm/intel/gem/intel_be_device.h |   11 ++-
 12 files changed, 112 insertions(+), 199 deletions(-)

diff --git a/src/gallium/winsys/drm/intel/egl/Makefile b/src/gallium/winsys/drm/intel/egl/Makefile
index 7147d89..c5217ad 100644
--- a/src/gallium/winsys/drm/intel/egl/Makefile
+++ b/src/gallium/winsys/drm/intel/egl/Makefile
@@ -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
index 5dc4a7b..0000000
--- a/src/gallium/winsys/drm/intel/egl/intel_api.c
+++ /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
index 8ec165a..0000000
--- a/src/gallium/winsys/drm/intel/egl/intel_api.h
+++ /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
index 57e5ff7..0000000
--- a/src/gallium/winsys/drm/intel/egl/intel_context.c
+++ /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
index 6b28140..0000000
--- a/src/gallium/winsys/drm/intel/egl/intel_device.c
+++ /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;
-}
diff --git a/src/gallium/winsys/drm/intel/gem/Makefile b/src/gallium/winsys/drm/intel/gem/Makefile
index b25fc25..7a85a3f 100644
--- a/src/gallium/winsys/drm/intel/gem/Makefile
+++ b/src/gallium/winsys/drm/intel/gem/Makefile
@@ -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
index 0000000..6cffed5
--- /dev/null
+++ b/src/gallium/winsys/drm/intel/gem/intel_be_api.c
@@ -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
index 0000000..73e458d
--- /dev/null
+++ b/src/gallium/winsys/drm/intel/gem/intel_be_api.h
@@ -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
diff --git a/src/gallium/winsys/drm/intel/gem/intel_be_context.c b/src/gallium/winsys/drm/intel/gem/intel_be_context.c
index 95e761d..bb6f1b9 100644
--- a/src/gallium/winsys/drm/intel/gem/intel_be_context.c
+++ b/src/gallium/winsys/drm/intel/gem/intel_be_context.c
@@ -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;
 }
diff --git a/src/gallium/winsys/drm/intel/gem/intel_be_context.h b/src/gallium/winsys/drm/intel/gem/intel_be_context.h
index 9cee1a4..5a36966 100644
--- a/src/gallium/winsys/drm/intel/gem/intel_be_context.h
+++ b/src/gallium/winsys/drm/intel/gem/intel_be_context.h
@@ -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
diff --git a/src/gallium/winsys/drm/intel/gem/intel_be_device.c b/src/gallium/winsys/drm/intel/gem/intel_be_device.c
index 82c1cb2..a2163a1 100644
--- a/src/gallium/winsys/drm/intel/gem/intel_be_device.c
+++ b/src/gallium/winsys/drm/intel/gem/intel_be_device.c
@@ -11,15 +11,7 @@
 
 #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;
 }
diff --git a/src/gallium/winsys/drm/intel/gem/intel_be_device.h b/src/gallium/winsys/drm/intel/gem/intel_be_device.h
index f068901..c4837e6 100644
--- a/src/gallium/winsys/drm/intel/gem/intel_be_device.h
+++ b/src/gallium/winsys/drm/intel/gem/intel_be_device.h
@@ -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
  */




More information about the mesa-commit mailing list