targets/gbm: build pipe drivers
authorChia-I Wu <olv@lunarg.com>
Fri, 24 Jun 2011 01:39:06 +0000 (10:39 +0900)
committerChia-I Wu <olv@lunarg.com>
Fri, 24 Jun 2011 07:43:03 +0000 (16:43 +0900)
Build pipe drivers here instead of using those built by the
soon-to-be-removed targets/egl.

[with an update by Benjamin Franzke to use --{start|end}-group]

src/gallium/targets/gbm/Makefile
src/gallium/targets/gbm/pipe_i915.c [new file with mode: 0644]
src/gallium/targets/gbm/pipe_i965.c [new file with mode: 0644]
src/gallium/targets/gbm/pipe_loader.c
src/gallium/targets/gbm/pipe_nouveau.c [new file with mode: 0644]
src/gallium/targets/gbm/pipe_r300.c [new file with mode: 0644]
src/gallium/targets/gbm/pipe_r600.c [new file with mode: 0644]
src/gallium/targets/gbm/pipe_swrast.c [new file with mode: 0644]
src/gallium/targets/gbm/pipe_vmwgfx.c [new file with mode: 0644]
src/gbm/backends/Makefile.template

index 74a023293ab7e3ea90f978f42b2374ee6aad797e..2c096bca2b1deb6c55cd24879042177f90e63e66 100644 (file)
@@ -24,9 +24,133 @@ GBM_LIBS = $(LIBUDEV_LIBS) $(LIBDRM_LIB) \
 
 
 GBM_CFLAGS = \
-            -D_EGL_GALLIUM_DRIVER_SEARCH_DIR=\"$(EGL_DRIVER_INSTALL_DIR)\" \
+            -DGBM_BACKEND_SEARCH_DIR=\"$(GBM_BACKEND_INSTALL_DIR)\" \
             -DPIPE_PREFIX=\"$(PIPE_PREFIX)\" \
             $(LIBUDEV_CFLAGS) \
             $(LIBDRM_CFLAGS)  
 
+
+pipe_INCLUDES = \
+       -I$(TOP)/include \
+       -I$(TOP)/src/gallium/auxiliary \
+       -I$(TOP)/src/gallium/drivers \
+       -I$(TOP)/src/gallium/include \
+       -I$(TOP)/src/gallium/winsys
+
+pipe_LIBS = $(LIBDRM_LIB) \
+       $(TOP)/src/gallium/drivers/identity/libidentity.a \
+       $(TOP)/src/gallium/drivers/trace/libtrace.a \
+       $(TOP)/src/gallium/drivers/rbug/librbug.a \
+       $(GALLIUM_AUXILIARIES)
+
+pipe_CLFLAGS = $(LIBDRM_CFLAGS)
+
+pipe_LDFLAGS = -Wl,--no-undefined
+
+# i915 pipe driver
+i915_LIBS = -ldrm_intel \
+       $(TOP)/src/gallium/winsys/i915/drm/libi915drm.a \
+       $(TOP)/src/gallium/drivers/i915/libi915.a
+
+# i965 pipe driver
+i965_LIBS = -ldrm_intel \
+       $(TOP)/src/gallium/winsys/i965/drm/libi965drm.a \
+       $(TOP)/src/gallium/drivers/i965/libi965.a \
+       $(TOP)/src/gallium/winsys/sw/wrapper/libwsw.a
+
+# nouveau pipe driver
+nouveau_LIBS = -ldrm_nouveau \
+       $(TOP)/src/gallium/winsys/nouveau/drm/libnouveaudrm.a \
+       $(TOP)/src/gallium/drivers/nvfx/libnvfx.a \
+       $(TOP)/src/gallium/drivers/nv50/libnv50.a \
+       $(TOP)/src/gallium/drivers/nvc0/libnvc0.a \
+       $(TOP)/src/gallium/drivers/nouveau/libnouveau.a
+
+# r300 pipe driver
+r300_LIBS = -ldrm \
+       $(TOP)/src/gallium/winsys/radeon/drm/libradeonwinsys.a \
+       $(TOP)/src/gallium/drivers/r300/libr300.a
+
+# r600 pipe driver
+r600_LIBS = -ldrm -ldrm_radeon \
+       $(TOP)/src/gallium/winsys/r600/drm/libr600winsys.a \
+       $(TOP)/src/gallium/drivers/r600/libr600.a
+
+# vmwgfx pipe driver
+vmwgfx_LIBS = \
+       $(TOP)/src/gallium/winsys/svga/drm/libsvgadrm.a \
+       $(TOP)/src/gallium/drivers/svga/libsvga.a
+
+# LLVM
+ifeq ($(MESA_LLVM),1)
+pipe_LIBS += $(LLVM_LIBS)
+pipe_LDFLAGS += $(LLVM_LDFLAGS)
+endif
+
+# determine the targets/sources
+pipe_TARGETS =
+pipe_SOURCES =
+
+ifneq ($(findstring i915/drm,$(GALLIUM_WINSYS_DIRS)),)
+pipe_TARGETS += $(PIPE_PREFIX)i915.so
+pipe_SOURCES += pipe_i915.c
+endif
+
+ifneq ($(findstring i965/drm,$(GALLIUM_WINSYS_DIRS)),)
+pipe_TARGETS += $(PIPE_PREFIX)i965.so
+pipe_SOURCES += pipe_i965.c
+endif
+
+ifneq ($(findstring nouveau/drm,$(GALLIUM_WINSYS_DIRS)),)
+pipe_TARGETS += $(PIPE_PREFIX)nouveau.so
+pipe_SOURCES += pipe_nouveau.c
+endif
+
+ifneq ($(findstring radeon/drm,$(GALLIUM_WINSYS_DIRS)),)
+pipe_TARGETS += $(PIPE_PREFIX)r300.so
+pipe_SOURCES += pipe_r300.c
+endif
+
+ifneq ($(findstring r600/drm,$(GALLIUM_WINSYS_DIRS)),)
+pipe_TARGETS += $(PIPE_PREFIX)r600.so
+pipe_SOURCES += pipe_r600.c
+endif
+
+ifneq ($(findstring svga/drm,$(GALLIUM_WINSYS_DIRS)),)
+pipe_TARGETS += $(PIPE_PREFIX)vmwgfx.so
+pipe_SOURCES += pipe_vmwgfx.c
+endif
+
+pipe_OBJECTS = $(pipe_SOURCES:.c=.o)
+
+
+GBM_EXTRA_TARGETS = $(addprefix $(TOP)/$(LIB_DIR)/gbm/, $(pipe_TARGETS))
+GBM_EXTRA_INSTALL = install-pipes
+GBM_EXTRA_CLEAN = clean-pipes
+GBM_EXTRA_SOURCES = $(pipe_SOURCES)
+
 include $(TOP)/src/gbm/backends/Makefile.template
+
+
+$(GBM_EXTRA_TARGETS): $(TOP)/$(LIB_DIR)/gbm/%: %
+       @$(INSTALL) -d $(dir $@)
+       $(INSTALL) $< $(dir $@)
+
+$(pipe_TARGETS): $(PIPE_PREFIX)%.so: pipe_%.o
+       $(MKLIB) -o $@ -noprefix -linker '$(CC)' \
+               -ldflags '-L$(TOP)/$(LIB_DIR) $(pipe_LDFLAGS) $(LDFLAGS)' \
+               $(MKLIB_OPTIONS) $< \
+               -Wl,--start-group $($*_LIBS) $(pipe_LIBS) -Wl,--end-group
+
+$(pipe_OBJECTS): %.o: %.c
+       $(CC) -c -o $@ $< $(pipe_INCLUDES) $(pipe_CFLAGS) $(CFLAGS)
+
+install-pipes: $(GBM_EXTRA_TARGETS)
+       $(INSTALL) -d $(DESTDIR)$(GBM_BACKEND_INSTALL_DIR)
+       for tgt in $(GBM_EXTRA_TARGETS); do \
+               $(MINSTALL) "$$tgt" $(DESTDIR)$(GBM_BACKEND_INSTALL_DIR); \
+       done
+
+clean-pipes:
+       rm -f $(pipe_TARGETS)
+       rm -f $(pipe_OBJECTS)
diff --git a/src/gallium/targets/gbm/pipe_i915.c b/src/gallium/targets/gbm/pipe_i915.c
new file mode 100644 (file)
index 0000000..cd74044
--- /dev/null
@@ -0,0 +1,27 @@
+
+#include "target-helpers/inline_debug_helper.h"
+#include "state_tracker/drm_driver.h"
+#include "i915/drm/i915_drm_public.h"
+#include "i915/i915_public.h"
+
+static struct pipe_screen *
+create_screen(int fd)
+{
+   struct i915_winsys *iws;
+   struct pipe_screen *screen;
+
+   iws = i915_drm_winsys_create(fd);
+   if (!iws)
+      return NULL;
+
+   screen = i915_screen_create(iws);
+   if (!screen)
+      return NULL;
+
+   screen = debug_screen_wrap(screen);
+
+   return screen;
+}
+
+PUBLIC
+DRM_DRIVER_DESCRIPTOR("i915", "i915", create_screen)
diff --git a/src/gallium/targets/gbm/pipe_i965.c b/src/gallium/targets/gbm/pipe_i965.c
new file mode 100644 (file)
index 0000000..f810ecf
--- /dev/null
@@ -0,0 +1,30 @@
+
+#include "target-helpers/inline_debug_helper.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"
+
+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;
+
+   screen = sw_screen_wrap(screen);
+
+   screen = debug_screen_wrap(screen);
+
+   return screen;
+}
+
+PUBLIC
+DRM_DRIVER_DESCRIPTOR("i965", "i965", create_screen)
index 472614c7052f43b03e4591d0c5a17c36b0453ac0..6200541dbf0aecd33c2e6b6ebd296afc65862bbc 100644 (file)
@@ -107,11 +107,11 @@ find_pipe_module(struct pipe_module *pmod, const char *name)
    
    search_paths = NULL;
    if (geteuid() == getuid()) {
-      /* don't allow setuid apps to use EGL_DRIVERS_PATH */
-      search_paths = getenv("EGL_DRIVERS_PATH");
+      /* don't allow setuid apps to use GBM_BACKENDS_PATH */
+      search_paths = getenv("GBM_BACKENDS_PATH");
    }
    if (search_paths == NULL)
-      search_paths = _EGL_GALLIUM_DRIVER_SEARCH_DIR;
+      search_paths = GBM_BACKEND_SEARCH_DIR;
 
    end = search_paths + strlen(search_paths);
    for (p = search_paths; p < end && pmod->lib == NULL; p = next + 1) {
diff --git a/src/gallium/targets/gbm/pipe_nouveau.c b/src/gallium/targets/gbm/pipe_nouveau.c
new file mode 100644 (file)
index 0000000..0c9081b
--- /dev/null
@@ -0,0 +1,21 @@
+
+#include "target-helpers/inline_debug_helper.h"
+#include "state_tracker/drm_driver.h"
+#include "nouveau/drm/nouveau_drm_public.h"
+
+static struct pipe_screen *
+create_screen(int fd)
+{
+   struct pipe_screen *screen;
+
+   screen = nouveau_drm_screen_create(fd);
+   if (!screen)
+      return NULL;
+
+   screen = debug_screen_wrap(screen);
+
+   return screen;
+}
+
+PUBLIC
+DRM_DRIVER_DESCRIPTOR("nouveau", "nouveau", create_screen)
diff --git a/src/gallium/targets/gbm/pipe_r300.c b/src/gallium/targets/gbm/pipe_r300.c
new file mode 100644 (file)
index 0000000..09940f0
--- /dev/null
@@ -0,0 +1,27 @@
+
+#include "target-helpers/inline_debug_helper.h"
+#include "state_tracker/drm_driver.h"
+#include "radeon/drm/radeon_drm_public.h"
+#include "r300/r300_public.h"
+
+static struct pipe_screen *
+create_screen(int fd)
+{
+   struct radeon_winsys *sws;
+   struct pipe_screen *screen;
+
+   sws = radeon_drm_winsys_create(fd);
+   if (!sws)
+      return NULL;
+
+   screen = r300_screen_create(sws);
+   if (!screen)
+      return NULL;
+
+   screen = debug_screen_wrap(screen);
+
+   return screen;
+}
+
+PUBLIC
+DRM_DRIVER_DESCRIPTOR("r300", "radeon", create_screen)
diff --git a/src/gallium/targets/gbm/pipe_r600.c b/src/gallium/targets/gbm/pipe_r600.c
new file mode 100644 (file)
index 0000000..486a659
--- /dev/null
@@ -0,0 +1,27 @@
+
+#include "state_tracker/drm_driver.h"
+#include "target-helpers/inline_debug_helper.h"
+#include "r600/drm/r600_drm_public.h"
+#include "r600/r600_public.h"
+
+static struct pipe_screen *
+create_screen(int fd)
+{
+   struct radeon *rw;
+   struct pipe_screen *screen;
+
+   rw = r600_drm_winsys_create(fd);
+   if (!rw)
+      return NULL;
+
+   screen = r600_screen_create(rw);
+   if (!screen)
+      return NULL;
+
+   screen = debug_screen_wrap(screen);
+
+   return screen;
+}
+
+PUBLIC
+DRM_DRIVER_DESCRIPTOR("r600", "radeon", create_screen)
diff --git a/src/gallium/targets/gbm/pipe_swrast.c b/src/gallium/targets/gbm/pipe_swrast.c
new file mode 100644 (file)
index 0000000..b2e3289
--- /dev/null
@@ -0,0 +1,22 @@
+
+#include "target-helpers/inline_sw_helper.h"
+#include "target-helpers/inline_debug_helper.h"
+#include "state_tracker/drm_driver.h"
+
+PUBLIC struct pipe_screen *
+swrast_create_screen(struct sw_winsys *ws);
+
+PUBLIC
+DRM_DRIVER_DESCRIPTOR("swrast", NULL, NULL)
+
+struct pipe_screen *
+swrast_create_screen(struct sw_winsys *ws)
+{
+   struct pipe_screen *screen;
+
+   screen = sw_screen_create(ws);
+   if (screen)
+      screen = debug_screen_wrap(screen);
+
+   return screen;
+}
diff --git a/src/gallium/targets/gbm/pipe_vmwgfx.c b/src/gallium/targets/gbm/pipe_vmwgfx.c
new file mode 100644 (file)
index 0000000..22a28fa
--- /dev/null
@@ -0,0 +1,27 @@
+
+#include "target-helpers/inline_debug_helper.h"
+#include "state_tracker/drm_driver.h"
+#include "svga/drm/svga_drm_public.h"
+#include "svga/svga_public.h"
+
+static struct pipe_screen *
+create_screen(int fd)
+{
+   struct svga_winsys_screen *sws;
+   struct pipe_screen *screen;
+
+   sws = svga_drm_winsys_screen_create(fd);
+   if (!sws)
+      return NULL;
+
+   screen = svga_screen_create(sws);
+   if (!screen)
+      return NULL;
+
+   screen = debug_screen_wrap(screen);
+
+   return screen;
+}
+
+PUBLIC
+DRM_DRIVER_DESCRIPTOR("vmwgfx", "vmwgfx", create_screen)
index 90b239a94d076f749407a753fc96d85288cd28b6..851e5c56217b8ce675d6894433401edc6f3e2dc5 100644 (file)
@@ -24,7 +24,7 @@ GBM_TARGET = $(GBM_BACKEND_PATH)
 GBM_INSTALL = install-so
 endif
 
-default: depend $(GBM_TARGET)
+default: depend $(GBM_TARGET) $(GBM_EXTRA_TARGETS)
 
 $(GBM_BACKEND_PATH): $(GBM_BACKEND).so
        @$(INSTALL) -d $(TOP)/$(LIB_DIR)/gbm
@@ -46,20 +46,20 @@ install-so: $(GBM_BACKEND_PATH)
        $(INSTALL) -d $(DESTDIR)$(GBM_BACKEND_INSTALL_DIR)
        $(MINSTALL) $(GBM_BACKEND_PATH) $(DESTDIR)$(GBM_BACKEND_INSTALL_DIR)
 
-install: $(GBM_INSTALL)
+install: $(GBM_INSTALL) $(GBM_EXTRA_INSTALL)
 
-clean:
+clean: $(GBM_EXTRA_CLEAN)
        rm -f $(GBM_BACKEND).so
        rm -f lib$(GBM_BACKEND).a
        rm -f $(GBM_OBJECTS)
        rm -f depend depend.bak
 
-depend: $(GBM_SOURCES)
+depend: $(GBM_SOURCES) $(GBM_EXTRA_SOURCES)
        @ echo "running $(MKDEP)"
        @ rm -f depend
        @ touch depend
        $(MKDEP) $(MKDEP_OPTIONS) $(GBM_INCLUDES) $(GBM_SOURCES) \
-               >/dev/null 2>/dev/null
+               $(GBM_EXTRA_SOURCES) >/dev/null 2>/dev/null
 
 sinclude depend
 # DO NOT DELETE