Mesa (gallium-drm-driver-descriptor): i965g: Move bootstrap code to targets

Jakob Bornecrantz wallbraker at kemper.freedesktop.org
Tue Jun 22 18:44:56 PDT 2010


Module: Mesa
Branch: gallium-drm-driver-descriptor
Commit: 41e0f6bc2f943a05766872d419e4398ddd37b42a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=41e0f6bc2f943a05766872d419e4398ddd37b42a

Author: Jakob Bornecrantz <jakob at vmware.com>
Date:   Fri Jun 18 19:07:26 2010 +0200

i965g: Move bootstrap code to targets

---

 src/gallium/drivers/i965/brw_public.h         |   13 +++++++++
 src/gallium/drivers/i965/brw_screen.c         |    3 +-
 src/gallium/drivers/i965/brw_winsys.h         |    6 ----
 src/gallium/targets/dri-i965/Makefile         |    5 ++-
 src/gallium/targets/dri-i965/SConscript       |    2 +
 src/gallium/targets/dri-i965/target.c         |   27 +++++++++++++++++-
 src/gallium/targets/egl-i965/Makefile         |    4 ++-
 src/gallium/targets/egl-i965/target.c         |   27 +++++++++++++++++-
 src/gallium/targets/xorg-i965/Makefile        |    3 +-
 src/gallium/targets/xorg-i965/intel_target.c  |   27 +++++++++++++++++-
 src/gallium/winsys/i965/drm/i965_drm_public.h |    9 ++++++
 src/gallium/winsys/i965/drm/i965_drm_winsys.c |   36 +++----------------------
 src/gallium/winsys/i965/drm/i965_drm_winsys.h |    2 -
 13 files changed, 113 insertions(+), 51 deletions(-)

diff --git a/src/gallium/drivers/i965/brw_public.h b/src/gallium/drivers/i965/brw_public.h
new file mode 100644
index 0000000..be2cd6b
--- /dev/null
+++ b/src/gallium/drivers/i965/brw_public.h
@@ -0,0 +1,13 @@
+
+#ifndef BRW_PUBLIC_H
+#define BRW_PUBLIC_H
+
+struct brw_winsys_screen;
+struct pipe_screen;
+
+/**
+ * Create brw AKA i965 pipe_screen.
+ */
+struct pipe_screen * brw_screen_create(struct brw_winsys_screen *bws);
+
+#endif
diff --git a/src/gallium/drivers/i965/brw_screen.c b/src/gallium/drivers/i965/brw_screen.c
index eb75427..bdfead7 100644
--- a/src/gallium/drivers/i965/brw_screen.c
+++ b/src/gallium/drivers/i965/brw_screen.c
@@ -34,6 +34,7 @@
 #include "brw_context.h"
 #include "brw_screen.h"
 #include "brw_winsys.h"
+#include "brw_public.h"
 #include "brw_debug.h"
 #include "brw_resource.h"
 
@@ -350,7 +351,7 @@ brw_destroy_screen(struct pipe_screen *screen)
  * Create a new brw_screen object
  */
 struct pipe_screen *
-brw_create_screen(struct brw_winsys_screen *sws)
+brw_screen_create(struct brw_winsys_screen *sws)
 {
    struct brw_screen *bscreen;
    struct brw_chipset chipset;
diff --git a/src/gallium/drivers/i965/brw_winsys.h b/src/gallium/drivers/i965/brw_winsys.h
index adb0006..a06f8bb 100644
--- a/src/gallium/drivers/i965/brw_winsys.h
+++ b/src/gallium/drivers/i965/brw_winsys.h
@@ -262,12 +262,6 @@ bo_reference(struct brw_winsys_buffer **ptr, struct brw_winsys_buffer *buf)
 }
 
 
-/**
- * Create brw pipe_screen.
- */
-struct pipe_screen *brw_create_screen(struct brw_winsys_screen *iws);
-
-
 
 /*************************************************************************
  * Cooperative dumping between winsys and driver.  TODO: make this
diff --git a/src/gallium/targets/dri-i965/Makefile b/src/gallium/targets/dri-i965/Makefile
index b068430..76350ca 100644
--- a/src/gallium/targets/dri-i965/Makefile
+++ b/src/gallium/targets/dri-i965/Makefile
@@ -8,10 +8,8 @@ PIPE_DRIVERS = \
 	$(TOP)/src/gallium/winsys/i965/drm/libi965drm.a \
 	$(TOP)/src/gallium/drivers/trace/libtrace.a \
 	$(TOP)/src/gallium/drivers/rbug/librbug.a \
-	$(TOP)/src/gallium/winsys/sw/drm/libswdrm.a \
 	$(TOP)/src/gallium/winsys/sw/wrapper/libwsw.a \
 	$(TOP)/src/gallium/drivers/softpipe/libsoftpipe.a \
-	$(TOP)/src/gallium/drivers/identity/libidentity.a \
 	$(TOP)/src/gallium/drivers/i965/libi965.a
 
 C_SOURCES = \
@@ -19,6 +17,9 @@ C_SOURCES = \
 	$(COMMON_GALLIUM_SOURCES) \
 	$(DRIVER_SOURCES)
 
+DRIVER_DEFINES = \
+	-DGALLIUM_SOFTPIPE
+
 include ../Makefile.dri
 
 DRI_LIB_DEPS += -ldrm_intel
diff --git a/src/gallium/targets/dri-i965/SConscript b/src/gallium/targets/dri-i965/SConscript
index 9e12c61..da1a865 100644
--- a/src/gallium/targets/dri-i965/SConscript
+++ b/src/gallium/targets/dri-i965/SConscript
@@ -8,6 +8,8 @@ env = drienv.Clone()
 
 env.ParseConfig('pkg-config --cflags --libs libdrm_intel')
 
+env.Append(CPPDEFINES = 'GALLIUM_SOFTPIPE')
+
 env.Prepend(LIBS = [
     st_dri,
     i965drm,
diff --git a/src/gallium/targets/dri-i965/target.c b/src/gallium/targets/dri-i965/target.c
index 9fe2227..36424c6 100644
--- a/src/gallium/targets/dri-i965/target.c
+++ b/src/gallium/targets/dri-i965/target.c
@@ -1,4 +1,27 @@
 
-#include "target-helpers/drm_api_compat.h"
+#include "target-helpers/inline_wrapper_sw_helper.h"
+#include "state_tracker/drm_driver.h"
+#include "i965/drm/i965_drm_public.h"
+#include "i965/brw_public.h"
 
-DRM_API_COMPAT_STRUCT("i965", "i915")
+static struct pipe_screen *
+create_screen(int fd)
+{
+   struct brw_winsys_screen *bws;
+   struct pipe_screen *screen;
+
+   bws = i965_drm_winsys_screen_create(fd);
+   if (!bws)
+      return NULL;
+
+   screen = brw_screen_create(bws);
+   if (!screen)
+      return NULL;
+
+   if (debug_get_bool_option("BRW_SOFTPIPE", FALSE))
+      screen = sw_screen_wrap(screen);
+
+   return screen;
+}
+
+DRM_DRIVER_DESCRIPTOR("i915", "i965", create_screen)
diff --git a/src/gallium/targets/egl-i965/Makefile b/src/gallium/targets/egl-i965/Makefile
index 5422004..fe30911 100644
--- a/src/gallium/targets/egl-i965/Makefile
+++ b/src/gallium/targets/egl-i965/Makefile
@@ -5,12 +5,14 @@ EGL_DRIVER_NAME = i965
 EGL_DRIVER_SOURCES = target.c
 EGL_DRIVER_LIBS = -ldrm_intel
 
+EGL_DRIVER_DEFINES = \
+	-DGALLIUM_SOFTPIPE
+
 EGL_DRIVER_PIPES = \
 	$(TOP)/src/gallium/winsys/i965/drm/libi965drm.a \
 	$(TOP)/src/gallium/drivers/trace/libtrace.a \
 	$(TOP)/src/gallium/drivers/rbug/librbug.a \
 	$(TOP)/src/gallium/drivers/i965/libi965.a \
-	$(TOP)/src/gallium/winsys/sw/drm/libswdrm.a \
 	$(TOP)/src/gallium/winsys/sw/wrapper/libwsw.a \
 	$(TOP)/src/gallium/drivers/softpipe/libsoftpipe.a
 
diff --git a/src/gallium/targets/egl-i965/target.c b/src/gallium/targets/egl-i965/target.c
index 2f97bce..ba1eead 100644
--- a/src/gallium/targets/egl-i965/target.c
+++ b/src/gallium/targets/egl-i965/target.c
@@ -1,7 +1,30 @@
 
-#include "target-helpers/drm_api_compat.h"
+#include "target-helpers/inline_wrapper_sw_helper.h"
+#include "state_tracker/drm_driver.h"
+#include "i965/drm/i965_drm_public.h"
+#include "i965/brw_public.h"
 
-DRM_API_COMPAT_STRUCT("i965", "i915")
+static struct pipe_screen *
+create_screen(int fd)
+{
+   struct brw_winsys_screen *bws;
+   struct pipe_screen *screen;
+
+   bws = i965_drm_winsys_screen_create(fd);
+   if (!bws)
+      return NULL;
+
+   screen = brw_screen_create(bws);
+   if (!screen)
+      return NULL;
+
+   if (debug_get_bool_option("BRW_SOFTPIPE", FALSE))
+      screen = sw_screen_wrap(screen);
+
+   return screen;
+}
+
+DRM_DRIVER_DESCRIPTOR("i915", "i965", create_screen)
 
 /* A poor man's --whole-archive for EGL drivers */
 void *_eglMain(void *);
diff --git a/src/gallium/targets/xorg-i965/Makefile b/src/gallium/targets/xorg-i965/Makefile
index b23a2de..eede9f2 100644
--- a/src/gallium/targets/xorg-i965/Makefile
+++ b/src/gallium/targets/xorg-i965/Makefile
@@ -8,7 +8,7 @@ C_SOURCES = \
 	intel_xorg.c
 
 DRIVER_DEFINES = \
-	-DHAVE_CONFIG_H
+	-DHAVE_CONFIG_H -DGALLIUM_SOFTPIPE
 
 DRIVER_LINKS = \
 	$(TOP)/src/gallium/state_trackers/xorg/libxorgtracker.a \
@@ -16,6 +16,7 @@ DRIVER_LINKS = \
 	$(TOP)/src/gallium/drivers/i965/libi965.a \
 	$(TOP)/src/gallium/drivers/trace/libtrace.a \
 	$(TOP)/src/gallium/drivers/rbug/librbug.a \
+	$(TOP)/src/gallium/winsys/sw/wrapper/libwsw.a \
 	$(TOP)/src/gallium/drivers/softpipe/libsoftpipe.a \
 	$(GALLIUM_AUXILIARIES) \
 	$(shell pkg-config --libs libdrm libdrm_intel)
diff --git a/src/gallium/targets/xorg-i965/intel_target.c b/src/gallium/targets/xorg-i965/intel_target.c
index 2b0f545..36424c6 100644
--- a/src/gallium/targets/xorg-i965/intel_target.c
+++ b/src/gallium/targets/xorg-i965/intel_target.c
@@ -1,4 +1,27 @@
 
-#include "target-helpers/drm_api_compat.h"
+#include "target-helpers/inline_wrapper_sw_helper.h"
+#include "state_tracker/drm_driver.h"
+#include "i965/drm/i965_drm_public.h"
+#include "i965/brw_public.h"
 
-DRM_API_COMPAT_STRUCT("i965g", "i915")
+static struct pipe_screen *
+create_screen(int fd)
+{
+   struct brw_winsys_screen *bws;
+   struct pipe_screen *screen;
+
+   bws = i965_drm_winsys_screen_create(fd);
+   if (!bws)
+      return NULL;
+
+   screen = brw_screen_create(bws);
+   if (!screen)
+      return NULL;
+
+   if (debug_get_bool_option("BRW_SOFTPIPE", FALSE))
+      screen = sw_screen_wrap(screen);
+
+   return screen;
+}
+
+DRM_DRIVER_DESCRIPTOR("i915", "i965", create_screen)
diff --git a/src/gallium/winsys/i965/drm/i965_drm_public.h b/src/gallium/winsys/i965/drm/i965_drm_public.h
new file mode 100644
index 0000000..2913b07
--- /dev/null
+++ b/src/gallium/winsys/i965/drm/i965_drm_public.h
@@ -0,0 +1,9 @@
+
+#ifndef I965_DRM_PUBLIC_H
+#define I965_DRM_PUBLIC_H
+
+struct brw_winsys_screen;
+
+struct brw_winsys_screen * i965_drm_winsys_screen_create(int drmFD);
+
+#endif
diff --git a/src/gallium/winsys/i965/drm/i965_drm_winsys.c b/src/gallium/winsys/i965/drm/i965_drm_winsys.c
index 124dc26..dfb3660 100644
--- a/src/gallium/winsys/i965/drm/i965_drm_winsys.c
+++ b/src/gallium/winsys/i965/drm/i965_drm_winsys.c
@@ -3,15 +3,9 @@
 #include "state_tracker/drm_api.h"
 
 #include "i965_drm_winsys.h"
+#include "i965_drm_public.h"
 #include "util/u_memory.h"
 
-#include "i965/brw_context.h"        /* XXX: shouldn't be doing this */
-#include "i965/brw_screen.h"         /* XXX: shouldn't be doing this */
-
-#include "trace/tr_drm.h"
-
-#include "../../sw/drm/sw_drm_api.h"
-
 /*
  * Helper functions
  */
@@ -52,8 +46,8 @@ i965_libdrm_winsys_destroy(struct brw_winsys_screen *iws)
    FREE(idws);
 }
 
-static struct pipe_screen *
-i965_libdrm_create_screen(struct drm_api *api, int drmFD)
+struct brw_winsys_screen *
+i965_drm_winsys_screen_create(int drmFD)
 {
    struct i965_libdrm_winsys *idws;
 
@@ -76,27 +70,5 @@ i965_libdrm_create_screen(struct drm_api *api, int drmFD)
 
    idws->send_cmd = !debug_get_bool_option("BRW_NO_HW", FALSE);
 
-   return brw_create_screen(&idws->base);
-}
-
-struct drm_api i965_libdrm_api =
-{
-   .name = "i965",
-   .driver_name = "i915",
-   .create_screen = i965_libdrm_create_screen,
-   .destroy = NULL,
-};
-
-struct drm_api *
-drm_api_create()
-{
-   struct drm_api *api = NULL;
-
-   if (api == NULL && debug_get_bool_option("BRW_SOFTPIPE", FALSE))
-      api = sw_drm_api_create(&i965_libdrm_api);
-
-   if (api == NULL)
-      api = &i965_libdrm_api;
-
-   return trace_drm_create(api);
+   return &idws->base;
 }
diff --git a/src/gallium/winsys/i965/drm/i965_drm_winsys.h b/src/gallium/winsys/i965/drm/i965_drm_winsys.h
index 3856e1c..82dbe61 100644
--- a/src/gallium/winsys/i965/drm/i965_drm_winsys.h
+++ b/src/gallium/winsys/i965/drm/i965_drm_winsys.h
@@ -30,8 +30,6 @@ i965_libdrm_winsys(struct brw_winsys_screen *iws)
    return (struct i965_libdrm_winsys *)iws;
 }
 
-struct i965_libdrm_winsys *i965_libdrm_winsys_create(int fd, unsigned pci_id);
-
 void i965_libdrm_winsys_init_buffer_functions(struct i965_libdrm_winsys *idws);
 
 



More information about the mesa-commit mailing list