From f6e8963bb152166c28dae896a0c8c83ce554f987 Mon Sep 17 00:00:00 2001
From: Jakob Bornecrantz <jakob@tungstengraphics.com>
Date: Fri, 4 Jul 2008 19:20:08 +0200
Subject: i915: Clean up intel_egl.c a bit

---
 src/gallium/winsys/egl_drm/intel/intel_egl.c | 24 +++---------------------
 1 file changed, 3 insertions(+), 21 deletions(-)

(limited to 'src/gallium/winsys/egl_drm')

diff --git a/src/gallium/winsys/egl_drm/intel/intel_egl.c b/src/gallium/winsys/egl_drm/intel/intel_egl.c
index 6865bfa3d4..cc4fb247d5 100644
--- a/src/gallium/winsys/egl_drm/intel/intel_egl.c
+++ b/src/gallium/winsys/egl_drm/intel/intel_egl.c
@@ -33,8 +33,8 @@ egl_drm_create_device(int drmFD)
 	device->drmFD = drmFD;
 
 	if (!intel_init_driver(device)) {
-		printf("EGL: failed to initalize device\n");
 		free(device);
+		return NULL;
 	}
 
 	return device;
@@ -105,22 +105,9 @@ drm_add_modes_from_connector(_EGLScreen *screen, drmModeConnectorPtr connector)
 	}
 }
 
-static void
-print_modes(drmModeConnectorPtr connector)
-{
-	struct drm_mode_modeinfo *m;
-	int i;
-
-	for (i = 0; i < connector->count_modes; i++) {
-		m = &connector->modes[i];
-		printf("dfm %p %i %i %i\n", m, m->hdisplay, m->vdisplay, m->vrefresh);
-	}
-}
-
 static EGLBoolean
 drm_initialize(_EGLDriver *drv, EGLDisplay dpy, EGLint *major, EGLint *minor)
 {
-	printf("%s enter\n", __FUNCTION__);
 	_EGLDisplay *disp = _eglLookupDisplay(dpy);
 	struct drm_driver *drm_drv = (struct drm_driver *)drv;
 	struct drm_screen *screen = NULL;
@@ -490,10 +477,8 @@ drm_show_screen_surface_mesa(_EGLDriver *drv, EGLDisplay dpy,
 		DRM_BO_FLAG_NO_EVICT,
 		DRM_BO_HINT_DONT_FENCE, &scrn->buffer);
 
-	if (ret) {
-		printf("failed to create framebuffer (ret %d)\n", ret);
+	if (ret)
 		return EGL_FALSE;
-	}
 
 	prettyColors(drm_drv->device->drmFD, scrn->buffer.handle, pitch);
 
@@ -510,10 +495,8 @@ drm_show_screen_surface_mesa(_EGLDriver *drv, EGLDisplay dpy,
 		goto err_bo;
 
 	scrn->mode = drm_find_mode(scrn->connector, mode);
-	if (!scrn->mode) {
-		printf("oh noes, no matching mode found\n");
+	if (!scrn->mode)
 		goto err_fb;
-	}
 
 	ret = drmModeSetCrtc(
 			drm_drv->device->drmFD,
@@ -602,7 +585,6 @@ _EGLDriver *
 _eglMain(_EGLDisplay *dpy, const char *args)
 {
 	struct drm_driver *drm;
-	printf("%s enter\n", __FUNCTION__);
 
 	drm = (struct drm_driver *) calloc(1, sizeof(struct drm_driver));
 	if (!drm) {
-- 
cgit v1.2.3


From 74db8e9b3f354b5afa30f7cd52a511504693a3c8 Mon Sep 17 00:00:00 2001
From: Jakob Bornecrantz <jakob@aurora.(none)>
Date: Sat, 5 Jul 2008 14:04:02 +0200
Subject: i915: Fix haveDepth and haveStencil for visual in EGL

---
 src/gallium/winsys/egl_drm/intel/intel_egl.c | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'src/gallium/winsys/egl_drm')

diff --git a/src/gallium/winsys/egl_drm/intel/intel_egl.c b/src/gallium/winsys/egl_drm/intel/intel_egl.c
index cc4fb247d5..a008d952bf 100644
--- a/src/gallium/winsys/egl_drm/intel/intel_egl.c
+++ b/src/gallium/winsys/egl_drm/intel/intel_egl.c
@@ -224,7 +224,9 @@ visual_from_config(_EGLConfig *conf)
 	visual->doubleBufferMode = 1;
 
 	visual->depthBits = 24;
+	visual->haveDepthBuffer = visual->depthBits > 0;
 	visual->stencilBits = 8;
+	visual->haveStencilBuffer = visual->stencilBits > 0;
 
 	return visual;
 }
-- 
cgit v1.2.3


From b30fb6d54019c84174379a773121438ba943557a Mon Sep 17 00:00:00 2001
From: Jakob Bornecrantz <jakob@aurora.(none)>
Date: Sat, 5 Jul 2008 16:46:04 +0200
Subject: i915: Fix EGL version and name

---
 src/gallium/winsys/egl_drm/intel/intel_egl.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'src/gallium/winsys/egl_drm')

diff --git a/src/gallium/winsys/egl_drm/intel/intel_egl.c b/src/gallium/winsys/egl_drm/intel/intel_egl.c
index a008d952bf..e078b9eda1 100644
--- a/src/gallium/winsys/egl_drm/intel/intel_egl.c
+++ b/src/gallium/winsys/egl_drm/intel/intel_egl.c
@@ -171,7 +171,7 @@ drm_initialize(_EGLDriver *drv, EGLDisplay dpy, EGLint *major, EGLint *minor)
 	drv->Initialized = EGL_TRUE;
 
 	*major = 1;
-	*minor = 0;
+	*minor = 4;
 
 	return EGL_TRUE;
 }
@@ -610,6 +610,7 @@ _eglMain(_EGLDisplay *dpy, const char *args)
 	drm->base.API.SwapBuffers = drm_swap_buffers;
 
 	drm->base.ClientAPIsMask = EGL_OPENGL_BIT /*| EGL_OPENGL_ES_BIT*/;
+	drm->base.Name = "DRM/Gallium";
 
 	/* enable supported extensions */
 	drm->base.Extensions.MESA_screen_surface = EGL_TRUE;
-- 
cgit v1.2.3


From 1315f720ba80596b866103a7e153bfc2f2bd267b Mon Sep 17 00:00:00 2001
From: Jakob Bornecrantz <jakob@tungstengraphics.com>
Date: Mon, 7 Jul 2008 13:24:09 +0200
Subject: i915: Destruction of surface, context and device in EGL

---
 src/gallium/winsys/egl_drm/intel/intel_context.c | 14 +++++++++++
 src/gallium/winsys/egl_drm/intel/intel_egl.c     | 21 ++++++++++++----
 src/gallium/winsys/egl_drm/intel/intel_egl.h     |  8 +++++-
 src/gallium/winsys/egl_drm/intel/intel_screen.c  | 31 +++++++++++++++++++++---
 4 files changed, 65 insertions(+), 9 deletions(-)

(limited to 'src/gallium/winsys/egl_drm')

diff --git a/src/gallium/winsys/egl_drm/intel/intel_context.c b/src/gallium/winsys/egl_drm/intel/intel_context.c
index 7205fa4483..7513f3feef 100644
--- a/src/gallium/winsys/egl_drm/intel/intel_context.c
+++ b/src/gallium/winsys/egl_drm/intel/intel_context.c
@@ -178,6 +178,20 @@ intel_create_context(struct egl_drm_context *egl_context, const __GLcontextModes
 	return TRUE;
 }
 
+int
+intel_destroy_context(struct egl_drm_context *egl_context)
+{
+	struct intel_context *intel = egl_context->priv;
+
+	if (intel->intel_screen->dummy == intel)
+		intel->intel_screen->dummy = NULL;
+
+	st_destroy_context(intel->st);
+	intel_be_destroy_context(&intel->base);
+	free(intel);
+	return TRUE;
+}
+
 void
 intel_make_current(struct egl_drm_context *context, struct egl_drm_drawable *draw, struct egl_drm_drawable *read)
 {
diff --git a/src/gallium/winsys/egl_drm/intel/intel_egl.c b/src/gallium/winsys/egl_drm/intel/intel_egl.c
index e078b9eda1..9e12a024eb 100644
--- a/src/gallium/winsys/egl_drm/intel/intel_egl.c
+++ b/src/gallium/winsys/egl_drm/intel/intel_egl.c
@@ -32,7 +32,7 @@ egl_drm_create_device(int drmFD)
 	memset(device, 0, sizeof(*device));
 	device->drmFD = drmFD;
 
-	if (!intel_init_driver(device)) {
+	if (!intel_create_device(device)) {
 		free(device);
 		return NULL;
 	}
@@ -180,8 +180,15 @@ drm_initialize(_EGLDriver *drv, EGLDisplay dpy, EGLint *major, EGLint *minor)
 static EGLBoolean
 drm_terminate(_EGLDriver *drv, EGLDisplay dpy)
 {
-	/* TODO: clean up */
-	free(drv);
+	struct drm_driver *drm_drv = (struct drm_driver *)drv;
+
+	intel_destroy_device(drm_drv->device);
+
+	drmClose(drm_drv->device->drmFD);
+
+	free(drm_drv->device);
+	free(drm_drv);
+
 	return EGL_TRUE;
 }
 
@@ -303,6 +310,8 @@ drm_destroy_context(_EGLDriver *drv, EGLDisplay dpy, EGLContext context)
 	if (fc->base.IsBound) {
 		fc->base.DeletePending = EGL_TRUE;
 	} else {
+		intel_destroy_context(fc->context);
+		free(fc->context);
 		free(fc);
 	}
 	return EGL_TRUE;
@@ -322,6 +331,7 @@ drm_create_pixmap_surface(_EGLDriver *drv, EGLDisplay dpy, EGLConfig config, Nat
 	return EGL_NO_SURFACE;
 }
 
+
 static EGLSurface
 drm_create_pbuffer_surface(_EGLDriver *drv, EGLDisplay dpy, EGLConfig config,
                          const EGLint *attrib_list)
@@ -534,14 +544,15 @@ drm_destroy_surface(_EGLDriver *drv, EGLDisplay dpy, EGLSurface surface)
 	if (fs->base.IsBound) {
 		fs->base.DeletePending = EGL_TRUE;
 	} else {
+		intel_bind_frontbuffer(fs->drawable, NULL);
+		intel_destroy_drawable(fs->drawable);
+		free(fs->drawable);
 		free(fs);
 	}
 	return EGL_TRUE;
 }
 
 
-
-
 static EGLBoolean
 drm_make_current(_EGLDriver *drv, EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext context)
 {
diff --git a/src/gallium/winsys/egl_drm/intel/intel_egl.h b/src/gallium/winsys/egl_drm/intel/intel_egl.h
index 18e84e8eea..84b6c212bf 100644
--- a/src/gallium/winsys/egl_drm/intel/intel_egl.h
+++ b/src/gallium/winsys/egl_drm/intel/intel_egl.h
@@ -32,9 +32,15 @@ struct egl_drm_frontbuffer
 
 #include "GL/internal/glcore.h"
 
-int intel_init_driver(struct egl_drm_device *device);
+int intel_create_device(struct egl_drm_device *device);
+int intel_destroy_device(struct egl_drm_device *device);
+
 int intel_create_context(struct egl_drm_context *context, const __GLcontextModes *visual, void *sharedContextPrivate);
+int intel_destroy_context(struct egl_drm_context *context);
+
 int intel_create_drawable(struct egl_drm_drawable *drawable, const __GLcontextModes * visual);
+int intel_destroy_drawable(struct egl_drm_drawable *drawable);
+
 void intel_make_current(struct egl_drm_context *context, struct egl_drm_drawable *draw, struct egl_drm_drawable *read);
 void intel_swap_buffers(struct egl_drm_drawable *draw);
 void intel_bind_frontbuffer(struct egl_drm_drawable *draw, struct egl_drm_frontbuffer *front);
diff --git a/src/gallium/winsys/egl_drm/intel/intel_screen.c b/src/gallium/winsys/egl_drm/intel/intel_screen.c
index 2818b9676c..12f605e0be 100644
--- a/src/gallium/winsys/egl_drm/intel/intel_screen.c
+++ b/src/gallium/winsys/egl_drm/intel/intel_screen.c
@@ -41,7 +41,7 @@ extern const struct dri_extension card_extensions[];
 
 
 int
-intel_init_driver(struct egl_drm_device *device)
+intel_create_device(struct egl_drm_device *device)
 {
 	struct intel_screen *intel_screen;
 
@@ -66,6 +66,19 @@ intel_init_driver(struct egl_drm_device *device)
 	return TRUE;
 }
 
+int
+intel_destroy_device(struct egl_drm_device *device)
+{
+	struct intel_screen *intel_screen = (struct intel_screen *)device->priv;
+	
+	intel_be_destroy_device(&intel_screen->base);
+
+	free(intel_screen);
+	device->priv = NULL;
+
+	return TRUE;
+}
+
 int
 intel_create_drawable(struct egl_drm_drawable *drawable,
                       const __GLcontextModes * visual)
@@ -108,6 +121,18 @@ intel_create_drawable(struct egl_drm_drawable *drawable,
 		return GL_FALSE;
 	}
 
-   drawable->priv = (void *) intelfb;
-   return GL_TRUE;
+	drawable->priv = (void *) intelfb;
+	return GL_TRUE;
+}
+
+int
+intel_destroy_drawable(struct egl_drm_drawable *drawable)
+{
+	struct intel_framebuffer *intelfb = (struct intel_framebuffer *)drawable->priv;
+	drawable->priv = NULL;
+
+	assert(intelfb->stfb);
+	st_unreference_framebuffer(&intelfb->stfb);
+	free(intelfb);
+	return TRUE;
 }
-- 
cgit v1.2.3


From 687c8d8941bb62fdb4fbdbb0ff5f359851c290b5 Mon Sep 17 00:00:00 2001
From: Jakob Bornecrantz <jakob@tungstengraphics.com>
Date: Mon, 7 Jul 2008 14:29:11 +0200
Subject: i915: Fetch the real deviceID for EGL

---
 src/gallium/winsys/egl_drm/intel/intel_egl.c    | 30 +++++++++++++++++++++++--
 src/gallium/winsys/egl_drm/intel/intel_egl.h    |  5 +++++
 src/gallium/winsys/egl_drm/intel/intel_screen.c |  3 +--
 3 files changed, 34 insertions(+), 4 deletions(-)

(limited to 'src/gallium/winsys/egl_drm')

diff --git a/src/gallium/winsys/egl_drm/intel/intel_egl.c b/src/gallium/winsys/egl_drm/intel/intel_egl.c
index 9e12a024eb..ed96703e37 100644
--- a/src/gallium/winsys/egl_drm/intel/intel_egl.c
+++ b/src/gallium/winsys/egl_drm/intel/intel_egl.c
@@ -13,6 +13,7 @@
 #include "eglmode.h"
 #include "eglscreen.h"
 #include "eglsurface.h"
+#include "egllog.h"
 
 #include "intel_egl.h"
 
@@ -23,15 +24,38 @@
 
 #include "state_tracker/st_public.h"
 
-struct egl_drm_device* egl_drm_create_device(int drmFD);
+static void
+drm_get_device_id(struct egl_drm_device *device)
+{
+	char path[512];
+	FILE *file;
+
+	/* TODO get the real minor */
+	int minor = 0;
+
+	snprintf(path, sizeof(path), "/sys/class/drm/card%d/device/device", minor);
+	file = fopen(path, "r");
+	if (!file) {
+		_eglLog(_EGL_WARNING, "Could not retrive device ID\n");
+		return;
+	}
 
-struct egl_drm_device*
+	fgets(path, sizeof( path ), file);
+	sscanf(path, "%x", &device->deviceID);
+	fclose(file);
+}
+
+static struct egl_drm_device*
 egl_drm_create_device(int drmFD)
 {
 	struct egl_drm_device *device = malloc(sizeof(*device));
 	memset(device, 0, sizeof(*device));
 	device->drmFD = drmFD;
 
+	device->version = drmGetVersion(device->drmFD);
+
+	drm_get_device_id(device);
+
 	if (!intel_create_device(device)) {
 		free(device);
 		return NULL;
@@ -105,6 +129,7 @@ drm_add_modes_from_connector(_EGLScreen *screen, drmModeConnectorPtr connector)
 	}
 }
 
+
 static EGLBoolean
 drm_initialize(_EGLDriver *drv, EGLDisplay dpy, EGLint *major, EGLint *minor)
 {
@@ -183,6 +208,7 @@ drm_terminate(_EGLDriver *drv, EGLDisplay dpy)
 	struct drm_driver *drm_drv = (struct drm_driver *)drv;
 
 	intel_destroy_device(drm_drv->device);
+	drmFreeVersion(drm_drv->device->version);
 
 	drmClose(drm_drv->device->drmFD);
 
diff --git a/src/gallium/winsys/egl_drm/intel/intel_egl.h b/src/gallium/winsys/egl_drm/intel/intel_egl.h
index 84b6c212bf..1ee27e0847 100644
--- a/src/gallium/winsys/egl_drm/intel/intel_egl.h
+++ b/src/gallium/winsys/egl_drm/intel/intel_egl.h
@@ -2,10 +2,15 @@
 #ifndef _INTEL_EGL_H_
 #define _INTEL_EGL_H_
 
+#include <xf86drm.h>
+
 struct egl_drm_device
 {
 	void *priv;
 	int drmFD;
+
+	drmVersionPtr version;
+	int deviceID;
 };
 
 struct egl_drm_context
diff --git a/src/gallium/winsys/egl_drm/intel/intel_screen.c b/src/gallium/winsys/egl_drm/intel/intel_screen.c
index 12f605e0be..8e6d184440 100644
--- a/src/gallium/winsys/egl_drm/intel/intel_screen.c
+++ b/src/gallium/winsys/egl_drm/intel/intel_screen.c
@@ -53,8 +53,7 @@ intel_create_device(struct egl_drm_device *device)
 	device->priv = (void *)intel_screen;
 	intel_screen->device = device;
 
-	/** TODO JB: ugly hack */
-	intel_screen->deviceID = PCI_CHIP_I945_GM;
+	intel_screen->deviceID = device->deviceID;
 
 	intel_be_init_device(&intel_screen->base, device->drmFD, PCI_CHIP_I945_GM);
 
-- 
cgit v1.2.3


From 88b806a0697efa9f7fde6aa59530675908f7294d Mon Sep 17 00:00:00 2001
From: Jakob Bornecrantz <jakob@tungstengraphics.com>
Date: Mon, 7 Jul 2008 15:26:47 +0200
Subject: i915: More cleanup of display

---
 src/gallium/winsys/egl_drm/intel/intel_egl.c | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'src/gallium/winsys/egl_drm')

diff --git a/src/gallium/winsys/egl_drm/intel/intel_egl.c b/src/gallium/winsys/egl_drm/intel/intel_egl.c
index ed96703e37..4d7e0f4bd5 100644
--- a/src/gallium/winsys/egl_drm/intel/intel_egl.c
+++ b/src/gallium/winsys/egl_drm/intel/intel_egl.c
@@ -213,6 +213,8 @@ drm_terminate(_EGLDriver *drv, EGLDisplay dpy)
 	drmClose(drm_drv->device->drmFD);
 
 	free(drm_drv->device);
+
+	_eglCleanupDisplay(drv);
 	free(drm_drv);
 
 	return EGL_TRUE;
-- 
cgit v1.2.3


From 7420bc05a862db09b8d5f34a7760fa19b578b4d0 Mon Sep 17 00:00:00 2001
From: Jakob Bornecrantz <jakob@tungstengraphics.com>
Date: Mon, 7 Jul 2008 15:49:09 +0200
Subject: i915: Fix EGL make current

---
 src/gallium/winsys/egl_drm/intel/intel_egl.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

(limited to 'src/gallium/winsys/egl_drm')

diff --git a/src/gallium/winsys/egl_drm/intel/intel_egl.c b/src/gallium/winsys/egl_drm/intel/intel_egl.c
index 4d7e0f4bd5..98928979e7 100644
--- a/src/gallium/winsys/egl_drm/intel/intel_egl.c
+++ b/src/gallium/winsys/egl_drm/intel/intel_egl.c
@@ -593,12 +593,15 @@ drm_make_current(_EGLDriver *drv, EGLDisplay dpy, EGLSurface draw, EGLSurface re
 	if (!b)
 		return EGL_FALSE;
 
-	/* XXX this is where we'd do the hardware context switch */
-	(void) drawSurf;
-	(void) readSurf;
-	(void) ctx;
+	if (ctx) {
+		if (!drawSurf || !readSurf)
+			return EGL_FALSE;
+
+		intel_make_current(ctx->context, drawSurf->drawable, readSurf->drawable);
+	} else {
+		intel_make_current(NULL, NULL, NULL);
+	}
 
-	intel_make_current(ctx->context, drawSurf->drawable, readSurf->drawable);
 	return EGL_TRUE;
 }
 
-- 
cgit v1.2.3


From 3596339d31d05b7d5120290a7b866485c395b5f2 Mon Sep 17 00:00:00 2001
From: Jakob Bornecrantz <jakob@tungstengraphics.com>
Date: Mon, 7 Jul 2008 15:49:59 +0200
Subject: i915: Fix wrong pointer to cleanup

---
 src/gallium/winsys/egl_drm/intel/intel_egl.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/gallium/winsys/egl_drm')

diff --git a/src/gallium/winsys/egl_drm/intel/intel_egl.c b/src/gallium/winsys/egl_drm/intel/intel_egl.c
index 98928979e7..a476490b90 100644
--- a/src/gallium/winsys/egl_drm/intel/intel_egl.c
+++ b/src/gallium/winsys/egl_drm/intel/intel_egl.c
@@ -214,7 +214,7 @@ drm_terminate(_EGLDriver *drv, EGLDisplay dpy)
 
 	free(drm_drv->device);
 
-	_eglCleanupDisplay(drv);
+	_eglCleanupDisplay(_eglLookupDisplay(dpy));
 	free(drm_drv);
 
 	return EGL_TRUE;
-- 
cgit v1.2.3


From b13b1210c0174e4fd315bad3e6e18b6cbeeb1518 Mon Sep 17 00:00:00 2001
From: Jakob Bornecrantz <jakob@aurora.(none)>
Date: Tue, 8 Jul 2008 14:16:15 +0200
Subject: i915: Renamed intel_screen to intel_device

	The renameing makes more sense, why because:
	In egl you have a display/driver/device as the
	basis, and you have screens as outputs.
---
 src/gallium/winsys/egl_drm/intel/Makefile          |   2 +-
 src/gallium/winsys/egl_drm/intel/intel_context.c   |  12 +-
 src/gallium/winsys/egl_drm/intel/intel_context.h   |   4 +-
 src/gallium/winsys/egl_drm/intel/intel_device.c    | 137 +++++++++++++++++++++
 src/gallium/winsys/egl_drm/intel/intel_device.h    |  50 ++++++++
 src/gallium/winsys/egl_drm/intel/intel_screen.c    | 137 ---------------------
 src/gallium/winsys/egl_drm/intel/intel_screen.h    |  50 --------
 .../winsys/egl_drm/intel/intel_swapbuffers.c       |   2 +-
 8 files changed, 197 insertions(+), 197 deletions(-)
 create mode 100644 src/gallium/winsys/egl_drm/intel/intel_device.c
 create mode 100644 src/gallium/winsys/egl_drm/intel/intel_device.h
 delete mode 100644 src/gallium/winsys/egl_drm/intel/intel_screen.c
 delete mode 100644 src/gallium/winsys/egl_drm/intel/intel_screen.h

(limited to 'src/gallium/winsys/egl_drm')

diff --git a/src/gallium/winsys/egl_drm/intel/Makefile b/src/gallium/winsys/egl_drm/intel/Makefile
index 9c7ff065ff..e67b49f3ad 100644
--- a/src/gallium/winsys/egl_drm/intel/Makefile
+++ b/src/gallium/winsys/egl_drm/intel/Makefile
@@ -12,7 +12,7 @@ PIPE_DRIVERS = \
 DRIVER_SOURCES = \
 	intel_swapbuffers.c \
 	intel_context.c \
-	intel_screen.c \
+	intel_device.c \
 	intel_egl.c
 
 C_SOURCES = \
diff --git a/src/gallium/winsys/egl_drm/intel/intel_context.c b/src/gallium/winsys/egl_drm/intel/intel_context.c
index 7513f3feef..c2003f5e0e 100644
--- a/src/gallium/winsys/egl_drm/intel/intel_context.c
+++ b/src/gallium/winsys/egl_drm/intel/intel_context.c
@@ -27,7 +27,7 @@
 
 #include "i915simple/i915_screen.h"
 
-#include "intel_screen.h"
+#include "intel_device.h"
 #include "intel_context.h"
 #include "intel_batchbuffer.h"
 
@@ -147,13 +147,13 @@ int
 intel_create_context(struct egl_drm_context *egl_context, const __GLcontextModes *visual, void *sharedContextPrivate)
 {
 	struct intel_context *intel = CALLOC_STRUCT(intel_context);
-	struct intel_screen *screen = (struct intel_screen *)egl_context->device->priv;
+	struct intel_device *screen = (struct intel_device *)egl_context->device->priv;
 	struct pipe_context *pipe;
 	struct st_context *st_share = NULL;
 
 	egl_context->priv = intel;
 
-	intel->intel_screen = screen;
+	intel->intel_device = screen;
 	intel->egl_context = egl_context;
 	intel->egl_device = egl_context->device;
 
@@ -183,8 +183,8 @@ intel_destroy_context(struct egl_drm_context *egl_context)
 {
 	struct intel_context *intel = egl_context->priv;
 
-	if (intel->intel_screen->dummy == intel)
-		intel->intel_screen->dummy = NULL;
+	if (intel->intel_device->dummy == intel)
+		intel->intel_device->dummy = NULL;
 
 	st_destroy_context(intel->st);
 	intel_be_destroy_context(&intel->base);
@@ -220,7 +220,7 @@ intel_make_current(struct egl_drm_context *context, struct egl_drm_drawable *dra
 void
 intel_bind_frontbuffer(struct egl_drm_drawable *draw, struct egl_drm_frontbuffer *front)
 {
-	struct intel_screen *intelScreen = (struct intel_screen *)draw->device->priv;
+	struct intel_device *intelScreen = (struct intel_device *)draw->device->priv;
 	struct intel_framebuffer *draw_fb = (struct intel_framebuffer *)draw->priv;
 
 	if (draw_fb->front_buffer)
diff --git a/src/gallium/winsys/egl_drm/intel/intel_context.h b/src/gallium/winsys/egl_drm/intel/intel_context.h
index f05a213ff0..48f9e21b5d 100644
--- a/src/gallium/winsys/egl_drm/intel/intel_context.h
+++ b/src/gallium/winsys/egl_drm/intel/intel_context.h
@@ -47,7 +47,7 @@ struct intel_context
 
 	struct st_context *st;
 
-	struct intel_screen *intel_screen;
+	struct intel_device *intel_device;
 
 	/* new egl stuff */
 	struct egl_drm_device *egl_device;
@@ -64,7 +64,7 @@ struct intel_framebuffer
 {
 	struct st_framebuffer *stfb;
 
-	struct intel_screen *screen;
+	struct intel_device *screen;
 	struct _DriBufferObject *front_buffer;
 	struct egl_drm_frontbuffer *front;
 };
diff --git a/src/gallium/winsys/egl_drm/intel/intel_device.c b/src/gallium/winsys/egl_drm/intel/intel_device.c
new file mode 100644
index 0000000000..7496c1bb30
--- /dev/null
+++ b/src/gallium/winsys/egl_drm/intel/intel_device.c
@@ -0,0 +1,137 @@
+/**************************************************************************
+ *
+ * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ **************************************************************************/
+
+
+#include "utils.h"
+
+#include "state_tracker/st_public.h"
+#include "i915simple/i915_screen.h"
+
+#include "intel_context.h"
+#include "intel_device.h"
+#include "intel_batchbuffer.h"
+#include "intel_egl.h"
+
+
+extern const struct dri_extension card_extensions[];
+
+
+int
+intel_create_device(struct egl_drm_device *device)
+{
+	struct intel_device *intel_device;
+
+	/* Allocate the private area */
+	intel_device = CALLOC_STRUCT(intel_device);
+	if (!intel_device)
+		return FALSE;
+
+	device->priv = (void *)intel_device;
+	intel_device->device = device;
+
+	intel_device->deviceID = device->deviceID;
+
+	intel_be_init_device(&intel_device->base, device->drmFD, PCI_CHIP_I945_GM);
+
+	intel_device->pipe = i915_create_screen(&intel_device->base.base, intel_device->deviceID);
+
+	/* hack */
+	driInitExtensions(NULL, card_extensions, GL_FALSE);
+
+	return TRUE;
+}
+
+int
+intel_destroy_device(struct egl_drm_device *device)
+{
+	struct intel_device *intel_device = (struct intel_device *)device->priv;
+	
+	intel_be_destroy_device(&intel_device->base);
+
+	free(intel_device);
+	device->priv = NULL;
+
+	return TRUE;
+}
+
+int
+intel_create_drawable(struct egl_drm_drawable *drawable,
+                      const __GLcontextModes * visual)
+{
+	enum pipe_format colorFormat, depthFormat, stencilFormat;
+	struct intel_framebuffer *intelfb = CALLOC_STRUCT(intel_framebuffer);
+
+	if (!intelfb)
+		return GL_FALSE;
+
+	intelfb->screen = drawable->device->priv;
+
+	if (visual->redBits == 5)
+		colorFormat = PIPE_FORMAT_R5G6B5_UNORM;
+	else
+		colorFormat = PIPE_FORMAT_A8R8G8B8_UNORM;
+
+	if (visual->depthBits == 16)
+		depthFormat = PIPE_FORMAT_Z16_UNORM;
+	else if (visual->depthBits == 24)
+		depthFormat = PIPE_FORMAT_S8Z24_UNORM;
+	else
+		depthFormat = PIPE_FORMAT_NONE;
+
+	if (visual->stencilBits == 8)
+		stencilFormat = PIPE_FORMAT_S8Z24_UNORM;
+	else
+		stencilFormat = PIPE_FORMAT_NONE;
+
+	intelfb->stfb = st_create_framebuffer(visual,
+			colorFormat,
+			depthFormat,
+			stencilFormat,
+			drawable->w,
+			drawable->h,
+			(void*) intelfb);
+
+	if (!intelfb->stfb) {
+		free(intelfb);
+		return GL_FALSE;
+	}
+
+	drawable->priv = (void *) intelfb;
+	return GL_TRUE;
+}
+
+int
+intel_destroy_drawable(struct egl_drm_drawable *drawable)
+{
+	struct intel_framebuffer *intelfb = (struct intel_framebuffer *)drawable->priv;
+	drawable->priv = NULL;
+
+	assert(intelfb->stfb);
+	st_unreference_framebuffer(&intelfb->stfb);
+	free(intelfb);
+	return TRUE;
+}
diff --git a/src/gallium/winsys/egl_drm/intel/intel_device.h b/src/gallium/winsys/egl_drm/intel/intel_device.h
new file mode 100644
index 0000000000..2f9d4f887e
--- /dev/null
+++ b/src/gallium/winsys/egl_drm/intel/intel_device.h
@@ -0,0 +1,50 @@
+/**************************************************************************
+ *
+ * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ **************************************************************************/
+
+#ifndef _INTEL_SCREEN_H_
+#define _INTEL_SCREEN_H_
+
+#include "intel_drm/intel_be_device.h"
+
+#include "pipe/p_compiler.h"
+
+struct pipe_screen;
+struct egl_drm_device;
+struct intel_context;
+
+struct intel_device
+{
+	struct intel_be_device base;
+	struct pipe_screen *pipe;
+
+	int deviceID;
+	struct egl_drm_device *device;
+
+	struct intel_context *dummy;
+};
+
+#endif
diff --git a/src/gallium/winsys/egl_drm/intel/intel_screen.c b/src/gallium/winsys/egl_drm/intel/intel_screen.c
deleted file mode 100644
index 8e6d184440..0000000000
--- a/src/gallium/winsys/egl_drm/intel/intel_screen.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-
-#include "utils.h"
-
-#include "state_tracker/st_public.h"
-#include "i915simple/i915_screen.h"
-
-#include "intel_context.h"
-#include "intel_screen.h"
-#include "intel_batchbuffer.h"
-#include "intel_egl.h"
-
-
-extern const struct dri_extension card_extensions[];
-
-
-int
-intel_create_device(struct egl_drm_device *device)
-{
-	struct intel_screen *intel_screen;
-
-	/* Allocate the private area */
-	intel_screen = CALLOC_STRUCT(intel_screen);
-	if (!intel_screen)
-		return FALSE;
-
-	device->priv = (void *)intel_screen;
-	intel_screen->device = device;
-
-	intel_screen->deviceID = device->deviceID;
-
-	intel_be_init_device(&intel_screen->base, device->drmFD, PCI_CHIP_I945_GM);
-
-	intel_screen->pipe = i915_create_screen(&intel_screen->base.base, intel_screen->deviceID);
-
-	/* hack */
-	driInitExtensions(NULL, card_extensions, GL_FALSE);
-
-	return TRUE;
-}
-
-int
-intel_destroy_device(struct egl_drm_device *device)
-{
-	struct intel_screen *intel_screen = (struct intel_screen *)device->priv;
-	
-	intel_be_destroy_device(&intel_screen->base);
-
-	free(intel_screen);
-	device->priv = NULL;
-
-	return TRUE;
-}
-
-int
-intel_create_drawable(struct egl_drm_drawable *drawable,
-                      const __GLcontextModes * visual)
-{
-	enum pipe_format colorFormat, depthFormat, stencilFormat;
-	struct intel_framebuffer *intelfb = CALLOC_STRUCT(intel_framebuffer);
-
-	if (!intelfb)
-		return GL_FALSE;
-
-	intelfb->screen = drawable->device->priv;
-
-	if (visual->redBits == 5)
-		colorFormat = PIPE_FORMAT_R5G6B5_UNORM;
-	else
-		colorFormat = PIPE_FORMAT_A8R8G8B8_UNORM;
-
-	if (visual->depthBits == 16)
-		depthFormat = PIPE_FORMAT_Z16_UNORM;
-	else if (visual->depthBits == 24)
-		depthFormat = PIPE_FORMAT_S8Z24_UNORM;
-	else
-		depthFormat = PIPE_FORMAT_NONE;
-
-	if (visual->stencilBits == 8)
-		stencilFormat = PIPE_FORMAT_S8Z24_UNORM;
-	else
-		stencilFormat = PIPE_FORMAT_NONE;
-
-	intelfb->stfb = st_create_framebuffer(visual,
-			colorFormat,
-			depthFormat,
-			stencilFormat,
-			drawable->w,
-			drawable->h,
-			(void*) intelfb);
-
-	if (!intelfb->stfb) {
-		free(intelfb);
-		return GL_FALSE;
-	}
-
-	drawable->priv = (void *) intelfb;
-	return GL_TRUE;
-}
-
-int
-intel_destroy_drawable(struct egl_drm_drawable *drawable)
-{
-	struct intel_framebuffer *intelfb = (struct intel_framebuffer *)drawable->priv;
-	drawable->priv = NULL;
-
-	assert(intelfb->stfb);
-	st_unreference_framebuffer(&intelfb->stfb);
-	free(intelfb);
-	return TRUE;
-}
diff --git a/src/gallium/winsys/egl_drm/intel/intel_screen.h b/src/gallium/winsys/egl_drm/intel/intel_screen.h
deleted file mode 100644
index 9b990b48e7..0000000000
--- a/src/gallium/winsys/egl_drm/intel/intel_screen.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef _INTEL_SCREEN_H_
-#define _INTEL_SCREEN_H_
-
-#include "intel_drm/intel_be_device.h"
-
-#include "pipe/p_compiler.h"
-
-struct pipe_screen;
-struct egl_drm_device;
-struct intel_context;
-
-struct intel_screen
-{
-	struct intel_be_device base;
-	struct pipe_screen *pipe;
-
-	int deviceID;
-	struct egl_drm_device *device;
-
-	struct intel_context *dummy;
-};
-
-#endif
diff --git a/src/gallium/winsys/egl_drm/intel/intel_swapbuffers.c b/src/gallium/winsys/egl_drm/intel/intel_swapbuffers.c
index bfff6f935f..86e4a0f92a 100644
--- a/src/gallium/winsys/egl_drm/intel/intel_swapbuffers.c
+++ b/src/gallium/winsys/egl_drm/intel/intel_swapbuffers.c
@@ -25,7 +25,7 @@
  *
  **************************************************************************/
 
-#include "intel_screen.h"
+#include "intel_device.h"
 #include "intel_context.h"
 #include "intel_batchbuffer.h"
 #include "intel_reg.h"
-- 
cgit v1.2.3


From 0c6efeb02beba32a35dda7c5d5a3086ca2d8cbc4 Mon Sep 17 00:00:00 2001
From: Jakob Bornecrantz <jakob@aurora.(none)>
Date: Tue, 8 Jul 2008 14:41:17 +0200
Subject: i915: Complete the screen -> device renaming

---
 src/gallium/winsys/egl_drm/intel/intel_context.c     | 14 +++++++-------
 src/gallium/winsys/egl_drm/intel/intel_context.h     |  2 +-
 src/gallium/winsys/egl_drm/intel/intel_device.c      |  2 +-
 src/gallium/winsys/egl_drm/intel/intel_swapbuffers.c |  2 +-
 4 files changed, 10 insertions(+), 10 deletions(-)

(limited to 'src/gallium/winsys/egl_drm')

diff --git a/src/gallium/winsys/egl_drm/intel/intel_context.c b/src/gallium/winsys/egl_drm/intel/intel_context.c
index c2003f5e0e..927addb834 100644
--- a/src/gallium/winsys/egl_drm/intel/intel_context.c
+++ b/src/gallium/winsys/egl_drm/intel/intel_context.c
@@ -147,13 +147,13 @@ int
 intel_create_context(struct egl_drm_context *egl_context, const __GLcontextModes *visual, void *sharedContextPrivate)
 {
 	struct intel_context *intel = CALLOC_STRUCT(intel_context);
-	struct intel_device *screen = (struct intel_device *)egl_context->device->priv;
+	struct intel_device *device = (struct intel_device *)egl_context->device->priv;
 	struct pipe_context *pipe;
 	struct st_context *st_share = NULL;
 
 	egl_context->priv = intel;
 
-	intel->intel_device = screen;
+	intel->intel_device = device;
 	intel->egl_context = egl_context;
 	intel->egl_device = egl_context->device;
 
@@ -161,19 +161,19 @@ intel_create_context(struct egl_drm_context *egl_context, const __GLcontextModes
 	intel->base.hardware_unlock = intel_unlock_hardware;
 	intel->base.hardware_locked = intel_locked_hardware;
 
-	intel_be_init_context(&intel->base, &screen->base);
+	intel_be_init_context(&intel->base, &device->base);
 
 #if 0
 	pipe = intel_create_softpipe(intel, screen->winsys);
 #else
-	pipe = i915_create_context(screen->pipe, &screen->base.base, &intel->base.base);
+	pipe = i915_create_context(device->pipe, &device->base.base, &intel->base.base);
 #endif
 
 	pipe->priv = intel;
 
 	intel->st = st_create_context(pipe, visual, st_share);
 
-	screen->dummy = intel;
+	device->dummy = intel;
 
 	return TRUE;
 }
@@ -220,7 +220,7 @@ intel_make_current(struct egl_drm_context *context, struct egl_drm_drawable *dra
 void
 intel_bind_frontbuffer(struct egl_drm_drawable *draw, struct egl_drm_frontbuffer *front)
 {
-	struct intel_device *intelScreen = (struct intel_device *)draw->device->priv;
+	struct intel_device *device = (struct intel_device *)draw->device->priv;
 	struct intel_framebuffer *draw_fb = (struct intel_framebuffer *)draw->priv;
 
 	if (draw_fb->front_buffer)
@@ -235,7 +235,7 @@ intel_bind_frontbuffer(struct egl_drm_drawable *draw, struct egl_drm_frontbuffer
 
 	draw_fb->front = front;
 
-	driGenBuffers(intelScreen->base.staticPool, "front", 1, &draw_fb->front_buffer, 0, 0, 0);
+	driGenBuffers(device->base.staticPool, "front", 1, &draw_fb->front_buffer, 0, 0, 0);
 	driBOSetReferenced(draw_fb->front_buffer, front->handle);
 
 	st_resize_framebuffer(draw_fb->stfb, draw->w, draw->h);
diff --git a/src/gallium/winsys/egl_drm/intel/intel_context.h b/src/gallium/winsys/egl_drm/intel/intel_context.h
index 48f9e21b5d..dfa4720b08 100644
--- a/src/gallium/winsys/egl_drm/intel/intel_context.h
+++ b/src/gallium/winsys/egl_drm/intel/intel_context.h
@@ -64,7 +64,7 @@ struct intel_framebuffer
 {
 	struct st_framebuffer *stfb;
 
-	struct intel_device *screen;
+	struct intel_device *device;
 	struct _DriBufferObject *front_buffer;
 	struct egl_drm_frontbuffer *front;
 };
diff --git a/src/gallium/winsys/egl_drm/intel/intel_device.c b/src/gallium/winsys/egl_drm/intel/intel_device.c
index 7496c1bb30..a601904ba4 100644
--- a/src/gallium/winsys/egl_drm/intel/intel_device.c
+++ b/src/gallium/winsys/egl_drm/intel/intel_device.c
@@ -88,7 +88,7 @@ intel_create_drawable(struct egl_drm_drawable *drawable,
 	if (!intelfb)
 		return GL_FALSE;
 
-	intelfb->screen = drawable->device->priv;
+	intelfb->device = drawable->device->priv;
 
 	if (visual->redBits == 5)
 		colorFormat = PIPE_FORMAT_R5G6B5_UNORM;
diff --git a/src/gallium/winsys/egl_drm/intel/intel_swapbuffers.c b/src/gallium/winsys/egl_drm/intel/intel_swapbuffers.c
index 86e4a0f92a..2edcbc79ff 100644
--- a/src/gallium/winsys/egl_drm/intel/intel_swapbuffers.c
+++ b/src/gallium/winsys/egl_drm/intel/intel_swapbuffers.c
@@ -69,7 +69,7 @@ intel_display_surface(struct egl_drm_drawable *draw,
 	//const int srcWidth = surf->width;
 	//const int srcHeight = surf->height;
 
-	intel = intel_fb->screen->dummy;
+	intel = intel_fb->device->dummy;
 	if (!intel) {
 		printf("No dummy context\n");
 		return;
-- 
cgit v1.2.3


From 1257bb9b130c9487a32e422a8ce8ddba2f14a568 Mon Sep 17 00:00:00 2001
From: Jakob Bornecrantz <jakob@aurora.(none)>
Date: Tue, 8 Jul 2008 14:44:23 +0200
Subject: i915: Use deviceID in EGL device create

---
 src/gallium/winsys/egl_drm/intel/intel_device.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/gallium/winsys/egl_drm')

diff --git a/src/gallium/winsys/egl_drm/intel/intel_device.c b/src/gallium/winsys/egl_drm/intel/intel_device.c
index a601904ba4..b9649cbec7 100644
--- a/src/gallium/winsys/egl_drm/intel/intel_device.c
+++ b/src/gallium/winsys/egl_drm/intel/intel_device.c
@@ -55,7 +55,7 @@ intel_create_device(struct egl_drm_device *device)
 
 	intel_device->deviceID = device->deviceID;
 
-	intel_be_init_device(&intel_device->base, device->drmFD, PCI_CHIP_I945_GM);
+	intel_be_init_device(&intel_device->base, device->drmFD, intel_device->deviceID);
 
 	intel_device->pipe = i915_create_screen(&intel_device->base.base, intel_device->deviceID);
 
-- 
cgit v1.2.3


From 2e7e1837512c1959a97f51903a770cf182fc9820 Mon Sep 17 00:00:00 2001
From: Jakob Bornecrantz <jakob@aurora.(none)>
Date: Tue, 8 Jul 2008 16:54:22 +0200
Subject: i915: Takedown EGL screen

---
 src/gallium/winsys/egl_drm/intel/intel_egl.c | 81 ++++++++++++++++++++++++----
 1 file changed, 71 insertions(+), 10 deletions(-)

(limited to 'src/gallium/winsys/egl_drm')

diff --git a/src/gallium/winsys/egl_drm/intel/intel_egl.c b/src/gallium/winsys/egl_drm/intel/intel_egl.c
index a476490b90..55f4d92afb 100644
--- a/src/gallium/winsys/egl_drm/intel/intel_egl.c
+++ b/src/gallium/winsys/egl_drm/intel/intel_egl.c
@@ -24,6 +24,8 @@
 
 #include "state_tracker/st_public.h"
 
+#define MAX_SCREENS 16
+
 static void
 drm_get_device_id(struct egl_drm_device *device)
 {
@@ -66,11 +68,17 @@ egl_drm_create_device(int drmFD)
 
 __GLcontextModes* _gl_context_modes_create( unsigned count, size_t minimum_size );
 
+struct drm_screen;
+
 struct drm_driver
 {
 	_EGLDriver base;  /* base class/object */
 
 	drmModeResPtr res;
+
+	struct drm_screen *screens[MAX_SCREENS];
+	size_t count_screens;
+
 	struct egl_drm_device *device;
 };
 
@@ -92,17 +100,26 @@ struct drm_screen
 {
 	_EGLScreen base;
 
-	/* backing buffer and crtc */
+	/* currently only support one connector */
+	drmModeConnectorPtr connector;
+	uint32_t connectorID;
+
+	/* Has this screen been shown */
+	int shown;
+
+	/* Surface that is currently attached to this screen */
+	struct drm_surface *surf;
+
+	/* backing buffer */
 	drmBO buffer;
+
+	/* framebuffer */
 	drmModeFBPtr fb;
 	uint32_t fbID;
-	drmModeCrtcPtr crtc;
 
-	/* currently only support one connector */
-	drmModeConnectorPtr connector;
-	drmModeEncoderPtr encoder;
-	uint32_t connectorID;
-	uint32_t encoderID;
+	/* crtc and mode used */
+	drmModeCrtcPtr crtc;
+	uint32_t crtcID;
 
 	struct drm_mode_modeinfo *mode;
 
@@ -139,6 +156,7 @@ drm_initialize(_EGLDriver *drv, EGLDisplay dpy, EGLint *major, EGLint *minor)
 	drmModeConnectorPtr connector = NULL;
 	drmModeResPtr res = NULL;
 	unsigned count_connectors = 0;
+	int num_screens = 0;
 
 	EGLint i;
 	int fd;
@@ -159,13 +177,13 @@ drm_initialize(_EGLDriver *drv, EGLDisplay dpy, EGLint *major, EGLint *minor)
 	if (res)
 		count_connectors = res->count_connectors;
 
-	for(i = 0; i < count_connectors; i++) {
+	for(i = 0; i < count_connectors && i < MAX_SCREENS; i++) {
 		connector = drmModeGetConnector(fd, res->connectors[i]);
 
 		if (!connector)
 			continue;
 
-		if (connector->connection == DRM_MODE_DISCONNECTED) {
+		if (connector->connection != DRM_MODE_CONNECTED) {
 			drmModeFreeConnector(connector);
 			continue;
 		}
@@ -177,7 +195,9 @@ drm_initialize(_EGLDriver *drv, EGLDisplay dpy, EGLint *major, EGLint *minor)
 		_eglInitScreen(&screen->base);
 		_eglAddScreen(disp, &screen->base);
 		drm_add_modes_from_connector(&screen->base, connector);
+		drm_drv->screens[num_screens++] = screen;
 	}
+	drm_drv->count_screens = num_screens;
 
 	/* for now we only have one config */
 	_EGLConfig *config = calloc(1, sizeof(*config));
@@ -201,15 +221,52 @@ drm_initialize(_EGLDriver *drv, EGLDisplay dpy, EGLint *major, EGLint *minor)
 	return EGL_TRUE;
 }
 
+static void
+drm_takedown_shown_screen(_EGLDriver *drv, struct drm_screen *screen)
+{
+	struct drm_driver *drm_drv = (struct drm_driver *)drv;
+
+	intel_bind_frontbuffer(screen->surf->drawable, NULL);
+	screen->surf = NULL;
+
+	drmModeSetCrtc(
+		drm_drv->device->drmFD,
+		drm_drv->res->crtcs[1],
+		0, // FD
+		0, 0,
+		NULL, 0, // List of output ids
+		NULL);
+
+	drmModeRmFB(drm_drv->device->drmFD, screen->fbID);
+	drmModeFreeFB(screen->fb);
+	screen->fb = NULL;
+
+	drmBOUnreference(drm_drv->device->drmFD, &screen->buffer);
+
+	screen->shown = 0;
+}
 
 static EGLBoolean
 drm_terminate(_EGLDriver *drv, EGLDisplay dpy)
 {
 	struct drm_driver *drm_drv = (struct drm_driver *)drv;
+	struct drm_screen *screen;
+	int i = 0;
 
 	intel_destroy_device(drm_drv->device);
 	drmFreeVersion(drm_drv->device->version);
 
+	for (i = 0; i < drm_drv->count_screens; i++) {
+		screen = drm_drv->screens[i];
+
+		if (screen->shown)
+			drm_takedown_shown_screen(drv, screen);
+
+		drmModeFreeConnector(screen->connector);
+		_eglDestroyScreen(&screen->base);
+		drm_drv->screens[i] = NULL;
+	}
+
 	drmClose(drm_drv->device->drmFD);
 
 	free(drm_drv->device);
@@ -507,7 +564,8 @@ drm_show_screen_surface_mesa(_EGLDriver *drv, EGLDisplay dpy,
 	size_t size = mode->Height * pitch;
 	int ret;
 
-	/* TODO if allready shown take down */
+	if (scrn->shown)
+		drm_takedown_shown_screen(drv, scrn);
 
 	ret = drmBOCreate(drm_drv->device->drmFD, size, 0, 0,
 		DRM_BO_FLAG_READ |
@@ -552,8 +610,11 @@ drm_show_screen_surface_mesa(_EGLDriver *drv, EGLDisplay dpy,
 	scrn->front.width = mode->Width;
 	scrn->front.height = mode->Height;
 
+	scrn->surf = surf;
 	intel_bind_frontbuffer(surf->drawable, &scrn->front);
 
+	scrn->shown = 1;
+
 	return EGL_TRUE;
 
 err_fb:
-- 
cgit v1.2.3