winsys/drm: Add swrast.
authorChia-I Wu <olvaffe@gmail.com>
Fri, 22 Jan 2010 07:51:51 +0000 (15:51 +0800)
committerChia-I Wu <olvaffe@gmail.com>
Fri, 22 Jan 2010 08:44:09 +0000 (16:44 +0800)
The swrast winsys always returns NULL when drm_api_create is called.

configs/default
configure.ac
docs/egl.html
src/gallium/winsys/drm/swrast/Makefile [new file with mode: 0644]
src/gallium/winsys/drm/swrast/core/Makefile [new file with mode: 0644]
src/gallium/winsys/drm/swrast/core/swrast_drm_api.c [new file with mode: 0644]
src/gallium/winsys/drm/swrast/egl_g3d/Makefile [new file with mode: 0644]
src/gallium/winsys/drm/swrast/egl_g3d/dummy.c [new file with mode: 0644]

index 6863495be3e39ada3e9241885264f3090da2a25f..2665f5296a6c8a8e4995bbca31159f072d8f7973 100644 (file)
@@ -100,8 +100,8 @@ GALLIUM_DIRS = auxiliary drivers state_trackers
 GALLIUM_AUXILIARIES = $(TOP)/src/gallium/auxiliary/libgallium.a
 GALLIUM_DRIVERS_DIRS = softpipe failover svga i915 i965 r300 trace identity
 GALLIUM_DRIVERS = $(foreach DIR,$(GALLIUM_DRIVERS_DIRS),$(TOP)/src/gallium/drivers/$(DIR)/lib$(DIR).a)
-GALLIUM_WINSYS_DIRS = xlib egl_xlib
-GALLIUM_WINSYS_DRM_DIRS =
+GALLIUM_WINSYS_DIRS = drm xlib egl_xlib
+GALLIUM_WINSYS_DRM_DIRS = swrast
 GALLIUM_STATE_TRACKERS_DIRS = glx
 
 # native displays EGL should support
index bb011abff267e52b0b770d7c10b560957e34eb85..d6e32f590aada750d108aea824f647c9e6fb4478 100644 (file)
@@ -1311,6 +1311,18 @@ if test "x$enable_gallium_nouveau" = xyes; then
     GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS nouveau nv04 nv10 nv20 nv30 nv40 nv50"
 fi
 
+dnl
+dnl Gallium swrast configuration
+dnl
+AC_ARG_ENABLE([gallium-swrast],
+    [AS_HELP_STRING([--enable-gallium-swrast],
+        [build gallium swrast @<:@default=disabled@:>@])],
+    [enable_gallium_swrast="$enableval"],
+    [enable_gallium_swrast=auto])
+if test "x$enable_gallium_swrast" = xyes; then
+    GALLIUM_WINSYS_DRM_DIRS="$GALLIUM_WINSYS_DRM_DIRS swrast"
+fi
+
 dnl prepend CORE_DIRS to SRC_DIRS
 SRC_DIRS="$CORE_DIRS $SRC_DIRS"
 
index 5561d1a4b86f24950a90a1da45fe3942dab94fe4..efc7b1ed3aa7f2f473109b8a3febb1cbc37539ad 100644 (file)
@@ -81,6 +81,15 @@ that a number of EGL drivers depend on the <code>egl_g3d</code> state tracker.
 They will <em>not</em> be built without the <code>egl_g3d</code> state
 tracker.</p>
 
+</li>
+
+<li><code>--enable-gallium-swrast</code>
+
+<p>This option is not specific to EGL.  But if there is no driver for your
+hardware, or you are experiencing problems with the hardware driver, you can
+enable the swrast DRM driver.  It is a dummy driver and EGL will fallback to
+software rendering automatically.</p>
+
 </li>
 </ul>
 
@@ -159,6 +168,7 @@ tracker to build.  The available drivers are</p>
 <li><code>egl_&lt;dpy&gt;_i965</code></li>
 <li><code>egl_&lt;dpy&gt;_radeon</code></li>
 <li><code>egl_&lt;dpy&gt;_nouveau</code></li>
+<li><code>egl_&lt;dpy&gt;_swrast</code></li>
 <li><code>egl_&lt;dpy&gt;_vmwgfx</code></li>
 </ul>
 
diff --git a/src/gallium/winsys/drm/swrast/Makefile b/src/gallium/winsys/drm/swrast/Makefile
new file mode 100644 (file)
index 0000000..363b895
--- /dev/null
@@ -0,0 +1,12 @@
+# src/gallium/winsys/drm/swrast/Makefile
+TOP = ../../../../..
+include $(TOP)/configs/current
+
+SUBDIRS = core $(GALLIUM_STATE_TRACKERS_DIRS)
+
+default install clean:
+       @for dir in $(SUBDIRS) ; do \
+               if [ -d $$dir ] ; then \
+                       (cd $$dir && $(MAKE) $@) || exit 1; \
+               fi \
+       done
diff --git a/src/gallium/winsys/drm/swrast/core/Makefile b/src/gallium/winsys/drm/swrast/core/Makefile
new file mode 100644 (file)
index 0000000..93931ae
--- /dev/null
@@ -0,0 +1,10 @@
+# src/gallium/winsys/drm/swrast/core/Makefile
+
+TOP = ../../../../../..
+include $(TOP)/configs/current
+
+LIBNAME = swrastdrm
+
+C_SOURCES = swrast_drm_api.c
+
+include ../../../../Makefile.template
diff --git a/src/gallium/winsys/drm/swrast/core/swrast_drm_api.c b/src/gallium/winsys/drm/swrast/core/swrast_drm_api.c
new file mode 100644 (file)
index 0000000..8c9f80e
--- /dev/null
@@ -0,0 +1,13 @@
+#include "state_tracker/drm_api.h"
+
+static struct drm_api swrast_drm_api =
+{
+   .name = "swrast",
+};
+
+struct drm_api *
+drm_api_create()
+{
+   (void) swrast_drm_api;
+   return NULL;
+}
diff --git a/src/gallium/winsys/drm/swrast/egl_g3d/Makefile b/src/gallium/winsys/drm/swrast/egl_g3d/Makefile
new file mode 100644 (file)
index 0000000..f0d051e
--- /dev/null
@@ -0,0 +1,12 @@
+TOP = ../../../../../..
+include $(TOP)/configs/current
+
+EGL_DRIVER_NAME = swrast
+EGL_DRIVER_SOURCES = dummy.c
+EGL_DRIVER_LIBS =
+
+EGL_DRIVER_PIPES = \
+       $(TOP)/src/gallium/winsys/drm/swrast/core/libswrastdrm.a \
+       $(TOP)/src/gallium/drivers/softpipe/libsoftpipe.a
+
+include ../../Makefile.egl_g3d
diff --git a/src/gallium/winsys/drm/swrast/egl_g3d/dummy.c b/src/gallium/winsys/drm/swrast/egl_g3d/dummy.c
new file mode 100644 (file)
index 0000000..4a1bc28
--- /dev/null
@@ -0,0 +1 @@
+/* mklib expects at least one object file */