* [PATCH 1/2] xorg: new versions 2011-01-12
@ 2011-01-12 7:23 Martin Jansa
2011-01-12 7:23 ` [PATCH 2/2] mesa: add new 7.10 version, with D_P -1 and without glamo.patch for now Martin Jansa
0 siblings, 1 reply; 4+ messages in thread
From: Martin Jansa @ 2011-01-12 7:23 UTC (permalink / raw)
To: openembedded-devel
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
recipes/xorg-driver/xf86-video-geode_2.11.10.bb | 9 ------
recipes/xorg-driver/xf86-video-geode_2.11.11.bb | 9 ++++++
recipes/xorg-driver/xf86-video-intel_2.13.0.bb | 11 -------
recipes/xorg-driver/xf86-video-intel_2.14.0.bb | 11 +++++++
.../xorg-lib/libx11-1.4.0/keysymdef_include.patch | 19 -------------
.../libx11-1.4.0/x11_disable_makekeys.patch | 29 --------------------
.../xorg-lib/libx11-1.4.1/keysymdef_include.patch | 19 +++++++++++++
.../libx11-1.4.1/x11_disable_makekeys.patch | 29 ++++++++++++++++++++
recipes/xorg-lib/libx11_1.4.0.bb | 8 -----
recipes/xorg-lib/libx11_1.4.1.bb | 8 +++++
recipes/xorg-lib/libxaw_1.0.8.bb | 25 -----------------
recipes/xorg-lib/libxaw_1.0.9.bb | 25 +++++++++++++++++
12 files changed, 101 insertions(+), 101 deletions(-)
delete mode 100644 recipes/xorg-driver/xf86-video-geode_2.11.10.bb
create mode 100644 recipes/xorg-driver/xf86-video-geode_2.11.11.bb
delete mode 100644 recipes/xorg-driver/xf86-video-intel_2.13.0.bb
create mode 100644 recipes/xorg-driver/xf86-video-intel_2.14.0.bb
delete mode 100644 recipes/xorg-lib/libx11-1.4.0/keysymdef_include.patch
delete mode 100644 recipes/xorg-lib/libx11-1.4.0/x11_disable_makekeys.patch
create mode 100644 recipes/xorg-lib/libx11-1.4.1/keysymdef_include.patch
create mode 100644 recipes/xorg-lib/libx11-1.4.1/x11_disable_makekeys.patch
delete mode 100644 recipes/xorg-lib/libx11_1.4.0.bb
create mode 100644 recipes/xorg-lib/libx11_1.4.1.bb
delete mode 100644 recipes/xorg-lib/libxaw_1.0.8.bb
create mode 100644 recipes/xorg-lib/libxaw_1.0.9.bb
diff --git a/recipes/xorg-driver/xf86-video-geode_2.11.10.bb b/recipes/xorg-driver/xf86-video-geode_2.11.10.bb
deleted file mode 100644
index ea3c171..0000000
--- a/recipes/xorg-driver/xf86-video-geode_2.11.10.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require xorg-driver-video.inc
-DESCRIPTION = "X.org server -- Geode GX2/LX display driver"
-PE = "1"
-PR = "${INC_PR}.0"
-
-SRC_URI[archive.md5sum] = "8161cd380673c44177245d1d84366219"
-SRC_URI[archive.sha256sum] = "8e45c4849a2405cecff7a24c990c2b0a88621aeb103d1937c5ac05d78a1fabfd"
-
-COMPATIBLE_HOST = "i.86.*-linux"
diff --git a/recipes/xorg-driver/xf86-video-geode_2.11.11.bb b/recipes/xorg-driver/xf86-video-geode_2.11.11.bb
new file mode 100644
index 0000000..9574523
--- /dev/null
+++ b/recipes/xorg-driver/xf86-video-geode_2.11.11.bb
@@ -0,0 +1,9 @@
+require xorg-driver-video.inc
+DESCRIPTION = "X.org server -- Geode GX2/LX display driver"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "ea36cc51588a1ba73442237db2bf560b"
+SRC_URI[archive.sha256sum] = "861727b1f183060a2d0d89997e0fb3e1564c5d4c2e7b453ab2999f3d6c15400c"
+
+COMPATIBLE_HOST = "i.86.*-linux"
diff --git a/recipes/xorg-driver/xf86-video-intel_2.13.0.bb b/recipes/xorg-driver/xf86-video-intel_2.13.0.bb
deleted file mode 100644
index 63a18bc..0000000
--- a/recipes/xorg-driver/xf86-video-intel_2.13.0.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-require xorg-driver-video.inc
-DESCRIPTION = "X.Org X server -- Intel i8xx, i9xx display driver"
-DEPENDS += " virtual/libx11 libxvmc drm xf86driproto "
-RDEPENDS_${PN} += "xserver-xorg-extension-dri \
- xserver-xorg-extension-dri2 \
- xserver-xorg-extension-glx"
-PE = "1"
-PR = "${INC_PR}.0"
-
-SRC_URI[archive.md5sum] = "de2f8a5836d90c71f3175dcd46d03ec0"
-SRC_URI[archive.sha256sum] = "d8b2fae8d0c4ae372994cb7df8de8aa995b8e89b1bc5766c53ea0751752fc887"
diff --git a/recipes/xorg-driver/xf86-video-intel_2.14.0.bb b/recipes/xorg-driver/xf86-video-intel_2.14.0.bb
new file mode 100644
index 0000000..ae9b95f
--- /dev/null
+++ b/recipes/xorg-driver/xf86-video-intel_2.14.0.bb
@@ -0,0 +1,11 @@
+require xorg-driver-video.inc
+DESCRIPTION = "X.Org X server -- Intel i8xx, i9xx display driver"
+DEPENDS += " virtual/libx11 libxvmc drm xf86driproto "
+RDEPENDS_${PN} += "xserver-xorg-extension-dri \
+ xserver-xorg-extension-dri2 \
+ xserver-xorg-extension-glx"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "05f187582aeabda57fcd6f2782cfbf8e"
+SRC_URI[archive.sha256sum] = "e18c37a579a960516e69de5c6f74750ca02208c0e41cf763ae5630c84db507df"
diff --git a/recipes/xorg-lib/libx11-1.4.0/keysymdef_include.patch b/recipes/xorg-lib/libx11-1.4.0/keysymdef_include.patch
deleted file mode 100644
index 1a30e34..0000000
--- a/recipes/xorg-lib/libx11-1.4.0/keysymdef_include.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-diff -uNr libX11-1.3.6.orig//configure.ac libX11-1.3.6/configure.ac
---- libX11-1.3.6.orig//configure.ac 2010-09-20 08:04:16.000000000 +0200
-+++ libX11-1.3.6/configure.ac 2010-09-28 16:29:26.000000000 +0200
-@@ -355,7 +355,14 @@
- # Find keysymdef.h
- #
- AC_MSG_CHECKING([keysym definitions])
--KEYSYMDEFDIR=`$PKG_CONFIG --variable=includedir xproto`/X11
-+AC_ARG_WITH(keysymdefdir,
-+ AC_HELP_STRING([--with-keysymdefdir=DIR], [The location of keysymdef.h]),
-+ KEYSYMDEFDIR=$withval, KEYSYMDEFDIR="")
-+
-+if test x$KEYSYMDEFDIR = x; then
-+ KEYSYMDEFDIR=`$PKG_CONFIG --variable=includedir xproto`/X11
-+fi
-+
- FILES="keysymdef.h XF86keysym.h Sunkeysym.h DECkeysym.h HPkeysym.h"
- for i in $FILES; do
- if test -f "$KEYSYMDEFDIR/$i"; then
diff --git a/recipes/xorg-lib/libx11-1.4.0/x11_disable_makekeys.patch b/recipes/xorg-lib/libx11-1.4.0/x11_disable_makekeys.patch
deleted file mode 100644
index 9763313..0000000
--- a/recipes/xorg-lib/libx11-1.4.0/x11_disable_makekeys.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-Index: libX11-1.3.4/src/util/Makefile.am
-===================================================================
---- libX11-1.3.4.orig/src/util/Makefile.am
-+++ libX11-1.3.4/src/util/Makefile.am
-@@ -1,24 +1 @@
--
--noinst_PROGRAMS=makekeys
--
--makekeys_CFLAGS = \
-- $(X11_CFLAGS) \
-- $(CWARNFLAGS)
--
--CC = @CC_FOR_BUILD@
--CPPFLAGS = @CPPFLAGS_FOR_BUILD@
--CFLAGS = @CFLAGS_FOR_BUILD@
--LDFLAGS = @LDFLAGS_FOR_BUILD@
--
- EXTRA_DIST = mkks.sh
--
--if LINT
--# Check source code with tools like lint & sparse
--
--ALL_LINT_FLAGS=$(LINT_FLAGS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS)
--
--lint:
-- $(LINT) $(ALL_LINT_FLAGS) makekeys.c
--
--endif LINT
diff --git a/recipes/xorg-lib/libx11-1.4.1/keysymdef_include.patch b/recipes/xorg-lib/libx11-1.4.1/keysymdef_include.patch
new file mode 100644
index 0000000..1a30e34
--- /dev/null
+++ b/recipes/xorg-lib/libx11-1.4.1/keysymdef_include.patch
@@ -0,0 +1,19 @@
+diff -uNr libX11-1.3.6.orig//configure.ac libX11-1.3.6/configure.ac
+--- libX11-1.3.6.orig//configure.ac 2010-09-20 08:04:16.000000000 +0200
++++ libX11-1.3.6/configure.ac 2010-09-28 16:29:26.000000000 +0200
+@@ -355,7 +355,14 @@
+ # Find keysymdef.h
+ #
+ AC_MSG_CHECKING([keysym definitions])
+-KEYSYMDEFDIR=`$PKG_CONFIG --variable=includedir xproto`/X11
++AC_ARG_WITH(keysymdefdir,
++ AC_HELP_STRING([--with-keysymdefdir=DIR], [The location of keysymdef.h]),
++ KEYSYMDEFDIR=$withval, KEYSYMDEFDIR="")
++
++if test x$KEYSYMDEFDIR = x; then
++ KEYSYMDEFDIR=`$PKG_CONFIG --variable=includedir xproto`/X11
++fi
++
+ FILES="keysymdef.h XF86keysym.h Sunkeysym.h DECkeysym.h HPkeysym.h"
+ for i in $FILES; do
+ if test -f "$KEYSYMDEFDIR/$i"; then
diff --git a/recipes/xorg-lib/libx11-1.4.1/x11_disable_makekeys.patch b/recipes/xorg-lib/libx11-1.4.1/x11_disable_makekeys.patch
new file mode 100644
index 0000000..9763313
--- /dev/null
+++ b/recipes/xorg-lib/libx11-1.4.1/x11_disable_makekeys.patch
@@ -0,0 +1,29 @@
+Index: libX11-1.3.4/src/util/Makefile.am
+===================================================================
+--- libX11-1.3.4.orig/src/util/Makefile.am
++++ libX11-1.3.4/src/util/Makefile.am
+@@ -1,24 +1 @@
+-
+-noinst_PROGRAMS=makekeys
+-
+-makekeys_CFLAGS = \
+- $(X11_CFLAGS) \
+- $(CWARNFLAGS)
+-
+-CC = @CC_FOR_BUILD@
+-CPPFLAGS = @CPPFLAGS_FOR_BUILD@
+-CFLAGS = @CFLAGS_FOR_BUILD@
+-LDFLAGS = @LDFLAGS_FOR_BUILD@
+-
+ EXTRA_DIST = mkks.sh
+-
+-if LINT
+-# Check source code with tools like lint & sparse
+-
+-ALL_LINT_FLAGS=$(LINT_FLAGS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS)
+-
+-lint:
+- $(LINT) $(ALL_LINT_FLAGS) makekeys.c
+-
+-endif LINT
diff --git a/recipes/xorg-lib/libx11_1.4.0.bb b/recipes/xorg-lib/libx11_1.4.0.bb
deleted file mode 100644
index 2b6b1bb..0000000
--- a/recipes/xorg-lib/libx11_1.4.0.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require libx11.inc
-#--without-xcb is not an option anymore
-#http://cgit.freedesktop.org/xorg/lib/libX11/commit/?id=15e5eaf62897b3179d1fbe457cb19f886f0449f8
-DEPENDS_virtclass-native = "libxcb-native ${COMMON_DEPENDS}"
-PR = "${INC_PR}.0"
-
-SRC_URI[archive.md5sum] = "b63d9f7493a61df51d0c0be04ac435e4"
-SRC_URI[archive.sha256sum] = "b2f8fcf30b72226ed5e83975ed1b0665c5fcb3d77d626cc0e66d58f951d1cffb"
diff --git a/recipes/xorg-lib/libx11_1.4.1.bb b/recipes/xorg-lib/libx11_1.4.1.bb
new file mode 100644
index 0000000..d07ee46
--- /dev/null
+++ b/recipes/xorg-lib/libx11_1.4.1.bb
@@ -0,0 +1,8 @@
+require libx11.inc
+#--without-xcb is not an option anymore
+#http://cgit.freedesktop.org/xorg/lib/libX11/commit/?id=15e5eaf62897b3179d1fbe457cb19f886f0449f8
+DEPENDS_virtclass-native = "libxcb-native ${COMMON_DEPENDS}"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "4603bdbce1bd73cbc140de402fe6ed24"
+SRC_URI[archive.sha256sum] = "70f4e0f798645a0f269f362bfdbd4c7934dae3a2dd9ecbad28d6ede414f63ce2"
diff --git a/recipes/xorg-lib/libxaw_1.0.8.bb b/recipes/xorg-lib/libxaw_1.0.8.bb
deleted file mode 100644
index 8639fb6..0000000
--- a/recipes/xorg-lib/libxaw_1.0.8.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-require xorg-lib-common.inc
-DESCRIPTION = "X Athena Widget Set"
-DEPENDS += "xproto virtual/libx11 libxext xextproto libxt libxmu libxpm libxp printproto libxau"
-PE = "1"
-PR = "${INC_PR}.0"
-
-SRC_URI[archive.md5sum] = "030fced589e9128c3cf57564d4a2e1ab"
-SRC_URI[archive.sha256sum] = "3daeab01ee702cbc4ac91f11d553710ad31d4151510386093c186a94ccd4beba"
-
-# disable docs as groff detection doesn't work on some hosts while cross compilling
-EXTRA_OECONF += " --disable-docs "
-
-do_install_append () {
- ln -sf libXaw6.so.6 ${D}${libdir}/libXaw.so.6
- ln -sf libXaw7.so.7 ${D}${libdir}/libXaw.so.7
- ln -sf libXaw7.so.7 ${D}${libdir}/libXaw.so
-}
-
-PACKAGES =+ "libxaw6 libxaw7 libxaw8"
-
-FILES_libxaw6 = "${libdir}/libXaw*.so.6*"
-FILES_libxaw7 = "${libdir}/libXaw*.so.7*"
-FILES_libxaw8 = "${libdir}/libXaw8.so.8*"
-
-XORG_PN = "libXaw"
diff --git a/recipes/xorg-lib/libxaw_1.0.9.bb b/recipes/xorg-lib/libxaw_1.0.9.bb
new file mode 100644
index 0000000..a4d2cf4
--- /dev/null
+++ b/recipes/xorg-lib/libxaw_1.0.9.bb
@@ -0,0 +1,25 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X Athena Widget Set"
+DEPENDS += "xproto virtual/libx11 libxext xextproto libxt libxmu libxpm libxp printproto libxau"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "ccc57478c41b7a75b9702241b889b1d4"
+SRC_URI[archive.sha256sum] = "a83977546b78e24ac5dca86affc10b6404a87c16272405b05386feca1a2db037"
+
+# disable docs as groff detection doesn't work on some hosts while cross compilling
+EXTRA_OECONF += " --disable-docs "
+
+do_install_append () {
+ ln -sf libXaw6.so.6 ${D}${libdir}/libXaw.so.6
+ ln -sf libXaw7.so.7 ${D}${libdir}/libXaw.so.7
+ ln -sf libXaw7.so.7 ${D}${libdir}/libXaw.so
+}
+
+PACKAGES =+ "libxaw6 libxaw7 libxaw8"
+
+FILES_libxaw6 = "${libdir}/libXaw*.so.6*"
+FILES_libxaw7 = "${libdir}/libXaw*.so.7*"
+FILES_libxaw8 = "${libdir}/libXaw8.so.8*"
+
+XORG_PN = "libXaw"
--
1.7.4.rc1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] mesa: add new 7.10 version, with D_P -1 and without glamo.patch for now
2011-01-12 7:23 [PATCH 1/2] xorg: new versions 2011-01-12 Martin Jansa
@ 2011-01-12 7:23 ` Martin Jansa
2011-01-12 8:42 ` [PATCH v2 2/2] mesa: add new 7.10 version, with D_P -2 Martin Jansa
0 siblings, 1 reply; 4+ messages in thread
From: Martin Jansa @ 2011-01-12 7:23 UTC (permalink / raw)
To: openembedded-devel
* someone please test uclibc build if old uclibc.patch is enough
* Tartarus reported issues with 7.9.1 (probably missing -ldl), I'll try
to reproduce it here, but someone with populated ppc build is welcome
to confirm it in 7.10 sooner
* I'll rebase glamo.patch and add it later
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
recipes/mesa/mesa-7.10.inc | 18 ++++++++++++++++++
recipes/mesa/mesa-7.10/uclibc.patch | 26 ++++++++++++++++++++++++++
recipes/mesa/mesa-dri_7.10.bb | 4 ++++
recipes/mesa/mesa-xlib_7.10.bb | 4 ++++
recipes/mesa/mesa_7.10.bb | 6 ++++++
5 files changed, 58 insertions(+), 0 deletions(-)
create mode 100644 recipes/mesa/mesa-7.10.inc
create mode 100644 recipes/mesa/mesa-7.10/uclibc.patch
create mode 100644 recipes/mesa/mesa-dri_7.10.bb
create mode 100644 recipes/mesa/mesa-xlib_7.10.bb
create mode 100644 recipes/mesa/mesa_7.10.bb
diff --git a/recipes/mesa/mesa-7.10.inc b/recipes/mesa/mesa-7.10.inc
new file mode 100644
index 0000000..5b26943
--- /dev/null
+++ b/recipes/mesa/mesa-7.10.inc
@@ -0,0 +1,18 @@
+SRC_URI = "ftp://ftp.freedesktop.org/pub/mesa/${PV}/MesaLib-${PV}.tar.bz2;name=archive \
+ file://uclibc.patch \
+ "
+
+DEPENDS += "talloc"
+
+SRC_URI[archive.md5sum] = "33fb94eccc02cbb4d8d1365615e38e46"
+SRC_URI[archive.sha256sum] = "bcf28f43f39c28da271c0f5857fb32898d4ade3e035e80a0ceece1c2df6e0aca"
+
+EXTRA_OECONF += " --disable-gallium"
+
+#needs more testing and updated glamo.patch before making default
+DEFAULT_PREFERENCE = "-2"
+
+do_configure_prepend() {
+ #check for python not python2, because python-native does not stage python2 binary/link
+ sed -i 's/AC_CHECK_PROGS(\[PYTHON2\], \[python2 python\])/AC_CHECK_PROGS(\[PYTHON2\], \[python python\])/g' ${S}/configure.ac
+}
diff --git a/recipes/mesa/mesa-7.10/uclibc.patch b/recipes/mesa/mesa-7.10/uclibc.patch
new file mode 100644
index 0000000..0508112
--- /dev/null
+++ b/recipes/mesa/mesa-7.10/uclibc.patch
@@ -0,0 +1,26 @@
+Index: Mesa-7.9.1/src/mesa/main/imports.c
+===================================================================
+--- Mesa-7.9.1.orig/src/mesa/main/imports.c 2010-12-15 13:50:00.000000000 -0800
++++ Mesa-7.9.1/src/mesa/main/imports.c 2011-01-10 12:23:48.848656001 -0800
+@@ -757,7 +757,7 @@
+ float
+ _mesa_strtof( const char *s, char **end )
+ {
+-#if defined(_GNU_SOURCE) && !defined(__CYGWIN__) && !defined(__FreeBSD__)
++#if defined(_GNU_SOURCE) && !defined(__CYGWIN__) && !defined(__FreeBSD__) && !defined(__UCLIBC__)
+ static locale_t loc = NULL;
+ if (!loc) {
+ loc = newlocale(LC_CTYPE_MASK, "C", NULL);
+Index: Mesa-7.9.1/src/glsl/strtod.c
+===================================================================
+--- Mesa-7.9.1.orig/src/glsl/strtod.c 2011-01-10 20:08:01.568656001 -0800
++++ Mesa-7.9.1/src/glsl/strtod.c 2011-01-10 20:08:39.898656001 -0800
+@@ -44,7 +44,7 @@
+ double
+ glsl_strtod(const char *s, char **end)
+ {
+-#if defined(_GNU_SOURCE) && !defined(__CYGWIN__) && !defined(__FreeBSD__)
++#if defined(_GNU_SOURCE) && !defined(__CYGWIN__) && !defined(__FreeBSD__) && !defined(__UCLIBC__)
+ static locale_t loc = NULL;
+ if (!loc) {
+ loc = newlocale(LC_CTYPE_MASK, "C", NULL);
diff --git a/recipes/mesa/mesa-dri_7.10.bb b/recipes/mesa/mesa-dri_7.10.bb
new file mode 100644
index 0000000..bd62c98
--- /dev/null
+++ b/recipes/mesa/mesa-dri_7.10.bb
@@ -0,0 +1,4 @@
+require mesa-common.inc
+require mesa-${PV}.inc
+require mesa-dri.inc
+PR = "${INC_PR}.1"
diff --git a/recipes/mesa/mesa-xlib_7.10.bb b/recipes/mesa/mesa-xlib_7.10.bb
new file mode 100644
index 0000000..93bb8cd
--- /dev/null
+++ b/recipes/mesa/mesa-xlib_7.10.bb
@@ -0,0 +1,4 @@
+require mesa-common.inc
+require mesa-${PV}.inc
+require mesa-xlib.inc
+PR = "${INC_PR}.0"
diff --git a/recipes/mesa/mesa_7.10.bb b/recipes/mesa/mesa_7.10.bb
new file mode 100644
index 0000000..f5c9a17
--- /dev/null
+++ b/recipes/mesa/mesa_7.10.bb
@@ -0,0 +1,6 @@
+# This is a dummy package so OE can use the poky mesa files
+require mesa-dri_${PV}.bb
+
+PR = "${INC_PR}.1"
+
+EXTRA_OECONF += "--disable-egl"
--
1.7.4.rc1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v2 2/2] mesa: add new 7.10 version, with D_P -2
2011-01-12 7:23 ` [PATCH 2/2] mesa: add new 7.10 version, with D_P -1 and without glamo.patch for now Martin Jansa
@ 2011-01-12 8:42 ` Martin Jansa
2011-01-12 8:57 ` Khem Raj
0 siblings, 1 reply; 4+ messages in thread
From: Martin Jansa @ 2011-01-12 8:42 UTC (permalink / raw)
To: openembedded-devel
* someone please test uclibc build if old uclibc.patch is enough
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
recipes/mesa/mesa-7.10.inc | 19 +
recipes/mesa/mesa-7.10/glamo.patch | 2425 +++++++++++++++++++++++++++++++++++
recipes/mesa/mesa-7.10/uclibc.patch | 26 +
recipes/mesa/mesa-dri_7.10.bb | 4 +
recipes/mesa/mesa-xlib_7.10.bb | 4 +
recipes/mesa/mesa_7.10.bb | 6 +
6 files changed, 2484 insertions(+), 0 deletions(-)
create mode 100644 recipes/mesa/mesa-7.10.inc
create mode 100644 recipes/mesa/mesa-7.10/glamo.patch
create mode 100644 recipes/mesa/mesa-7.10/uclibc.patch
create mode 100644 recipes/mesa/mesa-dri_7.10.bb
create mode 100644 recipes/mesa/mesa-xlib_7.10.bb
create mode 100644 recipes/mesa/mesa_7.10.bb
diff --git a/recipes/mesa/mesa-7.10.inc b/recipes/mesa/mesa-7.10.inc
new file mode 100644
index 0000000..9dc080a
--- /dev/null
+++ b/recipes/mesa/mesa-7.10.inc
@@ -0,0 +1,19 @@
+SRC_URI = "ftp://ftp.freedesktop.org/pub/mesa/${PV}/MesaLib-${PV}.tar.bz2;name=archive \
+ file://glamo.patch \
+ file://uclibc.patch \
+ "
+
+DEPENDS += "talloc"
+
+SRC_URI[archive.md5sum] = "33fb94eccc02cbb4d8d1365615e38e46"
+SRC_URI[archive.sha256sum] = "bcf28f43f39c28da271c0f5857fb32898d4ade3e035e80a0ceece1c2df6e0aca"
+
+EXTRA_OECONF += " --disable-gallium"
+
+#needs more testing and updated glamo.patch before making default
+DEFAULT_PREFERENCE = "-2"
+
+do_configure_prepend() {
+ #check for python not python2, because python-native does not stage python2 binary/link
+ sed -i 's/AC_CHECK_PROGS(\[PYTHON2\], \[python2 python\])/AC_CHECK_PROGS(\[PYTHON2\], \[python python\])/g' ${S}/configure.ac
+}
diff --git a/recipes/mesa/mesa-7.10/glamo.patch b/recipes/mesa/mesa-7.10/glamo.patch
new file mode 100644
index 0000000..5aa45d5
--- /dev/null
+++ b/recipes/mesa/mesa-7.10/glamo.patch
@@ -0,0 +1,2425 @@
+git diff upstream/7.10 and gitorious/7.10
+
+http://gitorious.org/mesa/mesa/commits/7.10
+
+diff --git a/configs/autoconf.in b/configs/autoconf.in
+index e2d70c6..5874955 100644
+--- a/configs/autoconf.in
++++ b/configs/autoconf.in
+@@ -120,7 +120,7 @@ OSMESA_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @OSMESA_MESA_DEPS@ \
+ $(EXTRA_LIB_PATH) @OSMESA_LIB_DEPS@
+ EGL_LIB_DEPS = $(EXTRA_LIB_PATH) @EGL_LIB_DEPS@
+ GLU_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @GLU_MESA_DEPS@ \
+- $(EXTRA_LIB_PATH) @GLU_LIB_DEPS@
++ $(EXTRA_LIB_PATH) @GLU_LIB_DEPS@ -lstdc++
+ GLUT_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @GLUT_MESA_DEPS@ \
+ $(EXTRA_LIB_PATH) @GLUT_LIB_DEPS@
+ GLW_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @GLW_MESA_DEPS@ \
+diff --git a/src/mesa/drivers/dri/glamo/Makefile b/src/mesa/drivers/dri/glamo/Makefile
+new file mode 100644
+index 0000000..e77193d
+--- /dev/null
++++ b/src/mesa/drivers/dri/glamo/Makefile
+@@ -0,0 +1,22 @@
++# src/mesa/drivers/dri/glamo/Makefile
++
++TOP = ../../../../..
++include $(TOP)/configs/current
++
++LIBNAME = glamo_dri.so
++
++DRIVER_SOURCES = \
++ glamo_screen.c glamo_context.c glamo_state.c glamo_fbo.c glamo_tris.c \
++ glamo_cmdq.c glamo_render.c
++
++C_SOURCES = \
++ $(COMMON_SOURCES) \
++ $(DRIVER_SOURCES)
++
++ASM_SOURCES =
++
++DRI_LIB_DEPS += -ldrm_glamo
++
++include ../Makefile.template
++
++symlinks:
+diff --git a/src/mesa/drivers/dri/glamo/glamo_cmdq.c b/src/mesa/drivers/dri/glamo/glamo_cmdq.c
+new file mode 100644
+index 0000000..1334f8e
+--- /dev/null
++++ b/src/mesa/drivers/dri/glamo/glamo_cmdq.c
+@@ -0,0 +1,110 @@
++/*
++ * Command queue submission via DRM
++ *
++ * Copyright 2009 Thomas White <taw@bitwiz.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++
++#include <stdint.h>
++#include <stdlib.h>
++#include <drm.h>
++#include <glamo_drm.h>
++#include <glamo_bo.h>
++
++#include "glamo_context.h"
++#include "glamo_cmdq.h"
++
++
++/* Submit the prepared command sequence to the kernel */
++void glamoDRMDispatch(glamoContext *gCtx)
++{
++ drm_glamo_cmd_burst_t burst;
++ int r;
++
++ burst.base = gCtx->cmd_burst_base;
++ burst.data = gCtx->cmdq_drm;
++ burst.bufsz = gCtx->cmdq_drm_used * 2; /* -> bytes */
++ burst.nobjs = gCtx->cmdq_obj_used;
++ burst.objs = gCtx->cmdq_objs;
++ burst.obj_pos = gCtx->cmdq_obj_pos;
++
++ r = drmCommandWrite(gCtx->drm_fd, DRM_GLAMO_CMDBURST,
++ &burst, sizeof(burst));
++ if ( r != 0 ) {
++ fprintf(stderr, "DRM_GLAMO_CMDBURST failed\n");
++ }
++
++ /* Reset counts to zero for the next sequence */
++ gCtx->cmdq_obj_used = 0;
++ gCtx->cmdq_drm_used = 0;
++}
++
++
++void glamoDRMAddData(glamoContext *gCtx, uint32_t val, int len)
++{
++ if ( gCtx->cmdq_drm_used+4 > gCtx->cmdq_drm_size ) {
++ fprintf(stderr, "Burst command too large\n");
++ return;
++ }
++
++ /* Record command */
++ if ( len == 2 ) {
++ gCtx->cmdq_drm[gCtx->cmdq_drm_used++] = val & 0xffff;
++ } else if ( len == 4 ) {
++ gCtx->cmdq_drm[gCtx->cmdq_drm_used++] = val & 0x0000ffff;
++ gCtx->cmdq_drm[gCtx->cmdq_drm_used++] = val & 0xffff0000;
++ } else {
++ fprintf(stderr, "Wrong command length!\n");
++ }
++}
++
++
++void glamoDRMAddBO(glamoContext *gCtx, struct glamo_bo *bo)
++{
++ if ( gCtx->cmdq_drm_used+4 > gCtx->cmdq_drm_size ) {
++ fprintf(stderr, "Burst command too large\n");
++ return;
++ }
++
++ /* Record object position */
++ gCtx->cmdq_objs[gCtx->cmdq_obj_used] = bo->handle;
++ /* -> bytes */
++ gCtx->cmdq_obj_pos[gCtx->cmdq_obj_used] = gCtx->cmdq_drm_used * 2;
++ gCtx->cmdq_obj_used++;
++
++ /* Record command */
++ gCtx->cmdq_drm[gCtx->cmdq_drm_used++] = 0x0000;
++ gCtx->cmdq_drm[gCtx->cmdq_drm_used++] = 0x0000;
++}
++
++
++void glamoDRMStartBurst(glamoContext *gCtx, uint16_t base)
++{
++ gCtx->cmd_burst_base = base;
++}
++
++
++void glamoInitCmdqCache(glamoContext *gCtx)
++{
++ gCtx->cmdq_objs = malloc(1024);
++ gCtx->cmdq_obj_pos = malloc(1024);
++ gCtx->cmdq_obj_used = 0;
++ gCtx->cmdq_drm_used = 0;
++ gCtx->cmdq_drm_size = 4 * 1024;
++ gCtx->cmdq_drm = malloc(gCtx->cmdq_drm_size);
++}
+diff --git a/src/mesa/drivers/dri/glamo/glamo_cmdq.h b/src/mesa/drivers/dri/glamo/glamo_cmdq.h
+new file mode 100644
+index 0000000..7420d7b
+--- /dev/null
++++ b/src/mesa/drivers/dri/glamo/glamo_cmdq.h
+@@ -0,0 +1,33 @@
++/*
++ * Command queue submission via DRM
++ *
++ * Copyright 2009 Thomas White <taw@bitwiz.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++
++#include <stdint.h>
++#include <glamo_bo.h>
++
++#include "glamo_context.h"
++
++
++extern void glamoDRMDispatch(glamoContext *gCtx);
++extern void glamoDRMAddBO(glamoContext *gCtx, struct glamo_bo *bo);
++extern void glamoDRMAddData(glamoContext *gCtx, uint32_t val, int len);
++extern void glamoDRMStartBurst(glamoContext *gCtx, uint16_t base);
++extern void glamoInitCmdqCache(glamoContext *gCtx);
+diff --git a/src/mesa/drivers/dri/glamo/glamo_context.c b/src/mesa/drivers/dri/glamo/glamo_context.c
+new file mode 100644
+index 0000000..39eb4e7
+--- /dev/null
++++ b/src/mesa/drivers/dri/glamo/glamo_context.c
+@@ -0,0 +1,360 @@
++/*
++ * Direct Rendering Support for SMedia Glamo 336x/337x
++ *
++ * (c) 2009 Thomas White <taw@bitwiz.org.uk>
++ * Roughly based on sis_context.c (c) 2003 Eric Anholt
++ * and radeon_common_context.c
++ *
++ * 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, sublicense,
++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS 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 "dri_util.h"
++#include "drirenderbuffer.h"
++#include "utils.h"
++
++#include "swrast/swrast.h"
++#include "swrast_setup/swrast_setup.h"
++#include "drivers/common/driverfuncs.h"
++#include "vbo/vbo.h"
++#include "tnl/tnl.h"
++#include "tnl/t_pipeline.h"
++#include "main/state.h"
++
++#include "glamo_context.h"
++#include "glamo_screen.h"
++#include "glamo_state.h"
++#include "glamo_fbo.h"
++#include "glamo_tris.h"
++#include "glamo_render.h"
++#include "glamo_cmdq.h"
++
++#include <glamo_bo.h>
++#include <glamo_bo_gem.h>
++#include <glamo_drm.h>
++
++
++#define DRIVER_DATE "20090913"
++
++
++static inline struct glamo_renderbuffer *glamo_get_renderbuffer(
++ struct gl_framebuffer *fb,
++ int att_index)
++{
++ if ( att_index >= 0 ) {
++ struct glamo_renderbuffer *gr;
++ gr = glamo_renderbuffer(fb->Attachment[att_index].Renderbuffer);
++ return gr;
++ } else {
++ return NULL;
++ }
++}
++
++
++static const GLubyte *glamoGetString(struct gl_context *ctx, GLenum name)
++{
++ static char buffer[128];
++
++ switch (name) {
++ case GL_VENDOR:
++ return (GLubyte *)"Thomas White";
++ case GL_RENDERER: {
++ driGetRendererString(buffer, "Glamo", DRIVER_DATE, 0);
++ return (GLubyte *) buffer;
++ }
++ default:
++ return 0;
++ }
++}
++
++
++/* Called when Mesa needs to know the size of the framebuffer */
++static void glamoBufferSize(struct gl_framebuffer *buffer,
++ GLuint *width, GLuint *height)
++{
++ GET_CURRENT_CONTEXT(ctx);
++ glamoContextPtr glamo = GLAMO_CONTEXT(ctx);
++
++ *width = glamo->driDrawable->w;
++ *height = glamo->driDrawable->h;
++}
++
++
++GLboolean glamoCreateContext(const struct gl_config *glVisual,
++ __DRIcontext *driContextPriv,
++ void *sharedContextPrivate)
++{
++ struct gl_context *ctx, *shareCtx;
++ __DRIscreen *sPriv = driContextPriv->driScreenPriv;
++ glamoContextPtr context;
++ glamoScreenPtr glamoScreen;
++ struct dd_function_table functions;
++
++ context = (glamoContextPtr)CALLOC(sizeof(*context));
++ if ( context == NULL ) return GL_FALSE;
++
++ _mesa_init_driver_functions(&functions);
++
++ /* Allocate the Mesa context */
++ if ( sharedContextPrivate )
++ shareCtx = ((glamoContextPtr)sharedContextPrivate)->glCtx;
++ else
++ shareCtx = NULL;
++ context->glCtx = _mesa_create_context(glVisual, shareCtx,
++ &functions, (void *)context);
++ if ( context->glCtx == NULL ) {
++ FREE(context);
++ return GL_FALSE;
++ }
++ driContextPriv->driverPrivate = context;
++ ctx = context->glCtx;
++
++ glamoScreen = context->glamoScreen = (glamoScreenPtr)sPriv->private;
++
++ ctx->Driver.GetString = glamoGetString;
++ ctx->Driver.GetBufferSize = glamoBufferSize;
++
++ context->driContext = driContextPriv;
++ context->driScreen = sPriv;
++ context->driDrawable = NULL;
++ context->drm_fd = sPriv->fd;
++
++ /* Initialize the software rasterizer and helper modules. */
++ _swrast_CreateContext(ctx);
++ _vbo_CreateContext(ctx);
++ _tnl_CreateContext(ctx);
++ _swsetup_CreateContext(ctx);
++
++ /* Install our pipeline (see glamo_render.c) */
++ _tnl_install_pipeline(ctx, glamo_pipeline);
++
++ _swrast_allow_pixel_fog(ctx, GL_TRUE);
++ _swrast_allow_vertex_fog(ctx, GL_FALSE);
++ _tnl_allow_pixel_fog(ctx, GL_TRUE);
++ _tnl_allow_vertex_fog(ctx, GL_FALSE);
++
++ glamoInitCmdqCache(context);
++ glamoInitStateFuncs(ctx);
++ glamoInitTriFuncs(ctx);
++
++ return GL_TRUE;
++}
++
++
++void glamoDestroyContext(__DRIcontext *driContextPriv)
++{
++ glamoContextPtr context;
++
++ context = (glamoContextPtr)driContextPriv->driverPrivate;
++ assert(context != NULL);
++
++ if ( context != NULL ) {
++
++ _swsetup_DestroyContext(context->glCtx);
++ _tnl_DestroyContext(context->glCtx);
++ _vbo_DestroyContext(context->glCtx);
++ _swrast_DestroyContext(context->glCtx);
++
++ _mesa_destroy_context(context->glCtx);
++
++ }
++
++ FREE(context);
++}
++
++
++void glamo_update_renderbuffers(__DRIcontext *context,
++ __DRIdrawable *drawable)
++{
++ unsigned int attachments[10];
++ __DRIbuffer *buffers;
++ __DRIscreen *screen;
++ int i, count;
++ struct glamo_framebuffer *draw;
++ glamoContextPtr glamo;
++ struct glamo_bo *bo;
++
++ draw = drawable->driverPrivate;
++ screen = context->driScreenPriv;
++ glamo = (glamoContextPtr)context->driverPrivate;
++ i = 0;
++ if ( draw->color_rb[0] ) {
++ attachments[i++] = __DRI_BUFFER_FRONT_LEFT;
++ }
++ if ( draw->color_rb[1] ) {
++ attachments[i++] = __DRI_BUFFER_BACK_LEFT;
++ }
++
++ buffers = screen->dri2.loader->getBuffers(drawable,
++ &drawable->w,
++ &drawable->h,
++ attachments, i,
++ &count,
++ drawable->loaderPrivate);
++ if ( buffers == NULL ) return;
++
++ /* Set one cliprect to cover the whole drawable */
++ drawable->x = 0;
++ drawable->y = 0;
++ drawable->backX = 0;
++ drawable->backY = 0;
++ drawable->numClipRects = 1;
++ drawable->pClipRects[0].x1 = 0;
++ drawable->pClipRects[0].y1 = 0;
++ drawable->pClipRects[0].x2 = drawable->w;
++ drawable->pClipRects[0].y2 = drawable->h;
++ drawable->numBackClipRects = 1;
++ drawable->pBackClipRects[0].x1 = 0;
++ drawable->pBackClipRects[0].y1 = 0;
++ drawable->pBackClipRects[0].x2 = drawable->w;
++ drawable->pBackClipRects[0].y2 = drawable->h;
++
++ /* For each attachment */
++ for ( i=0; i<count; i++ ) {
++
++ struct glamo_renderbuffer *grb;
++
++ switch ( buffers[i].attachment ) {
++ case __DRI_BUFFER_FRONT_LEFT:
++ grb = draw->color_rb[0];
++ break;
++ case __DRI_BUFFER_BACK_LEFT:
++ grb = draw->color_rb[1];
++ break;
++ case __DRI_BUFFER_DEPTH:
++ grb = glamo_get_renderbuffer(&draw->base, BUFFER_DEPTH);
++ break;
++ case __DRI_BUFFER_STENCIL:
++ grb = glamo_get_renderbuffer(&draw->base,
++ BUFFER_STENCIL);
++ break;
++ case __DRI_BUFFER_FAKE_FRONT_LEFT:
++ grb = draw->color_rb[0];
++ break;
++ case __DRI_BUFFER_ACCUM:
++ default:
++ fprintf(stderr,
++ "Unhandled buffer attach event,"
++ " attachment type %d\n", buffers[i].attachment);
++ return;
++ }
++
++ if ( grb == NULL ) {
++ /* Don't know how to handle this type of buffer */
++ continue;
++ }
++
++ if ( grb->bo ) {
++ uint32_t name = glamo_gem_get_name(grb->bo);
++ if ( name == buffers[i].name ) {
++ /* Buffer already attached. No action needed */
++ continue;
++ }
++ }
++
++ grb->cpp = buffers[i].cpp;
++ grb->pitch = buffers[i].pitch;
++ grb->width = drawable->w;
++ grb->height = drawable->h;
++
++ bo = glamo_bo_open(glamo->glamoScreen->bom, buffers[i].name,
++ 0, 0, GLAMO_GEM_DOMAIN_VRAM,
++ buffers[i].flags);
++ if ( bo == NULL ) {
++ fprintf(stderr, "Failed to attach buffer %d\n",
++ buffers[i].name);
++ }
++
++ glamo_renderbuffer_set_bo(grb, bo);
++ glamo_bo_unref(bo);
++
++ }
++
++ driUpdateFramebufferSize(glamo->glCtx, drawable);
++}
++
++
++GLboolean glamoMakeCurrent(__DRIcontext *driContextPriv,
++ __DRIdrawable *driDrawPriv,
++ __DRIdrawable *driReadPriv)
++{
++ struct glamo_framebuffer *draw_fb;
++ struct gl_framebuffer *read_fb;
++ glamoContextPtr glamo;
++
++ if ( driContextPriv == NULL ) {
++ _mesa_make_current(NULL, NULL, NULL);
++ return GL_TRUE;
++ }
++
++ /* The Glamo context we're switching to */
++ glamo = (glamoContextPtr)driContextPriv->driverPrivate;
++
++ glamo->driDrawable = driDrawPriv;
++
++ /* These two will probably be the same */
++ draw_fb = (struct glamo_framebuffer *)driDrawPriv->driverPrivate;
++ read_fb = (struct gl_framebuffer *)driReadPriv->driverPrivate;
++
++ glamo_update_renderbuffers(driContextPriv, driDrawPriv);
++ if (driDrawPriv != driReadPriv)
++ glamo_update_renderbuffers(driContextPriv, driReadPriv);
++
++ _mesa_make_current(glamo->glCtx, &draw_fb->base, read_fb);
++ _mesa_update_state(glamo->glCtx);
++
++ return GL_TRUE;
++}
++
++
++GLboolean glamoUnbindContext(__DRIcontext *driContextPriv)
++{
++ return GL_TRUE;
++}
++
++
++/* Convert IEEE754 32-bit float to Glamo's signed 24-bit float */
++uint32_t float7s16(GLfloat in)
++{
++ uint32_t a, b;
++ uint32_t sign, expo, mant; /* Sign, exponent, significand */
++
++ a = *(uint32_t *)∈
++
++ /* This is bad */
++ if ( a & 0x40000000 ) {
++ printf(stderr, "Warning: Exponent won't fit into 7 bits\n");
++ }
++
++ /* This hopefully isn't a big problem */
++ if ( a & 0x0000007f ) {
++ printf(stderr, "Warning: Precision lost in FP conversion\n");
++ }
++
++ /* Separate out the right bits */
++ mant = a & 0x007fff80; /* Bits 7-22 (bits 0-6 are lost) */
++ expo = a & 0x3f800000; /* Bits 23-29 (bit 30 is lost) */
++ sign = a & 0x80000000; /* Bit 31 */
++
++ /* Shift and recombine */
++ b = sign >> 8; /* Fills bit 23 */
++ b |= expo >> 7; /* Fills bits 16-22 */
++ b |= mant >> 7; /* Fills bits 0-15 */
++
++ return b;
++}
+diff --git a/src/mesa/drivers/dri/glamo/glamo_context.h b/src/mesa/drivers/dri/glamo/glamo_context.h
+new file mode 100644
+index 0000000..8de3946
+--- /dev/null
++++ b/src/mesa/drivers/dri/glamo/glamo_context.h
+@@ -0,0 +1,106 @@
++/*
++ * Direct Rendering Support for SMedia Glamo 336x/337x
++ *
++ * (c) 2009 Thomas White <taw@bitwiz.org.uk>
++ * Roughly based on sis_context.h (c) 2003 Eric Anholt
++ *
++ * 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, sublicense,
++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS 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 __GLAMO_CONTEXT_H
++#define __GLAMO_CONTEXT_H
++
++
++#include "dri_util.h"
++#include "utils.h"
++#include "tnl/t_vertex.h"
++
++#include "glamo_screen.h"
++
++
++typedef struct glamo_context glamoContext;
++typedef struct glamo_context *glamoContextPtr;
++
++struct glamo_context {
++
++ struct gl_context *glCtx; /* Must be first in this structure */
++
++ int drm_fd; /* DRM fd */
++
++ __DRIcontext *driContext; /* DRI context */
++ __DRIscreen *driScreen; /* DRI screen */
++ __DRIdrawable *driDrawable; /* DRI drawable bound to this ctx */
++
++ glamoScreenPtr glamoScreen; /* Screen private DRI data */
++
++ driOptionCache optionCache;
++
++ uint16_t *cmdq_drm; /* Command queue cache */
++ uint16_t cmd_burst_base;
++ int cmdq_drm_used;
++ int cmdq_drm_size;
++ int cmdq_obj_used;
++ uint32_t *cmdq_objs;
++ unsigned int *cmdq_obj_pos;
++
++ /* Information about the current primitive */
++ struct {
++ GLuint id;
++ uint32_t primitive; /* Current hardware primitive type */
++ struct glamo_bo *vb_bo;
++ uint8_t *vb;
++ unsigned int start_offset; /* Byte offset of start */
++ unsigned int current_offset; /* Byte offset of next vertex */
++ unsigned int count; /* Number of vertices */
++ } prim;
++
++ /* Current vertex format and attributes */
++ int vertex_size;
++ struct tnl_attr_map vertex_attrs[VERT_ATTRIB_MAX];
++
++ /* State */
++ GLuint new_state; /* State which must be updated */
++ uint16_t col_clear;
++
++};
++
++#define GLAMO_CONTEXT(ctx) ((glamoContextPtr)(ctx->DriverCtx))
++
++#define TAG(x) glamo##x
++#include "tnl_dd/t_dd_vertex.h"
++#undef TAG
++
++extern GLboolean glamoCreateContext(const struct gl_config *glVis,
++ __DRIcontext *driContextPriv,
++ void *sharedContextPrivate);
++extern void glamoDestroyContext(__DRIcontext *dcp);
++extern GLboolean glamoMakeCurrent(__DRIcontext *driContextPriv,
++ __DRIdrawable *driDrawPriv,
++ __DRIdrawable *driReadPriv);
++extern GLboolean glamoUnbindContext(__DRIcontext *driContextPriv);
++extern void glamo_update_renderbuffers(__DRIcontext *context,
++ __DRIdrawable *drawable);
++
++#define GLAMO_PACKCOLOR565(r, g, b) \
++ ((((r) & 0xf8) << 8) \
++ | (((g) & 0xfc) << 3) \
++ | (((b) & 0xf8) >> 3))
++
++extern uint32_t float7s16(GLfloat in);
++
++#endif /* __GLAMO_CONTEXT_H */
+diff --git a/src/mesa/drivers/dri/glamo/glamo_fbo.c b/src/mesa/drivers/dri/glamo/glamo_fbo.c
+new file mode 100644
+index 0000000..e25ca31
+--- /dev/null
++++ b/src/mesa/drivers/dri/glamo/glamo_fbo.c
+@@ -0,0 +1,130 @@
++/*
++ * Direct Rendering Support for SMedia Glamo 336x/337x
++ *
++ * (c) 2009 Thomas White <taw@bitwiz.org.uk>
++ * Roughly based on radeon_fbo.c (c) 2008 Red Hat Inc
++ *
++ * 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, sublicense,
++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS 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 "main/imports.h"
++#include "main/macros.h"
++#include "main/mtypes.h"
++#include "main/formats.h"
++#include "main/fbobject.h"
++#include "main/framebuffer.h"
++#include "main/renderbuffer.h"
++#include "main/context.h"
++#include "dri_util.h"
++
++/* This comes from libdrm_glamo */
++#include <glamo_bo.h>
++
++#include "glamo_fbo.h"
++
++
++static void glamo_delete_renderbuffer(struct gl_renderbuffer *rb)
++{
++ struct glamo_renderbuffer *grb = glamo_renderbuffer(rb);
++
++ ASSERT(grb);
++
++ if ( grb && grb->bo ) {
++ glamo_bo_unref(grb->bo);
++ }
++ free(grb);
++}
++
++
++static void *glamo_get_pointer(struct gl_context *ctx, struct gl_renderbuffer *rb,
++ GLint x, GLint y)
++{
++ return NULL; /* Can't be directly addressed */
++}
++
++
++/* Called for each hardware renderbuffer when a _window_ is resized.
++ * Just update fields.
++ * Not used for user-created renderbuffers!
++ */
++static GLboolean glamo_alloc_window_storage(struct gl_context *ctx,
++ struct gl_renderbuffer *rb,
++ GLenum internalFormat,
++ GLuint width, GLuint height)
++{
++ ASSERT(rb->Name == 0);
++ rb->Width = width;
++ rb->Height = height;
++ rb->Format = internalFormat;
++ return GL_TRUE;
++}
++
++
++/* Create a buffer, such as a colour or depth buffer */
++struct glamo_renderbuffer *glamo_create_renderbuffer(GLenum format,
++ __DRIdrawable *driDrawPriv)
++{
++ struct glamo_renderbuffer *grb;
++
++ grb = CALLOC_STRUCT(glamo_renderbuffer);
++ if ( !grb ) return NULL;
++
++ _mesa_init_renderbuffer(&grb->base, 0);
++ grb->base.ClassID = GLAMO_RB_CLASS;
++
++ switch (format) {
++ case GL_RGB5:
++ grb->base.Format = MESA_FORMAT_RGB565;
++ grb->base._BaseFormat = GL_RGB;
++
++ grb->base.DataType = GL_UNSIGNED_BYTE;
++ break;
++ case GL_DEPTH_COMPONENT16:
++ grb->base.DataType = GL_UNSIGNED_SHORT;
++ grb->base._BaseFormat = GL_DEPTH_COMPONENT;
++ break;
++ default:
++ fprintf(stderr, "%s: Unknown format 0x%04x\n", __FUNCTION__, format);
++ _mesa_delete_renderbuffer(&grb->base);
++ return NULL;
++ }
++
++ grb->dPriv = driDrawPriv;
++ grb->base.InternalFormat = format;
++
++ grb->base.Delete = glamo_delete_renderbuffer;
++ grb->base.AllocStorage = glamo_alloc_window_storage;
++ grb->base.GetPointer = glamo_get_pointer;
++
++ return grb;
++}
++
++
++void glamo_renderbuffer_set_bo(struct glamo_renderbuffer *grb,
++ struct glamo_bo *bo)
++{
++ struct glamo_bo *old;
++ old = grb->bo;
++ grb->bo = bo;
++ glamo_bo_ref(bo);
++ if ( old ) glamo_bo_unref(old);
++}
++
++
++/* kate: space-indent on; indent-width 3; mixedindent off; indent-mode cstyle; */
+diff --git a/src/mesa/drivers/dri/glamo/glamo_fbo.h b/src/mesa/drivers/dri/glamo/glamo_fbo.h
+new file mode 100644
+index 0000000..48210dd
+--- /dev/null
++++ b/src/mesa/drivers/dri/glamo/glamo_fbo.h
+@@ -0,0 +1,77 @@
++/*
++ * Direct Rendering Support for SMedia Glamo 336x/337x
++ *
++ * (c) 2009 Thomas White <taw@bitwiz.org.uk>
++ *
++ * 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, sublicense,
++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS 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 __GLAMO_FBO_H
++#define __GLAMO_FBO_H
++
++
++#include "main/mtypes.h"
++#include "dri_util.h"
++
++
++/* This is just a marker so we can tell a Glamo renderbuffer from a Mesa one */
++#define GLAMO_RB_CLASS (0xdeadbeef)
++
++
++struct glamo_renderbuffer
++{
++ struct gl_renderbuffer base; /* Must be first */
++ struct glamo_bo *bo;
++ unsigned int cpp;
++ unsigned int pitch;
++ unsigned int width;
++ unsigned int height;
++
++ __DRIdrawable *dPriv;
++};
++
++
++struct glamo_framebuffer
++{
++ struct gl_framebuffer base;
++ struct glamo_renderbuffer *color_rb[2];
++};
++
++
++/* This is just a small wrapper function to return NULL if the gl_renderbuffer
++ * is not a glamo_renderbuffer */
++static inline struct glamo_renderbuffer
++ *glamo_renderbuffer(struct gl_renderbuffer *rb)
++{
++ struct glamo_renderbuffer *grb = (struct glamo_renderbuffer *)rb;
++ if ( grb && grb->base.ClassID == GLAMO_RB_CLASS )
++ return grb;
++ else
++ return NULL;
++}
++
++
++extern struct glamo_renderbuffer *glamo_create_renderbuffer(GLenum format,
++ __DRIdrawable *driDrawPriv);
++
++extern void glamo_renderbuffer_set_bo(struct glamo_renderbuffer *grb,
++ struct glamo_bo *bo);
++
++#endif /* __GLAMO_FBO_H */
++
++/* kate: space-indent on; indent-width 3; mixedindent off; indent-mode cstyle; */
+diff --git a/src/mesa/drivers/dri/glamo/glamo_regs.h b/src/mesa/drivers/dri/glamo/glamo_regs.h
+new file mode 100644
+index 0000000..02b2294
+--- /dev/null
++++ b/src/mesa/drivers/dri/glamo/glamo_regs.h
+@@ -0,0 +1,174 @@
++#ifndef _GLAMO_REGS_H
++#define _GLAMO_REGS_H
++
++/* Smedia Glamo 336x/337x driver
++ *
++ * (C) 2007 by OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ * All rights reserved.
++ *
++ * Modified for Glamo Mesa driver by Thomas White <taw@bitwiz.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++enum glamo_regster_offsets {
++ GLAMO_REGOFS_GENERIC = 0x0000,
++ GLAMO_REGOFS_HOSTBUS = 0x0200,
++ GLAMO_REGOFS_MEMORY = 0x0300,
++ GLAMO_REGOFS_VIDCAP = 0x0400,
++ GLAMO_REGOFS_ISP = 0x0500,
++ GLAMO_REGOFS_JPEG = 0x0800,
++ GLAMO_REGOFS_MPEG = 0x0c00,
++ GLAMO_REGOFS_LCD = 0x1100,
++ GLAMO_REGOFS_MMC = 0x1400,
++ GLAMO_REGOFS_MPROC0 = 0x1500,
++ GLAMO_REGOFS_MPROC1 = 0x1580,
++ GLAMO_REGOFS_CMDQUEUE = 0x1600,
++ GLAMO_REGOFS_RISC = 0x1680,
++ GLAMO_REGOFS_2D = 0x1700,
++ GLAMO_REGOFS_3D = 0x1b00,
++};
++
++
++#define REG_MPEG(x) (GLAMO_REGOFS_MPEG+(x))
++
++enum glamo_register_mpeg {
++ //
++ GLAMO_REG_MPEG_DC_ADDRL = REG_MPEG(0x3c),
++ GLAMO_REG_MPEG_DC_ADDRH = REG_MPEG(0x3e),
++ GLAMO_REG_MPEG_AC_ADDRL = REG_MPEG(0x40),
++ GLAMO_REG_MPEG_AC_ADDRH = REG_MPEG(0x42),
++ //
++ GLAMO_REG_MPEG_SAFE_1 = REG_MPEG(0x60),
++ GLAMO_REG_MPEG_SAFE_2 = REG_MPEG(0x62),
++ GLAMO_REG_MPEG_SAFE_3 = REG_MPEG(0x64),
++ //
++ GLAMO_REG_MPEG_DEC_OUT0_Y_ADDRL = REG_MPEG(0x6e),
++ GLAMO_REG_MPEG_DEC_OUT0_Y_ADDRH = REG_MPEG(0x70),
++ GLAMO_REG_MPEG_DEC_OUT0_U_ADDRL = REG_MPEG(0x72),
++ GLAMO_REG_MPEG_DEC_OUT0_U_ADDRH = REG_MPEG(0x74),
++ GLAMO_REG_MPEG_DEC_OUT0_V_ADDRL = REG_MPEG(0x76),
++ GLAMO_REG_MPEG_DEC_OUT0_V_ADDRH = REG_MPEG(0x78),
++ GLAMO_REG_MPEG_DEC_OUT1_Y_ADDRL = REG_MPEG(0x7a),
++ GLAMO_REG_MPEG_DEC_OUT1_Y_ADDRH = REG_MPEG(0x7c),
++ GLAMO_REG_MPEG_DEC_OUT1_U_ADDRL = REG_MPEG(0x7e),
++ GLAMO_REG_MPEG_DEC_OUT1_U_ADDRH = REG_MPEG(0x80),
++ GLAMO_REG_MPEG_DEC_OUT1_V_ADDRL = REG_MPEG(0x82),
++ GLAMO_REG_MPEG_DEC_OUT1_V_ADDRH = REG_MPEG(0x84),
++ GLAMO_REG_MPEG_DEC_OUT2_Y_ADDRL = REG_MPEG(0x86),
++ GLAMO_REG_MPEG_DEC_OUT2_Y_ADDRH = REG_MPEG(0x88),
++ GLAMO_REG_MPEG_DEC_OUT2_U_ADDRL = REG_MPEG(0x8a),
++ GLAMO_REG_MPEG_DEC_OUT2_U_ADDRH = REG_MPEG(0x8c),
++ GLAMO_REG_MPEG_DEC_OUT2_V_ADDRL = REG_MPEG(0x8e),
++ GLAMO_REG_MPEG_DEC_OUT2_V_ADDRH = REG_MPEG(0x90),
++ GLAMO_REG_MPEG_DEC_WIDTH = REG_MPEG(0x92),
++ GLAMO_REG_MPEG_DEC_HEIGHT = REG_MPEG(0x94),
++ GLAMO_REG_MPEG_SPECIAL = REG_MPEG(0x96),
++ GLAMO_REG_MPEG_DEC_IN_ADDRL = REG_MPEG(0x98),
++ GLAMO_REG_MPEG_DEC_IN_ADDRH = REG_MPEG(0x9a),
++ //
++ GLAMO_REG_MPEG_DEBLK_THRESHOLD = REG_MPEG(0xc0),
++ //
++ GLAMO_REG_MPEG_DEC_STATUS = REG_MPEG(0xc8),
++ GLAMO_REG_MPEG_DEC_RB0 = REG_MPEG(0xca),
++ GLAMO_REG_MPEG_DEC_RB1 = REG_MPEG(0xcc),
++};
++
++
++#define REG_2D(x) (GLAMO_REGOFS_2D+(x))
++
++enum glamo_register_2d {
++ GLAMO_REG_2D_SRC_ADDRL = REG_2D(0x00),
++ GLAMO_REG_2D_SRC_ADDRH = REG_2D(0x02),
++ GLAMO_REG_2D_SRC_PITCH = REG_2D(0x04),
++ GLAMO_REG_2D_SRC_X = REG_2D(0x06),
++ GLAMO_REG_2D_SRC_Y = REG_2D(0x08),
++ GLAMO_REG_2D_DST_X = REG_2D(0x0a),
++ GLAMO_REG_2D_DST_Y = REG_2D(0x0c),
++ GLAMO_REG_2D_DST_ADDRL = REG_2D(0x0e),
++ GLAMO_REG_2D_DST_ADDRH = REG_2D(0x10),
++ GLAMO_REG_2D_DST_PITCH = REG_2D(0x12),
++ GLAMO_REG_2D_DST_HEIGHT = REG_2D(0x14),
++ GLAMO_REG_2D_RECT_WIDTH = REG_2D(0x16),
++ GLAMO_REG_2D_RECT_HEIGHT = REG_2D(0x18),
++ GLAMO_REG_2D_PAT_ADDRL = REG_2D(0x1a),
++ GLAMO_REG_2D_PAT_ADDRH = REG_2D(0x1c),
++ GLAMO_REG_2D_PAT_FG = REG_2D(0x1e),
++ GLAMO_REG_2D_PAT_BG = REG_2D(0x20),
++ GLAMO_REG_2D_SRC_FG = REG_2D(0x22),
++ GLAMO_REG_2D_SRC_BG = REG_2D(0x24),
++ GLAMO_REG_2D_MASK1 = REG_2D(0x26),
++ GLAMO_REG_2D_MASK2 = REG_2D(0x28),
++ GLAMO_REG_2D_MASK3 = REG_2D(0x2a),
++ GLAMO_REG_2D_MASK4 = REG_2D(0x2c),
++ GLAMO_REG_2D_ROT_X = REG_2D(0x2e),
++ GLAMO_REG_2D_ROT_Y = REG_2D(0x30),
++ GLAMO_REG_2D_LEFT_CLIP = REG_2D(0x32),
++ GLAMO_REG_2D_TOP_CLIP = REG_2D(0x34),
++ GLAMO_REG_2D_RIGHT_CLIP = REG_2D(0x36),
++ GLAMO_REG_2D_BOTTOM_CLIP = REG_2D(0x38),
++ GLAMO_REG_2D_COMMAND1 = REG_2D(0x3A),
++ GLAMO_REG_2D_COMMAND2 = REG_2D(0x3C),
++ GLAMO_REG_2D_COMMAND3 = REG_2D(0x3E),
++ GLAMO_REG_2D_SAFE = REG_2D(0x40),
++ GLAMO_REG_2D_STATUS = REG_2D(0x42),
++ GLAMO_REG_2D_ID1 = REG_2D(0x44),
++ GLAMO_REG_2D_ID2 = REG_2D(0x46),
++ GLAMO_REG_2D_ID3 = REG_2D(0x48),
++};
++
++
++/* No offset this time */
++#define REG_3D(x) (x)
++
++enum glamo_register_3d
++{
++ /* Fire the engine */
++ G3D_FIRE = REG_3D(0x2058),
++
++ /* Streams of vertex/colour/normal/texcoord data */
++ G3D_ACTIVE_STREAMS = REG_3D(0x1f00),
++ G3D_LAST_STREAM__VCOLFMT = REG_3D(0x2030),
++ G3D_STREAM_MODE_0 = REG_3D(0x1f10),
++ G3D_STREAM_BASE_0 = REG_3D(0x1f14),
++ G3D_STREAM_MODE_1 = REG_3D(0x1f18),
++ G3D_STREAM_BASE_1 = REG_3D(0x1f1c),
++ G3D_STREAM_MODE_2 = REG_3D(0x1f20),
++ G3D_STREAM_BASE_2 = REG_3D(0x1f24),
++ G3D_STREAM_MODE_3 = REG_3D(0x1f28),
++ G3D_STREAM_BASE_3 = REG_3D(0x1f2c),
++ G3D_STREAM_MODE_4 = REG_3D(0x1f30),
++ G3D_STREAM_BASE_4 = REG_3D(0x1f34),
++ G3D_STREAM_MODE_5 = REG_3D(0x1f38),
++ G3D_STREAM_BASE_5 = REG_3D(0x1f3c),
++ G3D_STREAM_MODE_6 = REG_3D(0x1f40),
++ G3D_STREAM_BASE_6 = REG_3D(0x1f44),
++ G3D_STREAM_MODE_7 = REG_3D(0x1f48),
++ G3D_STREAM_BASE_7 = REG_3D(0x1f4c),
++
++ /* Modelview*projection matrix */
++ G3D_MATRIX_MVP = REG_3D(0x26a0), /* .. 0x27df */
++
++ /* Modelview matrix */
++ G3D_MATRIX_MV = REG_3D(0x26e0), /* .. 0x270f */
++
++ /* Inverse MVP, 3x3 only */
++ G3D_MATRIX_IMVP = REG_3D(0x2710), /* .. 0x2733 */
++
++};
++
++#endif /* _GLAMO_REGS_H */
+diff --git a/src/mesa/drivers/dri/glamo/glamo_render.c b/src/mesa/drivers/dri/glamo/glamo_render.c
+new file mode 100644
+index 0000000..d8b21d5
+--- /dev/null
++++ b/src/mesa/drivers/dri/glamo/glamo_render.c
+@@ -0,0 +1,230 @@
++/*
++ * Direct Rendering Support for SMedia Glamo 336x/337x
++ *
++ * (c) 2009 Thomas White <taw@bitwiz.org.uk>
++ *
++ * 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, sublicense,
++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS 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.
++ *
++ *
++ * Based on intel_render.c, to which the following notice applies:
++ *
++ * 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.
++ *
++ */
++
++
++/*
++ * Render unclipped vertex buffers by emitting vertices directly to
++ * dma buffers. Use strip/fan hardware acceleration where possible.
++ *
++ */
++#include "main/glheader.h"
++#include "main/context.h"
++#include "main/macros.h"
++#include "main/imports.h"
++#include "main/mtypes.h"
++#include "main/enums.h"
++
++#include "tnl/t_context.h"
++#include "tnl/t_vertex.h"
++#include "tnl/t_pipeline.h"
++#include "math/m_xform.h"
++
++#include "glamo_context.h"
++#include "glamo_tris.h"
++#include "glamo_regs.h"
++
++/*
++ * Render unclipped vertex buffers by emitting vertices directly to
++ * VRAM buffers. Use strip/fan hardware primitives where possible.
++ * Try to simulate missing primitives with indexed vertices.
++ */
++#define HAVE_POINTS 1
++#define HAVE_LINES 1
++#define HAVE_LINE_STRIPS 0
++#define HAVE_TRIANGLES 1
++#define HAVE_TRI_STRIPS 0
++#define HAVE_TRI_STRIP_1 0
++#define HAVE_TRI_FANS 0
++#define HAVE_POLYGONS 0
++#define HAVE_QUADS 0
++#define HAVE_QUAD_STRIPS 0
++#define HAVE_ELTS 0
++
++
++static void glamoFlushPrim(struct glamo_context *gCtx)
++{
++ printf("glamoFlushPrim: %i vertices, %i %i\n", gCtx->prim.count,
++ gCtx->prim.start_offset, gCtx->prim.current_offset);
++
++ if ( gCtx->prim.vb_bo == NULL ) return;
++
++ /* Upload to hardware */
++ glamo_bo_subdata(gCtx->prim.vb_bo, 0, gCtx->prim.current_offset,
++ gCtx->prim.vb);
++
++ /* Dispatch to the hardware */
++ glamoDRMStartBurst(gCtx, G3D_STREAM_MODE_0);
++ glamoDRMAddData(gCtx, 0x000f0300, 4);
++ glamoDRMAddBO(gCtx, gCtx->prim.vb_bo);
++ glamoDRMDispatch(gCtx);
++
++ /* Please use a new BO for the next buffer */
++ gCtx->prim.vb_bo = NULL;
++
++ /* Continue from new start */
++ gCtx->prim.start_offset = gCtx->prim.current_offset;
++}
++
++
++static inline GLuint glamoGetVBMax(struct glamo_context *gCtx)
++{
++ return GLAMO_VB_SIZE / gCtx->vertex_size;
++}
++
++
++static inline GLuint glamoGetCurrentMax(struct glamo_context *gCtx)
++{
++ /* How many more vertices can be accommodated?
++ * Each vertex takes up 4x 32-bit fixed point values */
++ return (GLAMO_VB_SIZE - gCtx->prim.current_offset) / gCtx->vertex_size;
++}
++
++
++#define LOCAL_VARS \
++ struct glamo_context *gCtx = GLAMO_CONTEXT(ctx);
++
++#define INIT(prim)
++
++#define FLUSH() glamoFlushPrim(gCtx)
++
++#define GET_SUBSEQUENT_VB_MAX_VERTS() glamoGetVBMax(gCtx)
++#define GET_CURRENT_VB_MAX_VERTS() glamoGetCurrentMax(gCtx)
++
++#define ALLOC_VERTS(nr) glamoGetPrimSpace(gCtx, nr)
++
++#define EMIT_VERTS(ctx, j, nr, buf) \
++ _tnl_emit_vertices_to_buffer(ctx, j, (j)+(nr), buf)
++
++#define TAG(x) glamo_##x
++#include "tnl_dd/t_dd_dmatmp.h"
++
++
++/**********************************************************************/
++/* Render pipeline stage */
++/**********************************************************************/
++
++static void glamoFireEngine(struct glamo_context *gCtx)
++{
++ glamoDRMStartBurst(gCtx, G3D_FIRE);
++ glamoDRMAddData(gCtx, 0, 2); /* Fire! */
++ glamoDRMDispatch(gCtx);
++}
++
++
++static GLboolean glamoRunRender(struct gl_context *ctx,
++ struct tnl_pipeline_stage *stage)
++{
++ TNLcontext *tnl = TNL_CONTEXT(ctx);
++ struct glamo_context *gCtx = GLAMO_CONTEXT(ctx);
++ struct vertex_buffer *VB = &tnl->vb;
++ GLuint i;
++
++ printf("glamoRunRender\n");
++
++ /* Don't handle clipping */
++ if ( !glamo_validate_render(ctx, VB) ) {
++ return GL_TRUE; /* Failed */
++ }
++
++ /* Validate GPU state */
++ if ( gCtx->new_state ) {
++ if ( !glamoValidateState(ctx, gCtx->new_state) ) {
++ printf("Couldn't validate state...\n");
++ }
++ } /* else nothing to update */
++
++ tnl->clipspace.new_inputs |= VERT_BIT_POS;
++
++ tnl->Driver.Render.Start(ctx);
++
++ for ( i=0; i<VB->PrimitiveCount; i++ ) {
++
++ GLuint prim = _tnl_translate_prim(&VB->Primitive[i]);
++ GLuint start = VB->Primitive[i].start;
++ GLuint length = VB->Primitive[i].count;
++
++ if (!length) continue;
++
++ glamo_render_tab_verts[prim & PRIM_MODE_MASK](ctx, start,
++ start + length, prim);
++
++ }
++
++ tnl->Driver.Render.Finish(ctx);
++
++ glamoFireEngine(gCtx);
++
++ return GL_FALSE; /* Ok */
++}
++
++
++static const struct tnl_pipeline_stage _glamo_render_stage = {
++ "glamo render",
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ glamoRunRender
++};
++
++
++const struct tnl_pipeline_stage *glamo_pipeline[] = {
++ &_tnl_vertex_transform_stage,
++ &_tnl_normal_transform_stage,
++ &_tnl_lighting_stage,
++ &_tnl_fog_coordinate_stage,
++ &_tnl_texgen_stage,
++ &_tnl_texture_transform_stage,
++ &_tnl_point_attenuation_stage,
++ &_tnl_vertex_program_stage,
++ &_glamo_render_stage, /* ADD: unclipped rastersetup-to-dma */
++ &_tnl_render_stage,
++ 0,
++};
+diff --git a/src/mesa/drivers/dri/glamo/glamo_render.h b/src/mesa/drivers/dri/glamo/glamo_render.h
+new file mode 100644
+index 0000000..99c36a8
+--- /dev/null
++++ b/src/mesa/drivers/dri/glamo/glamo_render.h
+@@ -0,0 +1,31 @@
++/*
++ * Direct Rendering Support for SMedia Glamo 336x/337x
++ *
++ * (c) 2009 Thomas White <taw@bitwiz.org.uk>
++ *
++ * 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, sublicense,
++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS 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 __GLAMO_RENDER_H
++#define __GLAMO_RENDER_H
++
++#include "main/mtypes.h"
++
++extern const struct tnl_pipeline_stage *glamo_pipeline[];
++
++#endif /* __GLAMO_RENDER_H */
+diff --git a/src/mesa/drivers/dri/glamo/glamo_screen.c b/src/mesa/drivers/dri/glamo/glamo_screen.c
+new file mode 100644
+index 0000000..cc8a730
+--- /dev/null
++++ b/src/mesa/drivers/dri/glamo/glamo_screen.c
+@@ -0,0 +1,250 @@
++/*
++ * Direct Rendering Support for SMedia Glamo 336x/337x
++ *
++ * (c) 2009 Thomas White <taw@bitwiz.org.uk>
++ * Roughly based on sis_screen.c (c) 2003 Eric Anholt
++ *
++ * 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, sublicense,
++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS 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 "dri_util.h"
++#include "utils.h"
++#include "xmlconfig.h"
++#include "GL/internal/dri_interface.h"
++#include "main/framebuffer.h"
++#include "main/renderbuffer.h"
++
++#include "glamo_screen.h"
++#include "glamo_context.h"
++#include "glamo_fbo.h"
++
++/* This comes from libdrm_glamo */
++#include <glamo_bo_gem.h>
++
++
++static int glamoInitDriver(__DRIscreen *psp)
++{
++ return 0;
++}
++
++
++static glamoScreenPtr glamoCreateScreen(__DRIscreen *sPriv)
++{
++ glamoScreenPtr glamoScreen;
++
++ /* Allocate the private area */
++ glamoScreen = (glamoScreenPtr)CALLOC(sizeof(*glamoScreen));
++ if ( glamoScreen == NULL )
++ return NULL;
++
++ glamoScreen->driScreen = sPriv;
++
++ /* This is our link to the kernel's memory manager, via libdrm */
++ glamoScreen->bom = glamo_bo_manager_gem_ctor(sPriv->fd);
++
++ return glamoScreen;
++}
++
++
++static void glamoDestroyScreen(__DRIscreen *sPriv)
++{
++ glamoScreenPtr glamoScreen = (glamoScreenPtr)sPriv->private;
++
++ if ( glamoScreen == NULL )
++ return;
++
++ FREE(glamoScreen);
++ sPriv->private = NULL;
++}
++
++
++static const __DRIconfig **glamoInitScreen(__DRIscreen *sPriv)
++{
++ __DRIconfig **configs;
++ uint8_t depth_bits_array[2];
++ uint8_t stencil_bits_array[2];
++ uint8_t msaa_samples_array[1];
++ static const GLenum db_modes[] = { GLX_SWAP_COPY_OML, GLX_NONE };
++
++ /* Driver initialisation */
++ if ( glamoInitDriver(sPriv) ) {
++ return NULL;
++ }
++
++ /* Screen-specific initialisation */
++ sPriv->private = glamoCreateScreen(sPriv);
++ if ( !sPriv->private ) {
++ glamoDestroyScreen(sPriv);
++ return NULL;
++ }
++
++ depth_bits_array[0] = 0;
++ stencil_bits_array[0] = 0;
++ depth_bits_array[1] = 16;
++ stencil_bits_array[1] = 0;
++ msaa_samples_array[0] = 0;
++
++ configs = driCreateConfigs(GL_RGB, GL_UNSIGNED_SHORT_5_6_5,
++ depth_bits_array, stencil_bits_array, 2,
++ db_modes, 2, msaa_samples_array, 1, GL_TRUE);
++
++ if ( configs == NULL ) {
++ fprintf(stderr, "[%s:%u] Error creating FBConfig!\n", __func__, __LINE__);
++ return NULL;
++ }
++
++ return (const __DRIconfig **)configs;
++}
++
++
++static const __DRIconfig **glamoInitScreen2(__DRIscreen *sPriv)
++{
++ __DRIconfig **configs;
++ uint8_t depth_bits_array[2];
++ uint8_t stencil_bits_array[2];
++ uint8_t msaa_samples_array[1];
++ static const GLenum db_modes[] = { GLX_SWAP_COPY_OML, GLX_NONE };
++
++ /* Driver initialisation */
++ if ( glamoInitDriver(sPriv) ) {
++ return NULL;
++ }
++
++ /* Screen-specific initialisation */
++ sPriv->private = glamoCreateScreen(sPriv);
++ if ( !sPriv->private ) {
++ glamoDestroyScreen(sPriv);
++ return NULL;
++ }
++
++ depth_bits_array[0] = 0;
++ stencil_bits_array[0] = 0;
++ depth_bits_array[1] = 16;
++ stencil_bits_array[1] = 0;
++ msaa_samples_array[0] = 0;
++
++ configs = driCreateConfigs(GL_RGB, GL_UNSIGNED_SHORT_5_6_5,
++ depth_bits_array, stencil_bits_array, 2,
++ db_modes, 2, msaa_samples_array, 1, GL_TRUE);
++
++ if ( configs == NULL ) {
++ fprintf(stderr, "[%s:%u] Error creating FBConfig!\n", __func__, __LINE__);
++ return NULL;
++ }
++
++ return (const __DRIconfig **)configs;
++}
++
++
++/* Allocate buffers for a context. This is where the fun starts... */
++static GLboolean glamoCreateBuffer(__DRIscreen *driScrnPriv,
++ __DRIdrawable *driDrawPriv,
++ const struct gl_config *mesaVis,
++ GLboolean isPixmap)
++{
++ struct glamo_framebuffer *gfb;
++ GLenum rgbFormat;
++
++ if ( isPixmap ) return GL_FALSE; /* not implemented */
++
++ gfb = CALLOC_STRUCT(glamo_framebuffer);
++ if ( !gfb ) return GL_FALSE;
++
++ _mesa_initialize_window_framebuffer(&gfb->base, mesaVis);
++
++ /* we only support this one format at the moment */
++ rgbFormat = GL_RGB5;
++
++ /* Front color renderbuffer */
++ gfb->color_rb[0] = glamo_create_renderbuffer(rgbFormat, driDrawPriv);
++ _mesa_add_renderbuffer(&gfb->base, BUFFER_FRONT_LEFT,
++ &gfb->color_rb[0]->base);
++
++ /* Back color renderbuffer, if requested */
++ if ( mesaVis->doubleBufferMode ) {
++ gfb->color_rb[1] = glamo_create_renderbuffer(rgbFormat, driDrawPriv);
++ _mesa_add_renderbuffer(&gfb->base, BUFFER_BACK_LEFT,
++ &gfb->color_rb[1]->base);
++ }
++
++ if ( mesaVis->depthBits == 16 ) {
++ struct glamo_renderbuffer *depth;
++ depth = glamo_create_renderbuffer(GL_DEPTH_COMPONENT16, driDrawPriv);
++ _mesa_add_renderbuffer(&gfb->base, BUFFER_DEPTH, &depth->base);
++ }
++
++ /* Add software renderbuffers for the things we can't support in hardware */
++ _mesa_add_soft_renderbuffers(&gfb->base,
++ GL_FALSE, /* color */
++ GL_FALSE, /* depth */
++ mesaVis->stencilBits > 0, /* stencil, if required */
++ mesaVis->accumRedBits > 0, /* accum, if required */
++ GL_FALSE, /* alpha */
++ GL_FALSE /* aux */
++ );
++ driDrawPriv->driverPrivate = (void *)gfb;
++
++ return (driDrawPriv->driverPrivate != NULL);
++}
++
++
++static void glamoDestroyBuffer(__DRIdrawable *driDrawPriv)
++{
++}
++
++
++static void glamoSwapBuffers(__DRIdrawable *driDrawPriv)
++{
++ printf("glamoSwapBuffers\n"); fflush(stdout);
++}
++
++
++/*
++ * Mesa entry points
++ *
++ * See src/mesa/drivers/dri/common/dri_util.h for information about these
++ */
++const struct __DriverAPIRec driDriverAPI = {
++ .InitScreen = glamoInitScreen,
++ .DestroyScreen = glamoDestroyScreen,
++ .CreateContext = glamoCreateContext,
++ .DestroyContext = glamoDestroyContext,
++ .CreateBuffer = glamoCreateBuffer,
++ .DestroyBuffer = glamoDestroyBuffer,
++ .SwapBuffers = glamoSwapBuffers,
++ .MakeCurrent = glamoMakeCurrent,
++ .UnbindContext = glamoUnbindContext,
++ .GetSwapInfo = NULL, /* Not used */
++ .WaitForMSC = NULL,
++ .WaitForSBC = NULL,
++ .SwapBuffersMSC = NULL,
++ .CopySubBuffer = NULL,
++ .GetDrawableMSC = NULL, /* Not used */
++ .InitScreen2 = glamoInitScreen2, /* For DRI2 */
++};
++
++/* This is the table of extensions that the loader will dlsym() for. */
++PUBLIC const __DRIextension *__driDriverExtensions[] = {
++ &driCoreExtension.base,
++ &driLegacyExtension.base,
++ &driDRI2Extension.base,
++ NULL
++};
++
++/* kate: space-indent on; indent-width 3; mixedindent off; indent-mode cstyle; */
+diff --git a/src/mesa/drivers/dri/glamo/glamo_screen.h b/src/mesa/drivers/dri/glamo/glamo_screen.h
+new file mode 100644
+index 0000000..3f2eb5f
+--- /dev/null
++++ b/src/mesa/drivers/dri/glamo/glamo_screen.h
+@@ -0,0 +1,44 @@
++/*
++ * Direct Rendering Support for SMedia Glamo 336x/337x
++ *
++ * (c) 2009 Thomas White <taw@bitwiz.org.uk>
++ * Roughly based on sis_screen.h (c) 2003 Eric Anholt
++ *
++ * 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, sublicense,
++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS 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 __GLAMO_SCREEN_H
++#define __GLAMO_SCREEN_H
++
++#include "xmlconfig.h"
++#include "dri_util.h"
++
++#include <glamo_bo_gem.h>
++
++typedef struct {
++
++ __DRIscreen *driScreen;
++ driOptionCache optionCache;
++
++ struct glamo_bo_manager *bom;
++
++} glamoScreenRec, *glamoScreenPtr;
++
++#endif /* __GLAMO_SCREEN_H */
++
++/* kate: space-indent on; indent-width 3; mixedindent off; indent-mode cstyle; */
+diff --git a/src/mesa/drivers/dri/glamo/glamo_state.c b/src/mesa/drivers/dri/glamo/glamo_state.c
+new file mode 100644
+index 0000000..3aa2f8b
+--- /dev/null
++++ b/src/mesa/drivers/dri/glamo/glamo_state.c
+@@ -0,0 +1,305 @@
++/*
++ * Direct Rendering Support for SMedia Glamo 336x/337x
++ *
++ * (c) 2009-2010 Thomas White <taw@bitwiz.org.uk>
++ * Roughly based on sis_state.c (c) 2003 Eric Anholt
++ *
++ * 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, sublicense,
++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS 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.
++ *
++ *
++ * Also partially based on intel_fbo.c, to which the following notice applies:
++ *
++ * Copyright 2006 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 "main/context.h"
++#include "main/framebuffer.h"
++#include "main/api_arrayelt.h"
++#include "main/macros.h"
++#include "swrast/swrast.h"
++#include "swrast_setup/swrast_setup.h"
++#include "tnl/tnl.h"
++
++#include "glamo_fbo.h"
++#include "glamo_state.h"
++#include "glamo_context.h"
++#include "glamo_cmdq.h"
++#include "glamo_regs.h"
++
++
++static void glamoResizeBuffers(struct gl_context *ctx, struct gl_framebuffer *fb,
++ GLuint width, GLuint height)
++{
++ struct glamo_framebuffer *glamo_fb = (struct glamo_framebuffer *)fb;
++ int i;
++
++ _mesa_resize_framebuffer(ctx, fb, width, height);
++
++ fb->Initialized = GL_TRUE; /* XXX remove someday */
++
++ if (fb->Name != 0) {
++ return;
++ }
++
++ /* Make sure all window system renderbuffers are up to date */
++ for (i = 0; i < 2; i++) {
++ struct gl_renderbuffer *rb = &glamo_fb->color_rb[i]->base;
++
++ /* only resize if size is changing */
++ if (rb && (rb->Width != width || rb->Height != height)) {
++ rb->AllocStorage(ctx, rb, rb->InternalFormat,
++ width, height);
++ }
++ }
++}
++
++
++static void glamoClear(struct gl_context *ctx, GLbitfield mask)
++{
++ glamoContext *gCtx;
++ struct gl_framebuffer *fb;
++ int i;
++
++ gCtx = GLAMO_CONTEXT(ctx);
++ fb = ctx->DrawBuffer;
++
++ printf("glamoClear (%f %f %f %f)\n", ctx->Color.ClearColor[0],
++ ctx->Color.ClearColor[1], ctx->Color.ClearColor[2],
++ ctx->Color.ClearColor[3]); fflush(stdout);
++
++ for (i = 0; i < fb->_NumColorDrawBuffers; i++) {
++
++ struct glamo_renderbuffer *grb;
++
++ grb = glamo_renderbuffer(fb->_ColorDrawBuffers[i]);
++
++ glamoDRMStartBurst(gCtx, GLAMO_REG_2D_DST_X);
++ glamoDRMAddData(gCtx, fb->_Xmin, 2); /* dest X */
++ glamoDRMAddData(gCtx, fb->_Ymin, 2); /* dest Y */
++ glamoDRMAddBO(gCtx, grb->bo); /* dest L/H */
++ glamoDRMAddData(gCtx, grb->pitch & 0x7ff, 2); /* dest pitch */
++ glamoDRMAddData(gCtx, grb->height, 2); /* dest height */
++ glamoDRMAddData(gCtx, fb->_Xmax-fb->_Xmin, 2); /* width */
++ glamoDRMAddData(gCtx, fb->_Ymax-fb->_Ymin, 2); /* height */
++ glamoDRMAddData(gCtx, 0x0000, 2); /* patt L */
++ glamoDRMAddData(gCtx, 0x0000, 2); /* patt H */
++ glamoDRMAddData(gCtx, gCtx->col_clear, 2); /* FG colour */
++ glamoDRMDispatch(gCtx);
++
++ glamoDRMStartBurst(gCtx, GLAMO_REG_2D_COMMAND1);
++ glamoDRMAddData(gCtx, 0x0000, 2); /* Cmd param 1 */
++ glamoDRMAddData(gCtx, 0xf0 << 8, 2); /* Cmd param 2 */
++ glamoDRMAddData(gCtx, 0x0000, 2); /* Cmd param 3 */
++ glamoDRMDispatch(gCtx);
++
++ }
++}
++
++
++static void glamoClearColor(struct gl_context *ctx, const GLfloat color[4])
++{
++ struct glamo_context *gCtx = GLAMO_CONTEXT(ctx);
++ GLubyte col_byte[4];
++
++ printf("glamoClearColor (%f %f %f %f)\n", color[0], color[1], color[2],
++ color[3]); fflush(stdout);
++
++ CLAMPED_FLOAT_TO_UBYTE(col_byte[0], color[0]);
++ CLAMPED_FLOAT_TO_UBYTE(col_byte[1], color[1]);
++ CLAMPED_FLOAT_TO_UBYTE(col_byte[2], color[2]);
++ CLAMPED_FLOAT_TO_UBYTE(col_byte[3], color[3]);
++
++ gCtx->col_clear = GLAMO_PACKCOLOR565(col_byte[0], col_byte[1],
++ col_byte[2]);
++}
++
++
++static void glamoShadeModel(struct gl_context *ctx, GLenum mode)
++{
++ printf("glamoShadeModel\n"); fflush(stdout);
++}
++
++
++static void glamoViewport(struct gl_context *ctx, GLint x, GLint y,
++ GLsizei width, GLsizei height )
++{
++ struct glamo_context *gCtx = GLAMO_CONTEXT(ctx);
++ __DRIcontext *driContext = gCtx->driContext;
++ void (*old_viewport)(struct gl_context *ctx, GLint x, GLint y,
++ GLsizei w, GLsizei h);
++
++ if ( !driContext->driScreenPriv->dri2.enabled ) return;
++
++ /* TODO: Flush before fiddling with fake front buffer */
++
++ if ( ctx->DrawBuffer->Name == 0 ) {
++
++ glamo_update_renderbuffers(driContext,
++ driContext->driDrawablePriv);
++ if ( driContext->driDrawablePriv
++ != driContext->driReadablePriv ) {
++ glamo_update_renderbuffers(driContext,
++ driContext->driReadablePriv);
++ }
++
++ }
++
++ old_viewport = ctx->Driver.Viewport;
++ ctx->Driver.Viewport = NULL;
++ gCtx->driDrawable = driContext->driDrawablePriv;
++ ctx->Driver.Viewport = old_viewport;
++}
++
++
++static void glamoUploadMatrix(struct glamo_context *gCtx, uint16_t mreg,
++ GLfloat *matrix)
++{
++ int i;
++ char *type;
++
++ switch ( mreg ) {
++ case G3D_MATRIX_MVP :
++ type = "MVP"; break;
++ case G3D_MATRIX_MV :
++ type = "MV"; break;
++ case G3D_MATRIX_IMVP :
++ type = "inverse MVP"; break;
++ default :
++ type = "unknown"; break;
++ }
++ printf("Uploading %s matrix...\n", type);
++
++ glamoDRMStartBurst(gCtx, mreg);
++ if ( mreg != G3D_MATRIX_IMVP ) {
++ for ( i=0; i<16; i++ ) {
++ glamoDRMAddData(gCtx, float7s16(matrix[i]), 4);
++ }
++ } else {
++ /* Normal matrix needs special treatment */
++ for ( i=0; i<3; i++ ) {
++ glamoDRMAddData(gCtx, float7s16(matrix[4*i]), 4);
++ glamoDRMAddData(gCtx, float7s16(matrix[4*i+1]), 4);
++ glamoDRMAddData(gCtx, float7s16(matrix[4*i+2]), 4);
++ }
++ }
++ glamoDRMDispatch(gCtx);
++}
++
++
++GLboolean glamoValidateState(struct gl_context *ctx, GLuint new_state)
++{
++ struct glamo_context *gCtx = GLAMO_CONTEXT(ctx);
++
++ if ( new_state & (_NEW_MODELVIEW|_NEW_PROJECTION) ) {
++
++ glamoUploadMatrix(gCtx, G3D_MATRIX_MVP,
++ ctx->_ModelProjectMatrix.m);
++
++ /* FIXME: The following two aren't needed unless lighting
++ * is in use... */
++ glamoUploadMatrix(gCtx, G3D_MATRIX_MV,
++ ctx->ModelviewMatrixStack.Top->m);
++ _math_matrix_alloc_inv(&(ctx->_ModelProjectMatrix));
++ _math_matrix_analyse(&(ctx->_ModelProjectMatrix));
++ glamoUploadMatrix(gCtx, G3D_MATRIX_IMVP,
++ ctx->_ModelProjectMatrix.inv);
++ }
++
++ gCtx->new_state = 0;
++ return GL_TRUE;
++}
++
++
++static void glamoUpdateState(struct gl_context *ctx, GLbitfield new_state)
++{
++ struct glamo_context *gCtx = GLAMO_CONTEXT(ctx);
++
++ printf("glamoUpdateState\n");
++
++ _swrast_InvalidateState(ctx, new_state);
++ _swsetup_InvalidateState(ctx, new_state);
++ _vbo_InvalidateState(ctx, new_state);
++ _tnl_InvalidateState(ctx, new_state);
++ _ae_invalidate_state(ctx, new_state);
++
++ /* Make a note that some state has changed,
++ * so that it can be sent to the GPU later. */
++ gCtx->new_state |= new_state;
++}
++
++
++static void glamoFlush(struct gl_context *ctx)
++{
++ printf("glamoFlush\n");
++}
++
++
++void glamoInitStateFuncs(struct gl_context *ctx)
++{
++ ctx->Driver.UpdateState = glamoUpdateState;
++ ctx->Driver.Clear = glamoClear;
++ ctx->Driver.ClearColor = glamoClearColor;
++ ctx->Driver.ClearDepth = NULL;
++ ctx->Driver.ClearStencil = NULL;
++ ctx->Driver.AlphaFunc = NULL;
++ ctx->Driver.BlendFuncSeparate = NULL;
++ ctx->Driver.ColorMask = NULL;
++ ctx->Driver.CullFace = NULL;
++ ctx->Driver.DepthMask = NULL;
++ ctx->Driver.DepthFunc = NULL;
++ ctx->Driver.DepthRange = NULL;
++ ctx->Driver.DrawBuffer = NULL;
++ ctx->Driver.Enable = NULL;
++ ctx->Driver.FrontFace = NULL;
++ ctx->Driver.Fogfv = NULL;
++ ctx->Driver.Hint = NULL;
++ ctx->Driver.Lightfv = NULL;
++ ctx->Driver.LogicOpcode = NULL;
++ ctx->Driver.PolygonMode = NULL;
++ ctx->Driver.PolygonStipple = NULL;
++ ctx->Driver.ReadBuffer = NULL;
++ ctx->Driver.RenderMode = NULL;
++ ctx->Driver.Scissor = NULL;
++ ctx->Driver.ShadeModel = glamoShadeModel;
++ ctx->Driver.LightModelfv = NULL;
++ ctx->Driver.Viewport = glamoViewport;
++ ctx->Driver.ResizeBuffers = glamoResizeBuffers;
++ ctx->Driver.Flush = glamoFlush;
++}
+diff --git a/src/mesa/drivers/dri/glamo/glamo_state.h b/src/mesa/drivers/dri/glamo/glamo_state.h
+new file mode 100644
+index 0000000..c3872c0
+--- /dev/null
++++ b/src/mesa/drivers/dri/glamo/glamo_state.h
+@@ -0,0 +1,34 @@
++/*
++ * Direct Rendering Support for SMedia Glamo 336x/337x
++ *
++ * (c) 2009 Thomas White <taw@bitwiz.org.uk>
++ * Roughly based on sis_state.h (c) 2003 Eric Anholt
++ *
++ * 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, sublicense,
++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS 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 __GLAMO_STATE_H
++#define __GLAMO_STATE_H
++
++#include "main/context.h"
++
++extern void glamoInitStateFuncs(struct gl_context *ctx);
++
++#endif /* __GLAMO_STATE_H */
++
++/* kate: space-indent on; indent-width 3; mixedindent off; indent-mode cstyle; */
+diff --git a/src/mesa/drivers/dri/glamo/glamo_tris.c b/src/mesa/drivers/dri/glamo/glamo_tris.c
+new file mode 100644
+index 0000000..c45fe53
+--- /dev/null
++++ b/src/mesa/drivers/dri/glamo/glamo_tris.c
+@@ -0,0 +1,310 @@
++/*
++ * Direct Rendering Support for SMedia Glamo 336x/337x
++ *
++ * (c) 2009 Thomas White <taw@bitwiz.org.uk>
++ *
++ * 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, sublicense,
++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS 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.
++ *
++ *
++ * Based on intel_tris.c, to which the following notice applies:
++ *
++ * 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 <glamo_bo.h>
++#include <glamo_bo_gem.h>
++#include <glamo_drm.h>
++
++#include "main/mtypes.h"
++#include "swrast/swrast.h"
++#include "tnl/t_context.h"
++#include "tnl/t_vertex.h"
++#include "tnl/t_pipeline.h"
++
++#include "glamo_tris.h"
++#include "glamo_context.h"
++
++
++static void glamoRunPipeline(struct gl_context *ctx)
++{
++ printf("glamoRunPipeline\n");
++
++ /* TODO: Emit state */
++
++ _tnl_run_pipeline(ctx);
++}
++
++
++static void glamoRenderStart(struct gl_context *ctx)
++{
++ struct glamo_context *gCtx = GLAMO_CONTEXT(ctx);
++
++ /* Decide which attributes will be used */
++ gCtx->vertex_attrs[0].attrib = _TNL_ATTRIB_POS;
++ gCtx->vertex_attrs[0].format = EMIT_4F;
++
++ gCtx->vertex_size = _tnl_install_attrs(ctx, gCtx->vertex_attrs, 1,
++ NULL, 0);
++}
++
++
++static void glamoRenderFinish(struct gl_context *ctx)
++{
++ printf("glamoRenderFinish\n");
++}
++
++
++static void glamoPrimitiveNotify(struct gl_context *ctx, GLenum prim)
++{
++ printf("glamoPrimitiveNotify\n");
++}
++
++
++uint32_t *glamoGetPrimSpace(struct glamo_context *gCtx, unsigned int count)
++{
++ uint32_t *addr;
++
++ printf("glamoGetPrimSpace\n");
++
++ /* Check for space in the existing VB */
++ if (gCtx->prim.vb_bo == NULL || (gCtx->prim.current_offset +
++ count * gCtx->vertex_size) > GLAMO_VB_SIZE) {
++
++ /* Not enough space, or no VB existing. Start a new one... */
++ if (gCtx->prim.vb == NULL) {
++ printf("Allocated %i bytes\n", GLAMO_VB_SIZE);
++ gCtx->prim.vb = malloc(GLAMO_VB_SIZE);
++ }
++ gCtx->prim.vb_bo = glamo_bo_open(gCtx->glamoScreen->bom, 0,
++ GLAMO_VB_SIZE, 4,
++ GLAMO_GEM_DOMAIN_VRAM, 0);
++ gCtx->prim.start_offset = 0;
++ gCtx->prim.current_offset = 0;
++ }
++
++ addr = (uint32_t *)(gCtx->prim.vb + gCtx->prim.current_offset);
++ gCtx->prim.current_offset += gCtx->vertex_size * count;
++ gCtx->prim.count += count;
++
++ return addr;
++}
++
++
++#define COPY_DWORDS( j, vb, vertsize, v ) \
++do { \
++ for ( j = 0 ; j < vertsize ; j++ ) { \
++ vb[j] = ((GLuint *)v)[j]; \
++ } \
++ vb += vertsize; \
++} while (0)
++
++
++static void glamo_draw_triangle(struct glamo_context *gCtx,
++ glamoVertexPtr v0, glamoVertexPtr v1,
++ glamoVertexPtr v2)
++{
++ GLuint *vb = glamoGetPrimSpace(gCtx, 3);
++ int j;
++
++ COPY_DWORDS(j, vb, gCtx->vertex_size, v0);
++ COPY_DWORDS(j, vb, gCtx->vertex_size, v1);
++ COPY_DWORDS(j, vb, gCtx->vertex_size, v2);
++}
++
++
++static void glamo_draw_line(struct glamo_context *gCtx,
++ glamoVertexPtr v0, glamoVertexPtr v1)
++{
++ GLuint *vb = glamoGetPrimSpace(gCtx, 2);
++ int j;
++
++ COPY_DWORDS(j, vb, gCtx->vertex_size, v0);
++ COPY_DWORDS(j, vb, gCtx->vertex_size, v1);
++}
++
++
++static void glamo_draw_point(struct glamo_context *gCtx, glamoVertexPtr v0)
++{
++ GLuint *vb = glamoGetPrimSpace(gCtx, 2);
++ int j;
++
++ COPY_DWORDS(j, vb, gCtx->vertex_size, v0);
++}
++
++
++#define TRI( a, b, c ) \
++do { \
++ glamo_draw_triangle(gCtx, a, b, c ); \
++} while (0)
++
++
++#define QUAD( a, b, c, d ) \
++printf("Drawing a quad\n"); \
++do { \
++ glamo_draw_triangle(gCtx, a, b, d); \
++ glamo_draw_triangle(gCtx, b, c, d); \
++} while (0)
++
++
++#define LINE(v0, v1) \
++do { \
++ glamo_draw_line(gCtx, v0, v1); \
++} while (0)
++
++
++#define POINT(v0) \
++do { \
++ glamo_draw_point(gCtx, v0); \
++} while (0)
++
++
++#define IND (0)
++#define TAG(x) x
++#include "tnl_dd/t_dd_tritmp.h"
++
++#define IND (0)
++#define TAG(x) x##_offset
++#include "tnl_dd/t_dd_tritmp.h"
++
++#define IND (0)
++#define TAG(x) x##_twoside
++#include "tnl_dd/t_dd_tritmp.h"
++
++#define IND (0)
++#define TAG(x) x##_twoside_offset
++#include "tnl_dd/t_dd_tritmp.h"
++
++#define IND (0)
++#define TAG(x) x##_unfilled
++#include "tnl_dd/t_dd_tritmp.h"
++
++#define IND (0)
++#define TAG(x) x##_offset_unfilled
++#include "tnl_dd/t_dd_tritmp.h"
++
++#define IND (0)
++#define TAG(x) x##_twoside_unfilled
++#include "tnl_dd/t_dd_tritmp.h"
++
++#define IND (0)
++#define TAG(x) x##_twoside_offset_unfilled
++#include "tnl_dd/t_dd_tritmp.h"
++
++#define IND (0)
++#define TAG(x) x##_fallback
++#include "tnl_dd/t_dd_tritmp.h"
++
++#define IND (0)
++#define TAG(x) x##_offset_fallback
++#include "tnl_dd/t_dd_tritmp.h"
++
++#define IND (0)
++#define TAG(x) x##_twoside_fallback
++#include "tnl_dd/t_dd_tritmp.h"
++
++#define IND (0)
++#define TAG(x) x##_twoside_offset_fallback
++#include "tnl_dd/t_dd_tritmp.h"
++
++#define IND (0)
++#define TAG(x) x##_unfilled_fallback
++#include "tnl_dd/t_dd_tritmp.h"
++
++#define IND (0)
++#define TAG(x) x##_offset_unfilled_fallback
++#include "tnl_dd/t_dd_tritmp.h"
++
++#define IND (0)
++#define TAG(x) x##_twoside_unfilled_fallback
++#include "tnl_dd/t_dd_tritmp.h"
++
++#define IND (0)
++#define TAG(x) x##_twoside_offset_unfilled_fallback
++#include "tnl_dd/t_dd_tritmp.h"
++
++
++static void init_rast_tab()
++{
++ init();
++ init_offset();
++ init_twoside();
++ init_twoside_offset();
++ init_unfilled();
++ init_offset_unfilled();
++ init_twoside_unfilled();
++ init_twoside_offset_unfilled();
++ init_fallback();
++ init_offset_fallback();
++ init_twoside_fallback();
++ init_twoside_offset_fallback();
++ init_unfilled_fallback();
++ init_offset_unfilled_fallback();
++ init_twoside_unfilled_fallback();
++ init_twoside_offset_unfilled_fallback();
++}
++
++
++void glamoInitTriFuncs(struct gl_context *ctx)
++{
++ TNLcontext *tnl = TNL_CONTEXT(ctx);
++ struct glamo_context *gCtx = GLAMO_CONTEXT(ctx);
++ static int firsttime = 1;
++
++ if (firsttime) {
++ init_rast_tab();
++ firsttime = 0;
++ }
++
++ gCtx->prim.start_offset = 0;
++ gCtx->prim.current_offset = 0;
++ gCtx->prim.vb_bo = NULL;
++ gCtx->prim.vb = NULL;
++ gCtx->prim.count = 0;
++
++ tnl->Driver.RunPipeline = glamoRunPipeline;
++ tnl->Driver.Render.Start = glamoRenderStart;
++ tnl->Driver.Render.Finish = glamoRenderFinish;
++ tnl->Driver.Render.PrimitiveNotify = glamoPrimitiveNotify;
++ tnl->Driver.Render.ResetLineStipple = _swrast_ResetLineStipple;
++ tnl->Driver.Render.BuildVertices = _tnl_build_vertices;
++ tnl->Driver.Render.CopyPV = _tnl_copy_pv;
++ tnl->Driver.Render.Interp = _tnl_interp;
++}
+diff --git a/src/mesa/drivers/dri/glamo/glamo_tris.h b/src/mesa/drivers/dri/glamo/glamo_tris.h
+new file mode 100644
+index 0000000..ea396c1
+--- /dev/null
++++ b/src/mesa/drivers/dri/glamo/glamo_tris.h
+@@ -0,0 +1,38 @@
++/*
++ * Direct Rendering Support for SMedia Glamo 336x/337x
++ *
++ * (c) 2009 Thomas White <taw@bitwiz.org.uk>
++ *
++ * 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, sublicense,
++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS 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 __GLAMO_TRIS_H
++#define __GLAMO_TRIS_H
++
++#include "main/mtypes.h"
++
++#include "glamo_context.h"
++
++/* Amount of space reserved for vertex submission */
++#define GLAMO_VB_SIZE (32*1024)
++
++extern void glamoInitTriFuncs(struct gl_context *ctx);
++extern uint32_t *glamoGetPrimSpace(struct glamo_context *gCtx,
++ unsigned int count);
++
++#endif /* __GLAMO_TRIS_H */
+diff --git a/src/mesa/tnl_dd/t_dd_dmatmp.h b/src/mesa/tnl_dd/t_dd_dmatmp.h
+index 997fc0b..e3c9119 100644
+--- a/src/mesa/tnl_dd/t_dd_dmatmp.h
++++ b/src/mesa/tnl_dd/t_dd_dmatmp.h
+@@ -127,6 +127,8 @@ static void TAG(render_points_verts)( struct gl_context *ctx,
+ currentsz = dmasz;
+ }
+
++ FLUSH();
++
+ } else {
+ fprintf(stderr, "%s - cannot draw primitive\n", __FUNCTION__);
+ return;
+@@ -162,6 +164,8 @@ static void TAG(render_lines_verts)( struct gl_context *ctx,
+ currentsz = dmasz;
+ }
+
++ FLUSH();
++
+ } else {
+ fprintf(stderr, "%s - cannot draw primitive\n", __FUNCTION__);
+ return;
+@@ -191,7 +195,7 @@ static void TAG(render_line_strip_verts)( struct gl_context *ctx,
+ TAG(emit_verts)( ctx, j, nr, ALLOC_VERTS(nr) );
+ currentsz = dmasz;
+ }
+-
++
+ FLUSH();
+
+ } else {
+@@ -294,6 +298,8 @@ static void TAG(render_triangles_verts)( struct gl_context *ctx,
+ TAG(emit_verts)( ctx, j, nr, ALLOC_VERTS(nr) );
+ currentsz = dmasz;
+ }
++
++ FLUSH();
+ }
+
+
+@@ -567,6 +573,8 @@ static void TAG(render_quads_verts)( struct gl_context *ctx,
+ TAG(emit_verts)( ctx, j, nr, ALLOC_VERTS(nr) );
+ currentsz = dmasz;
+ }
++
++ FLUSH();
+ }
+ else if (HAVE_ELTS) {
+ /* Hardware doesn't have a quad primitive type -- try to
+@@ -640,6 +648,8 @@ static void TAG(render_quads_verts)( struct gl_context *ctx,
+ tmp = EMIT_VERTS(ctx, j + 1, 3, tmp);
+ (void) tmp;
+ }
++
++ FLUSH();
+ }
+ else {
+ /* Vertices won't fit in a single buffer, should never happen.
diff --git a/recipes/mesa/mesa-7.10/uclibc.patch b/recipes/mesa/mesa-7.10/uclibc.patch
new file mode 100644
index 0000000..0508112
--- /dev/null
+++ b/recipes/mesa/mesa-7.10/uclibc.patch
@@ -0,0 +1,26 @@
+Index: Mesa-7.9.1/src/mesa/main/imports.c
+===================================================================
+--- Mesa-7.9.1.orig/src/mesa/main/imports.c 2010-12-15 13:50:00.000000000 -0800
++++ Mesa-7.9.1/src/mesa/main/imports.c 2011-01-10 12:23:48.848656001 -0800
+@@ -757,7 +757,7 @@
+ float
+ _mesa_strtof( const char *s, char **end )
+ {
+-#if defined(_GNU_SOURCE) && !defined(__CYGWIN__) && !defined(__FreeBSD__)
++#if defined(_GNU_SOURCE) && !defined(__CYGWIN__) && !defined(__FreeBSD__) && !defined(__UCLIBC__)
+ static locale_t loc = NULL;
+ if (!loc) {
+ loc = newlocale(LC_CTYPE_MASK, "C", NULL);
+Index: Mesa-7.9.1/src/glsl/strtod.c
+===================================================================
+--- Mesa-7.9.1.orig/src/glsl/strtod.c 2011-01-10 20:08:01.568656001 -0800
++++ Mesa-7.9.1/src/glsl/strtod.c 2011-01-10 20:08:39.898656001 -0800
+@@ -44,7 +44,7 @@
+ double
+ glsl_strtod(const char *s, char **end)
+ {
+-#if defined(_GNU_SOURCE) && !defined(__CYGWIN__) && !defined(__FreeBSD__)
++#if defined(_GNU_SOURCE) && !defined(__CYGWIN__) && !defined(__FreeBSD__) && !defined(__UCLIBC__)
+ static locale_t loc = NULL;
+ if (!loc) {
+ loc = newlocale(LC_CTYPE_MASK, "C", NULL);
diff --git a/recipes/mesa/mesa-dri_7.10.bb b/recipes/mesa/mesa-dri_7.10.bb
new file mode 100644
index 0000000..26b56e4
--- /dev/null
+++ b/recipes/mesa/mesa-dri_7.10.bb
@@ -0,0 +1,4 @@
+require mesa-common.inc
+require mesa-${PV}.inc
+require mesa-dri.inc
+PR = "${INC_PR}.0"
diff --git a/recipes/mesa/mesa-xlib_7.10.bb b/recipes/mesa/mesa-xlib_7.10.bb
new file mode 100644
index 0000000..93bb8cd
--- /dev/null
+++ b/recipes/mesa/mesa-xlib_7.10.bb
@@ -0,0 +1,4 @@
+require mesa-common.inc
+require mesa-${PV}.inc
+require mesa-xlib.inc
+PR = "${INC_PR}.0"
diff --git a/recipes/mesa/mesa_7.10.bb b/recipes/mesa/mesa_7.10.bb
new file mode 100644
index 0000000..4cb8db7
--- /dev/null
+++ b/recipes/mesa/mesa_7.10.bb
@@ -0,0 +1,6 @@
+# This is a dummy package so OE can use the poky mesa files
+require mesa-dri_${PV}.bb
+
+PR = "${INC_PR}.0"
+
+EXTRA_OECONF += "--disable-egl"
--
1.7.4.rc1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2 2/2] mesa: add new 7.10 version, with D_P -2
2011-01-12 8:42 ` [PATCH v2 2/2] mesa: add new 7.10 version, with D_P -2 Martin Jansa
@ 2011-01-12 8:57 ` Khem Raj
0 siblings, 0 replies; 4+ messages in thread
From: Khem Raj @ 2011-01-12 8:57 UTC (permalink / raw)
To: openembedded-devel
On 1/12/2011 12:42 AM, Martin Jansa wrote:
> * someone please test uclibc build if old uclibc.patch is enough
>
Dont worry we can fix it later if something falls out.
> Signed-off-by: Martin Jansa<Martin.Jansa@gmail.com>
> ---
> recipes/mesa/mesa-7.10.inc | 19 +
> recipes/mesa/mesa-7.10/glamo.patch | 2425 +++++++++++++++++++++++++++++++++++
> recipes/mesa/mesa-7.10/uclibc.patch | 26 +
> recipes/mesa/mesa-dri_7.10.bb | 4 +
> recipes/mesa/mesa-xlib_7.10.bb | 4 +
> recipes/mesa/mesa_7.10.bb | 6 +
> 6 files changed, 2484 insertions(+), 0 deletions(-)
> create mode 100644 recipes/mesa/mesa-7.10.inc
> create mode 100644 recipes/mesa/mesa-7.10/glamo.patch
> create mode 100644 recipes/mesa/mesa-7.10/uclibc.patch
> create mode 100644 recipes/mesa/mesa-dri_7.10.bb
> create mode 100644 recipes/mesa/mesa-xlib_7.10.bb
> create mode 100644 recipes/mesa/mesa_7.10.bb
>
> diff --git a/recipes/mesa/mesa-7.10.inc b/recipes/mesa/mesa-7.10.inc
> new file mode 100644
> index 0000000..9dc080a
> --- /dev/null
> +++ b/recipes/mesa/mesa-7.10.inc
> @@ -0,0 +1,19 @@
> +SRC_URI = "ftp://ftp.freedesktop.org/pub/mesa/${PV}/MesaLib-${PV}.tar.bz2;name=archive \
> + file://glamo.patch \
> + file://uclibc.patch \
> + "
> +
> +DEPENDS += "talloc"
> +
> +SRC_URI[archive.md5sum] = "33fb94eccc02cbb4d8d1365615e38e46"
> +SRC_URI[archive.sha256sum] = "bcf28f43f39c28da271c0f5857fb32898d4ade3e035e80a0ceece1c2df6e0aca"
> +
> +EXTRA_OECONF += " --disable-gallium"
> +
> +#needs more testing and updated glamo.patch before making default
> +DEFAULT_PREFERENCE = "-2"
> +
> +do_configure_prepend() {
> + #check for python not python2, because python-native does not stage python2 binary/link
> + sed -i 's/AC_CHECK_PROGS(\[PYTHON2\], \[python2 python\])/AC_CHECK_PROGS(\[PYTHON2\], \[python python\])/g' ${S}/configure.ac
> +}
> diff --git a/recipes/mesa/mesa-7.10/glamo.patch b/recipes/mesa/mesa-7.10/glamo.patch
> new file mode 100644
> index 0000000..5aa45d5
> --- /dev/null
> +++ b/recipes/mesa/mesa-7.10/glamo.patch
> @@ -0,0 +1,2425 @@
> +git diff upstream/7.10 and gitorious/7.10
> +
> +http://gitorious.org/mesa/mesa/commits/7.10
> +
> +diff --git a/configs/autoconf.in b/configs/autoconf.in
> +index e2d70c6..5874955 100644
> +--- a/configs/autoconf.in
> ++++ b/configs/autoconf.in
> +@@ -120,7 +120,7 @@ OSMESA_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @OSMESA_MESA_DEPS@ \
> + $(EXTRA_LIB_PATH) @OSMESA_LIB_DEPS@
> + EGL_LIB_DEPS = $(EXTRA_LIB_PATH) @EGL_LIB_DEPS@
> + GLU_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @GLU_MESA_DEPS@ \
> +- $(EXTRA_LIB_PATH) @GLU_LIB_DEPS@
> ++ $(EXTRA_LIB_PATH) @GLU_LIB_DEPS@ -lstdc++
> + GLUT_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @GLUT_MESA_DEPS@ \
> + $(EXTRA_LIB_PATH) @GLUT_LIB_DEPS@
> + GLW_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @GLW_MESA_DEPS@ \
> +diff --git a/src/mesa/drivers/dri/glamo/Makefile b/src/mesa/drivers/dri/glamo/Makefile
> +new file mode 100644
> +index 0000000..e77193d
> +--- /dev/null
> ++++ b/src/mesa/drivers/dri/glamo/Makefile
> +@@ -0,0 +1,22 @@
> ++# src/mesa/drivers/dri/glamo/Makefile
> ++
> ++TOP = ../../../../..
> ++include $(TOP)/configs/current
> ++
> ++LIBNAME = glamo_dri.so
> ++
> ++DRIVER_SOURCES = \
> ++ glamo_screen.c glamo_context.c glamo_state.c glamo_fbo.c glamo_tris.c \
> ++ glamo_cmdq.c glamo_render.c
> ++
> ++C_SOURCES = \
> ++ $(COMMON_SOURCES) \
> ++ $(DRIVER_SOURCES)
> ++
> ++ASM_SOURCES =
> ++
> ++DRI_LIB_DEPS += -ldrm_glamo
> ++
> ++include ../Makefile.template
> ++
> ++symlinks:
> +diff --git a/src/mesa/drivers/dri/glamo/glamo_cmdq.c b/src/mesa/drivers/dri/glamo/glamo_cmdq.c
> +new file mode 100644
> +index 0000000..1334f8e
> +--- /dev/null
> ++++ b/src/mesa/drivers/dri/glamo/glamo_cmdq.c
> +@@ -0,0 +1,110 @@
> ++/*
> ++ * Command queue submission via DRM
> ++ *
> ++ * Copyright 2009 Thomas White<taw@bitwiz.org.uk>
> ++ *
> ++ * This program is free software; you can redistribute it and/or
> ++ * modify it under the terms of the GNU General Public License as
> ++ * published by the Free Software Foundation; either version 2 of
> ++ * the License, or (at your option) any later version.
> ++ *
> ++ * This program is distributed in the hope that it will be useful,
> ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> ++ * GNU General Public License for more details.
> ++ *
> ++ * You should have received a copy of the GNU General Public License
> ++ * along with this program; if not, write to the Free Software
> ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> ++ * MA 02111-1307 USA
> ++ */
> ++
> ++
> ++#include<stdint.h>
> ++#include<stdlib.h>
> ++#include<drm.h>
> ++#include<glamo_drm.h>
> ++#include<glamo_bo.h>
> ++
> ++#include "glamo_context.h"
> ++#include "glamo_cmdq.h"
> ++
> ++
> ++/* Submit the prepared command sequence to the kernel */
> ++void glamoDRMDispatch(glamoContext *gCtx)
> ++{
> ++ drm_glamo_cmd_burst_t burst;
> ++ int r;
> ++
> ++ burst.base = gCtx->cmd_burst_base;
> ++ burst.data = gCtx->cmdq_drm;
> ++ burst.bufsz = gCtx->cmdq_drm_used * 2; /* -> bytes */
> ++ burst.nobjs = gCtx->cmdq_obj_used;
> ++ burst.objs = gCtx->cmdq_objs;
> ++ burst.obj_pos = gCtx->cmdq_obj_pos;
> ++
> ++ r = drmCommandWrite(gCtx->drm_fd, DRM_GLAMO_CMDBURST,
> ++ &burst, sizeof(burst));
> ++ if ( r != 0 ) {
> ++ fprintf(stderr, "DRM_GLAMO_CMDBURST failed\n");
> ++ }
> ++
> ++ /* Reset counts to zero for the next sequence */
> ++ gCtx->cmdq_obj_used = 0;
> ++ gCtx->cmdq_drm_used = 0;
> ++}
> ++
> ++
> ++void glamoDRMAddData(glamoContext *gCtx, uint32_t val, int len)
> ++{
> ++ if ( gCtx->cmdq_drm_used+4> gCtx->cmdq_drm_size ) {
> ++ fprintf(stderr, "Burst command too large\n");
> ++ return;
> ++ }
> ++
> ++ /* Record command */
> ++ if ( len == 2 ) {
> ++ gCtx->cmdq_drm[gCtx->cmdq_drm_used++] = val& 0xffff;
> ++ } else if ( len == 4 ) {
> ++ gCtx->cmdq_drm[gCtx->cmdq_drm_used++] = val& 0x0000ffff;
> ++ gCtx->cmdq_drm[gCtx->cmdq_drm_used++] = val& 0xffff0000;
> ++ } else {
> ++ fprintf(stderr, "Wrong command length!\n");
> ++ }
> ++}
> ++
> ++
> ++void glamoDRMAddBO(glamoContext *gCtx, struct glamo_bo *bo)
> ++{
> ++ if ( gCtx->cmdq_drm_used+4> gCtx->cmdq_drm_size ) {
> ++ fprintf(stderr, "Burst command too large\n");
> ++ return;
> ++ }
> ++
> ++ /* Record object position */
> ++ gCtx->cmdq_objs[gCtx->cmdq_obj_used] = bo->handle;
> ++ /* -> bytes */
> ++ gCtx->cmdq_obj_pos[gCtx->cmdq_obj_used] = gCtx->cmdq_drm_used * 2;
> ++ gCtx->cmdq_obj_used++;
> ++
> ++ /* Record command */
> ++ gCtx->cmdq_drm[gCtx->cmdq_drm_used++] = 0x0000;
> ++ gCtx->cmdq_drm[gCtx->cmdq_drm_used++] = 0x0000;
> ++}
> ++
> ++
> ++void glamoDRMStartBurst(glamoContext *gCtx, uint16_t base)
> ++{
> ++ gCtx->cmd_burst_base = base;
> ++}
> ++
> ++
> ++void glamoInitCmdqCache(glamoContext *gCtx)
> ++{
> ++ gCtx->cmdq_objs = malloc(1024);
> ++ gCtx->cmdq_obj_pos = malloc(1024);
> ++ gCtx->cmdq_obj_used = 0;
> ++ gCtx->cmdq_drm_used = 0;
> ++ gCtx->cmdq_drm_size = 4 * 1024;
> ++ gCtx->cmdq_drm = malloc(gCtx->cmdq_drm_size);
> ++}
> +diff --git a/src/mesa/drivers/dri/glamo/glamo_cmdq.h b/src/mesa/drivers/dri/glamo/glamo_cmdq.h
> +new file mode 100644
> +index 0000000..7420d7b
> +--- /dev/null
> ++++ b/src/mesa/drivers/dri/glamo/glamo_cmdq.h
> +@@ -0,0 +1,33 @@
> ++/*
> ++ * Command queue submission via DRM
> ++ *
> ++ * Copyright 2009 Thomas White<taw@bitwiz.org.uk>
> ++ *
> ++ * This program is free software; you can redistribute it and/or
> ++ * modify it under the terms of the GNU General Public License as
> ++ * published by the Free Software Foundation; either version 2 of
> ++ * the License, or (at your option) any later version.
> ++ *
> ++ * This program is distributed in the hope that it will be useful,
> ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> ++ * GNU General Public License for more details.
> ++ *
> ++ * You should have received a copy of the GNU General Public License
> ++ * along with this program; if not, write to the Free Software
> ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> ++ * MA 02111-1307 USA
> ++ */
> ++
> ++
> ++#include<stdint.h>
> ++#include<glamo_bo.h>
> ++
> ++#include "glamo_context.h"
> ++
> ++
> ++extern void glamoDRMDispatch(glamoContext *gCtx);
> ++extern void glamoDRMAddBO(glamoContext *gCtx, struct glamo_bo *bo);
> ++extern void glamoDRMAddData(glamoContext *gCtx, uint32_t val, int len);
> ++extern void glamoDRMStartBurst(glamoContext *gCtx, uint16_t base);
> ++extern void glamoInitCmdqCache(glamoContext *gCtx);
> +diff --git a/src/mesa/drivers/dri/glamo/glamo_context.c b/src/mesa/drivers/dri/glamo/glamo_context.c
> +new file mode 100644
> +index 0000000..39eb4e7
> +--- /dev/null
> ++++ b/src/mesa/drivers/dri/glamo/glamo_context.c
> +@@ -0,0 +1,360 @@
> ++/*
> ++ * Direct Rendering Support for SMedia Glamo 336x/337x
> ++ *
> ++ * (c) 2009 Thomas White<taw@bitwiz.org.uk>
> ++ * Roughly based on sis_context.c (c) 2003 Eric Anholt
> ++ * and radeon_common_context.c
> ++ *
> ++ * 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, sublicense,
> ++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
> ++ * THE AUTHORS 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 "dri_util.h"
> ++#include "drirenderbuffer.h"
> ++#include "utils.h"
> ++
> ++#include "swrast/swrast.h"
> ++#include "swrast_setup/swrast_setup.h"
> ++#include "drivers/common/driverfuncs.h"
> ++#include "vbo/vbo.h"
> ++#include "tnl/tnl.h"
> ++#include "tnl/t_pipeline.h"
> ++#include "main/state.h"
> ++
> ++#include "glamo_context.h"
> ++#include "glamo_screen.h"
> ++#include "glamo_state.h"
> ++#include "glamo_fbo.h"
> ++#include "glamo_tris.h"
> ++#include "glamo_render.h"
> ++#include "glamo_cmdq.h"
> ++
> ++#include<glamo_bo.h>
> ++#include<glamo_bo_gem.h>
> ++#include<glamo_drm.h>
> ++
> ++
> ++#define DRIVER_DATE "20090913"
> ++
> ++
> ++static inline struct glamo_renderbuffer *glamo_get_renderbuffer(
> ++ struct gl_framebuffer *fb,
> ++ int att_index)
> ++{
> ++ if ( att_index>= 0 ) {
> ++ struct glamo_renderbuffer *gr;
> ++ gr = glamo_renderbuffer(fb->Attachment[att_index].Renderbuffer);
> ++ return gr;
> ++ } else {
> ++ return NULL;
> ++ }
> ++}
> ++
> ++
> ++static const GLubyte *glamoGetString(struct gl_context *ctx, GLenum name)
> ++{
> ++ static char buffer[128];
> ++
> ++ switch (name) {
> ++ case GL_VENDOR:
> ++ return (GLubyte *)"Thomas White";
> ++ case GL_RENDERER: {
> ++ driGetRendererString(buffer, "Glamo", DRIVER_DATE, 0);
> ++ return (GLubyte *) buffer;
> ++ }
> ++ default:
> ++ return 0;
> ++ }
> ++}
> ++
> ++
> ++/* Called when Mesa needs to know the size of the framebuffer */
> ++static void glamoBufferSize(struct gl_framebuffer *buffer,
> ++ GLuint *width, GLuint *height)
> ++{
> ++ GET_CURRENT_CONTEXT(ctx);
> ++ glamoContextPtr glamo = GLAMO_CONTEXT(ctx);
> ++
> ++ *width = glamo->driDrawable->w;
> ++ *height = glamo->driDrawable->h;
> ++}
> ++
> ++
> ++GLboolean glamoCreateContext(const struct gl_config *glVisual,
> ++ __DRIcontext *driContextPriv,
> ++ void *sharedContextPrivate)
> ++{
> ++ struct gl_context *ctx, *shareCtx;
> ++ __DRIscreen *sPriv = driContextPriv->driScreenPriv;
> ++ glamoContextPtr context;
> ++ glamoScreenPtr glamoScreen;
> ++ struct dd_function_table functions;
> ++
> ++ context = (glamoContextPtr)CALLOC(sizeof(*context));
> ++ if ( context == NULL ) return GL_FALSE;
> ++
> ++ _mesa_init_driver_functions(&functions);
> ++
> ++ /* Allocate the Mesa context */
> ++ if ( sharedContextPrivate )
> ++ shareCtx = ((glamoContextPtr)sharedContextPrivate)->glCtx;
> ++ else
> ++ shareCtx = NULL;
> ++ context->glCtx = _mesa_create_context(glVisual, shareCtx,
> ++ &functions, (void *)context);
> ++ if ( context->glCtx == NULL ) {
> ++ FREE(context);
> ++ return GL_FALSE;
> ++ }
> ++ driContextPriv->driverPrivate = context;
> ++ ctx = context->glCtx;
> ++
> ++ glamoScreen = context->glamoScreen = (glamoScreenPtr)sPriv->private;
> ++
> ++ ctx->Driver.GetString = glamoGetString;
> ++ ctx->Driver.GetBufferSize = glamoBufferSize;
> ++
> ++ context->driContext = driContextPriv;
> ++ context->driScreen = sPriv;
> ++ context->driDrawable = NULL;
> ++ context->drm_fd = sPriv->fd;
> ++
> ++ /* Initialize the software rasterizer and helper modules. */
> ++ _swrast_CreateContext(ctx);
> ++ _vbo_CreateContext(ctx);
> ++ _tnl_CreateContext(ctx);
> ++ _swsetup_CreateContext(ctx);
> ++
> ++ /* Install our pipeline (see glamo_render.c) */
> ++ _tnl_install_pipeline(ctx, glamo_pipeline);
> ++
> ++ _swrast_allow_pixel_fog(ctx, GL_TRUE);
> ++ _swrast_allow_vertex_fog(ctx, GL_FALSE);
> ++ _tnl_allow_pixel_fog(ctx, GL_TRUE);
> ++ _tnl_allow_vertex_fog(ctx, GL_FALSE);
> ++
> ++ glamoInitCmdqCache(context);
> ++ glamoInitStateFuncs(ctx);
> ++ glamoInitTriFuncs(ctx);
> ++
> ++ return GL_TRUE;
> ++}
> ++
> ++
> ++void glamoDestroyContext(__DRIcontext *driContextPriv)
> ++{
> ++ glamoContextPtr context;
> ++
> ++ context = (glamoContextPtr)driContextPriv->driverPrivate;
> ++ assert(context != NULL);
> ++
> ++ if ( context != NULL ) {
> ++
> ++ _swsetup_DestroyContext(context->glCtx);
> ++ _tnl_DestroyContext(context->glCtx);
> ++ _vbo_DestroyContext(context->glCtx);
> ++ _swrast_DestroyContext(context->glCtx);
> ++
> ++ _mesa_destroy_context(context->glCtx);
> ++
> ++ }
> ++
> ++ FREE(context);
> ++}
> ++
> ++
> ++void glamo_update_renderbuffers(__DRIcontext *context,
> ++ __DRIdrawable *drawable)
> ++{
> ++ unsigned int attachments[10];
> ++ __DRIbuffer *buffers;
> ++ __DRIscreen *screen;
> ++ int i, count;
> ++ struct glamo_framebuffer *draw;
> ++ glamoContextPtr glamo;
> ++ struct glamo_bo *bo;
> ++
> ++ draw = drawable->driverPrivate;
> ++ screen = context->driScreenPriv;
> ++ glamo = (glamoContextPtr)context->driverPrivate;
> ++ i = 0;
> ++ if ( draw->color_rb[0] ) {
> ++ attachments[i++] = __DRI_BUFFER_FRONT_LEFT;
> ++ }
> ++ if ( draw->color_rb[1] ) {
> ++ attachments[i++] = __DRI_BUFFER_BACK_LEFT;
> ++ }
> ++
> ++ buffers = screen->dri2.loader->getBuffers(drawable,
> ++ &drawable->w,
> ++ &drawable->h,
> ++ attachments, i,
> ++ &count,
> ++ drawable->loaderPrivate);
> ++ if ( buffers == NULL ) return;
> ++
> ++ /* Set one cliprect to cover the whole drawable */
> ++ drawable->x = 0;
> ++ drawable->y = 0;
> ++ drawable->backX = 0;
> ++ drawable->backY = 0;
> ++ drawable->numClipRects = 1;
> ++ drawable->pClipRects[0].x1 = 0;
> ++ drawable->pClipRects[0].y1 = 0;
> ++ drawable->pClipRects[0].x2 = drawable->w;
> ++ drawable->pClipRects[0].y2 = drawable->h;
> ++ drawable->numBackClipRects = 1;
> ++ drawable->pBackClipRects[0].x1 = 0;
> ++ drawable->pBackClipRects[0].y1 = 0;
> ++ drawable->pBackClipRects[0].x2 = drawable->w;
> ++ drawable->pBackClipRects[0].y2 = drawable->h;
> ++
> ++ /* For each attachment */
> ++ for ( i=0; i<count; i++ ) {
> ++
> ++ struct glamo_renderbuffer *grb;
> ++
> ++ switch ( buffers[i].attachment ) {
> ++ case __DRI_BUFFER_FRONT_LEFT:
> ++ grb = draw->color_rb[0];
> ++ break;
> ++ case __DRI_BUFFER_BACK_LEFT:
> ++ grb = draw->color_rb[1];
> ++ break;
> ++ case __DRI_BUFFER_DEPTH:
> ++ grb = glamo_get_renderbuffer(&draw->base, BUFFER_DEPTH);
> ++ break;
> ++ case __DRI_BUFFER_STENCIL:
> ++ grb = glamo_get_renderbuffer(&draw->base,
> ++ BUFFER_STENCIL);
> ++ break;
> ++ case __DRI_BUFFER_FAKE_FRONT_LEFT:
> ++ grb = draw->color_rb[0];
> ++ break;
> ++ case __DRI_BUFFER_ACCUM:
> ++ default:
> ++ fprintf(stderr,
> ++ "Unhandled buffer attach event,"
> ++ " attachment type %d\n", buffers[i].attachment);
> ++ return;
> ++ }
> ++
> ++ if ( grb == NULL ) {
> ++ /* Don't know how to handle this type of buffer */
> ++ continue;
> ++ }
> ++
> ++ if ( grb->bo ) {
> ++ uint32_t name = glamo_gem_get_name(grb->bo);
> ++ if ( name == buffers[i].name ) {
> ++ /* Buffer already attached. No action needed */
> ++ continue;
> ++ }
> ++ }
> ++
> ++ grb->cpp = buffers[i].cpp;
> ++ grb->pitch = buffers[i].pitch;
> ++ grb->width = drawable->w;
> ++ grb->height = drawable->h;
> ++
> ++ bo = glamo_bo_open(glamo->glamoScreen->bom, buffers[i].name,
> ++ 0, 0, GLAMO_GEM_DOMAIN_VRAM,
> ++ buffers[i].flags);
> ++ if ( bo == NULL ) {
> ++ fprintf(stderr, "Failed to attach buffer %d\n",
> ++ buffers[i].name);
> ++ }
> ++
> ++ glamo_renderbuffer_set_bo(grb, bo);
> ++ glamo_bo_unref(bo);
> ++
> ++ }
> ++
> ++ driUpdateFramebufferSize(glamo->glCtx, drawable);
> ++}
> ++
> ++
> ++GLboolean glamoMakeCurrent(__DRIcontext *driContextPriv,
> ++ __DRIdrawable *driDrawPriv,
> ++ __DRIdrawable *driReadPriv)
> ++{
> ++ struct glamo_framebuffer *draw_fb;
> ++ struct gl_framebuffer *read_fb;
> ++ glamoContextPtr glamo;
> ++
> ++ if ( driContextPriv == NULL ) {
> ++ _mesa_make_current(NULL, NULL, NULL);
> ++ return GL_TRUE;
> ++ }
> ++
> ++ /* The Glamo context we're switching to */
> ++ glamo = (glamoContextPtr)driContextPriv->driverPrivate;
> ++
> ++ glamo->driDrawable = driDrawPriv;
> ++
> ++ /* These two will probably be the same */
> ++ draw_fb = (struct glamo_framebuffer *)driDrawPriv->driverPrivate;
> ++ read_fb = (struct gl_framebuffer *)driReadPriv->driverPrivate;
> ++
> ++ glamo_update_renderbuffers(driContextPriv, driDrawPriv);
> ++ if (driDrawPriv != driReadPriv)
> ++ glamo_update_renderbuffers(driContextPriv, driReadPriv);
> ++
> ++ _mesa_make_current(glamo->glCtx,&draw_fb->base, read_fb);
> ++ _mesa_update_state(glamo->glCtx);
> ++
> ++ return GL_TRUE;
> ++}
> ++
> ++
> ++GLboolean glamoUnbindContext(__DRIcontext *driContextPriv)
> ++{
> ++ return GL_TRUE;
> ++}
> ++
> ++
> ++/* Convert IEEE754 32-bit float to Glamo's signed 24-bit float */
> ++uint32_t float7s16(GLfloat in)
> ++{
> ++ uint32_t a, b;
> ++ uint32_t sign, expo, mant; /* Sign, exponent, significand */
> ++
> ++ a = *(uint32_t *)∈
> ++
> ++ /* This is bad */
> ++ if ( a& 0x40000000 ) {
> ++ printf(stderr, "Warning: Exponent won't fit into 7 bits\n");
> ++ }
> ++
> ++ /* This hopefully isn't a big problem */
> ++ if ( a& 0x0000007f ) {
> ++ printf(stderr, "Warning: Precision lost in FP conversion\n");
> ++ }
> ++
> ++ /* Separate out the right bits */
> ++ mant = a& 0x007fff80; /* Bits 7-22 (bits 0-6 are lost) */
> ++ expo = a& 0x3f800000; /* Bits 23-29 (bit 30 is lost) */
> ++ sign = a& 0x80000000; /* Bit 31 */
> ++
> ++ /* Shift and recombine */
> ++ b = sign>> 8; /* Fills bit 23 */
> ++ b |= expo>> 7; /* Fills bits 16-22 */
> ++ b |= mant>> 7; /* Fills bits 0-15 */
> ++
> ++ return b;
> ++}
> +diff --git a/src/mesa/drivers/dri/glamo/glamo_context.h b/src/mesa/drivers/dri/glamo/glamo_context.h
> +new file mode 100644
> +index 0000000..8de3946
> +--- /dev/null
> ++++ b/src/mesa/drivers/dri/glamo/glamo_context.h
> +@@ -0,0 +1,106 @@
> ++/*
> ++ * Direct Rendering Support for SMedia Glamo 336x/337x
> ++ *
> ++ * (c) 2009 Thomas White<taw@bitwiz.org.uk>
> ++ * Roughly based on sis_context.h (c) 2003 Eric Anholt
> ++ *
> ++ * 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, sublicense,
> ++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
> ++ * THE AUTHORS 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 __GLAMO_CONTEXT_H
> ++#define __GLAMO_CONTEXT_H
> ++
> ++
> ++#include "dri_util.h"
> ++#include "utils.h"
> ++#include "tnl/t_vertex.h"
> ++
> ++#include "glamo_screen.h"
> ++
> ++
> ++typedef struct glamo_context glamoContext;
> ++typedef struct glamo_context *glamoContextPtr;
> ++
> ++struct glamo_context {
> ++
> ++ struct gl_context *glCtx; /* Must be first in this structure */
> ++
> ++ int drm_fd; /* DRM fd */
> ++
> ++ __DRIcontext *driContext; /* DRI context */
> ++ __DRIscreen *driScreen; /* DRI screen */
> ++ __DRIdrawable *driDrawable; /* DRI drawable bound to this ctx */
> ++
> ++ glamoScreenPtr glamoScreen; /* Screen private DRI data */
> ++
> ++ driOptionCache optionCache;
> ++
> ++ uint16_t *cmdq_drm; /* Command queue cache */
> ++ uint16_t cmd_burst_base;
> ++ int cmdq_drm_used;
> ++ int cmdq_drm_size;
> ++ int cmdq_obj_used;
> ++ uint32_t *cmdq_objs;
> ++ unsigned int *cmdq_obj_pos;
> ++
> ++ /* Information about the current primitive */
> ++ struct {
> ++ GLuint id;
> ++ uint32_t primitive; /* Current hardware primitive type */
> ++ struct glamo_bo *vb_bo;
> ++ uint8_t *vb;
> ++ unsigned int start_offset; /* Byte offset of start */
> ++ unsigned int current_offset; /* Byte offset of next vertex */
> ++ unsigned int count; /* Number of vertices */
> ++ } prim;
> ++
> ++ /* Current vertex format and attributes */
> ++ int vertex_size;
> ++ struct tnl_attr_map vertex_attrs[VERT_ATTRIB_MAX];
> ++
> ++ /* State */
> ++ GLuint new_state; /* State which must be updated */
> ++ uint16_t col_clear;
> ++
> ++};
> ++
> ++#define GLAMO_CONTEXT(ctx) ((glamoContextPtr)(ctx->DriverCtx))
> ++
> ++#define TAG(x) glamo##x
> ++#include "tnl_dd/t_dd_vertex.h"
> ++#undef TAG
> ++
> ++extern GLboolean glamoCreateContext(const struct gl_config *glVis,
> ++ __DRIcontext *driContextPriv,
> ++ void *sharedContextPrivate);
> ++extern void glamoDestroyContext(__DRIcontext *dcp);
> ++extern GLboolean glamoMakeCurrent(__DRIcontext *driContextPriv,
> ++ __DRIdrawable *driDrawPriv,
> ++ __DRIdrawable *driReadPriv);
> ++extern GLboolean glamoUnbindContext(__DRIcontext *driContextPriv);
> ++extern void glamo_update_renderbuffers(__DRIcontext *context,
> ++ __DRIdrawable *drawable);
> ++
> ++#define GLAMO_PACKCOLOR565(r, g, b) \
> ++ ((((r)& 0xf8)<< 8) \
> ++ | (((g)& 0xfc)<< 3) \
> ++ | (((b)& 0xf8)>> 3))
> ++
> ++extern uint32_t float7s16(GLfloat in);
> ++
> ++#endif /* __GLAMO_CONTEXT_H */
> +diff --git a/src/mesa/drivers/dri/glamo/glamo_fbo.c b/src/mesa/drivers/dri/glamo/glamo_fbo.c
> +new file mode 100644
> +index 0000000..e25ca31
> +--- /dev/null
> ++++ b/src/mesa/drivers/dri/glamo/glamo_fbo.c
> +@@ -0,0 +1,130 @@
> ++/*
> ++ * Direct Rendering Support for SMedia Glamo 336x/337x
> ++ *
> ++ * (c) 2009 Thomas White<taw@bitwiz.org.uk>
> ++ * Roughly based on radeon_fbo.c (c) 2008 Red Hat Inc
> ++ *
> ++ * 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, sublicense,
> ++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
> ++ * THE AUTHORS 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 "main/imports.h"
> ++#include "main/macros.h"
> ++#include "main/mtypes.h"
> ++#include "main/formats.h"
> ++#include "main/fbobject.h"
> ++#include "main/framebuffer.h"
> ++#include "main/renderbuffer.h"
> ++#include "main/context.h"
> ++#include "dri_util.h"
> ++
> ++/* This comes from libdrm_glamo */
> ++#include<glamo_bo.h>
> ++
> ++#include "glamo_fbo.h"
> ++
> ++
> ++static void glamo_delete_renderbuffer(struct gl_renderbuffer *rb)
> ++{
> ++ struct glamo_renderbuffer *grb = glamo_renderbuffer(rb);
> ++
> ++ ASSERT(grb);
> ++
> ++ if ( grb&& grb->bo ) {
> ++ glamo_bo_unref(grb->bo);
> ++ }
> ++ free(grb);
> ++}
> ++
> ++
> ++static void *glamo_get_pointer(struct gl_context *ctx, struct gl_renderbuffer *rb,
> ++ GLint x, GLint y)
> ++{
> ++ return NULL; /* Can't be directly addressed */
> ++}
> ++
> ++
> ++/* Called for each hardware renderbuffer when a _window_ is resized.
> ++ * Just update fields.
> ++ * Not used for user-created renderbuffers!
> ++ */
> ++static GLboolean glamo_alloc_window_storage(struct gl_context *ctx,
> ++ struct gl_renderbuffer *rb,
> ++ GLenum internalFormat,
> ++ GLuint width, GLuint height)
> ++{
> ++ ASSERT(rb->Name == 0);
> ++ rb->Width = width;
> ++ rb->Height = height;
> ++ rb->Format = internalFormat;
> ++ return GL_TRUE;
> ++}
> ++
> ++
> ++/* Create a buffer, such as a colour or depth buffer */
> ++struct glamo_renderbuffer *glamo_create_renderbuffer(GLenum format,
> ++ __DRIdrawable *driDrawPriv)
> ++{
> ++ struct glamo_renderbuffer *grb;
> ++
> ++ grb = CALLOC_STRUCT(glamo_renderbuffer);
> ++ if ( !grb ) return NULL;
> ++
> ++ _mesa_init_renderbuffer(&grb->base, 0);
> ++ grb->base.ClassID = GLAMO_RB_CLASS;
> ++
> ++ switch (format) {
> ++ case GL_RGB5:
> ++ grb->base.Format = MESA_FORMAT_RGB565;
> ++ grb->base._BaseFormat = GL_RGB;
> ++
> ++ grb->base.DataType = GL_UNSIGNED_BYTE;
> ++ break;
> ++ case GL_DEPTH_COMPONENT16:
> ++ grb->base.DataType = GL_UNSIGNED_SHORT;
> ++ grb->base._BaseFormat = GL_DEPTH_COMPONENT;
> ++ break;
> ++ default:
> ++ fprintf(stderr, "%s: Unknown format 0x%04x\n", __FUNCTION__, format);
> ++ _mesa_delete_renderbuffer(&grb->base);
> ++ return NULL;
> ++ }
> ++
> ++ grb->dPriv = driDrawPriv;
> ++ grb->base.InternalFormat = format;
> ++
> ++ grb->base.Delete = glamo_delete_renderbuffer;
> ++ grb->base.AllocStorage = glamo_alloc_window_storage;
> ++ grb->base.GetPointer = glamo_get_pointer;
> ++
> ++ return grb;
> ++}
> ++
> ++
> ++void glamo_renderbuffer_set_bo(struct glamo_renderbuffer *grb,
> ++ struct glamo_bo *bo)
> ++{
> ++ struct glamo_bo *old;
> ++ old = grb->bo;
> ++ grb->bo = bo;
> ++ glamo_bo_ref(bo);
> ++ if ( old ) glamo_bo_unref(old);
> ++}
> ++
> ++
> ++/* kate: space-indent on; indent-width 3; mixedindent off; indent-mode cstyle; */
> +diff --git a/src/mesa/drivers/dri/glamo/glamo_fbo.h b/src/mesa/drivers/dri/glamo/glamo_fbo.h
> +new file mode 100644
> +index 0000000..48210dd
> +--- /dev/null
> ++++ b/src/mesa/drivers/dri/glamo/glamo_fbo.h
> +@@ -0,0 +1,77 @@
> ++/*
> ++ * Direct Rendering Support for SMedia Glamo 336x/337x
> ++ *
> ++ * (c) 2009 Thomas White<taw@bitwiz.org.uk>
> ++ *
> ++ * 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, sublicense,
> ++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
> ++ * THE AUTHORS 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 __GLAMO_FBO_H
> ++#define __GLAMO_FBO_H
> ++
> ++
> ++#include "main/mtypes.h"
> ++#include "dri_util.h"
> ++
> ++
> ++/* This is just a marker so we can tell a Glamo renderbuffer from a Mesa one */
> ++#define GLAMO_RB_CLASS (0xdeadbeef)
> ++
> ++
> ++struct glamo_renderbuffer
> ++{
> ++ struct gl_renderbuffer base; /* Must be first */
> ++ struct glamo_bo *bo;
> ++ unsigned int cpp;
> ++ unsigned int pitch;
> ++ unsigned int width;
> ++ unsigned int height;
> ++
> ++ __DRIdrawable *dPriv;
> ++};
> ++
> ++
> ++struct glamo_framebuffer
> ++{
> ++ struct gl_framebuffer base;
> ++ struct glamo_renderbuffer *color_rb[2];
> ++};
> ++
> ++
> ++/* This is just a small wrapper function to return NULL if the gl_renderbuffer
> ++ * is not a glamo_renderbuffer */
> ++static inline struct glamo_renderbuffer
> ++ *glamo_renderbuffer(struct gl_renderbuffer *rb)
> ++{
> ++ struct glamo_renderbuffer *grb = (struct glamo_renderbuffer *)rb;
> ++ if ( grb&& grb->base.ClassID == GLAMO_RB_CLASS )
> ++ return grb;
> ++ else
> ++ return NULL;
> ++}
> ++
> ++
> ++extern struct glamo_renderbuffer *glamo_create_renderbuffer(GLenum format,
> ++ __DRIdrawable *driDrawPriv);
> ++
> ++extern void glamo_renderbuffer_set_bo(struct glamo_renderbuffer *grb,
> ++ struct glamo_bo *bo);
> ++
> ++#endif /* __GLAMO_FBO_H */
> ++
> ++/* kate: space-indent on; indent-width 3; mixedindent off; indent-mode cstyle; */
> +diff --git a/src/mesa/drivers/dri/glamo/glamo_regs.h b/src/mesa/drivers/dri/glamo/glamo_regs.h
> +new file mode 100644
> +index 0000000..02b2294
> +--- /dev/null
> ++++ b/src/mesa/drivers/dri/glamo/glamo_regs.h
> +@@ -0,0 +1,174 @@
> ++#ifndef _GLAMO_REGS_H
> ++#define _GLAMO_REGS_H
> ++
> ++/* Smedia Glamo 336x/337x driver
> ++ *
> ++ * (C) 2007 by OpenMoko, Inc.
> ++ * Author: Harald Welte<laforge@openmoko.org>
> ++ * All rights reserved.
> ++ *
> ++ * Modified for Glamo Mesa driver by Thomas White<taw@bitwiz.org.uk>
> ++ *
> ++ * This program is free software; you can redistribute it and/or
> ++ * modify it under the terms of the GNU General Public License as
> ++ * published by the Free Software Foundation; either version 2 of
> ++ * the License, or (at your option) any later version.
> ++ *
> ++ * This program is distributed in the hope that it will be useful,
> ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> ++ * GNU General Public License for more details.
> ++ *
> ++ * You should have received a copy of the GNU General Public License
> ++ * along with this program; if not, write to the Free Software
> ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> ++ * MA 02111-1307 USA
> ++ */
> ++
> ++enum glamo_regster_offsets {
> ++ GLAMO_REGOFS_GENERIC = 0x0000,
> ++ GLAMO_REGOFS_HOSTBUS = 0x0200,
> ++ GLAMO_REGOFS_MEMORY = 0x0300,
> ++ GLAMO_REGOFS_VIDCAP = 0x0400,
> ++ GLAMO_REGOFS_ISP = 0x0500,
> ++ GLAMO_REGOFS_JPEG = 0x0800,
> ++ GLAMO_REGOFS_MPEG = 0x0c00,
> ++ GLAMO_REGOFS_LCD = 0x1100,
> ++ GLAMO_REGOFS_MMC = 0x1400,
> ++ GLAMO_REGOFS_MPROC0 = 0x1500,
> ++ GLAMO_REGOFS_MPROC1 = 0x1580,
> ++ GLAMO_REGOFS_CMDQUEUE = 0x1600,
> ++ GLAMO_REGOFS_RISC = 0x1680,
> ++ GLAMO_REGOFS_2D = 0x1700,
> ++ GLAMO_REGOFS_3D = 0x1b00,
> ++};
> ++
> ++
> ++#define REG_MPEG(x) (GLAMO_REGOFS_MPEG+(x))
> ++
> ++enum glamo_register_mpeg {
> ++ //
> ++ GLAMO_REG_MPEG_DC_ADDRL = REG_MPEG(0x3c),
> ++ GLAMO_REG_MPEG_DC_ADDRH = REG_MPEG(0x3e),
> ++ GLAMO_REG_MPEG_AC_ADDRL = REG_MPEG(0x40),
> ++ GLAMO_REG_MPEG_AC_ADDRH = REG_MPEG(0x42),
> ++ //
> ++ GLAMO_REG_MPEG_SAFE_1 = REG_MPEG(0x60),
> ++ GLAMO_REG_MPEG_SAFE_2 = REG_MPEG(0x62),
> ++ GLAMO_REG_MPEG_SAFE_3 = REG_MPEG(0x64),
> ++ //
> ++ GLAMO_REG_MPEG_DEC_OUT0_Y_ADDRL = REG_MPEG(0x6e),
> ++ GLAMO_REG_MPEG_DEC_OUT0_Y_ADDRH = REG_MPEG(0x70),
> ++ GLAMO_REG_MPEG_DEC_OUT0_U_ADDRL = REG_MPEG(0x72),
> ++ GLAMO_REG_MPEG_DEC_OUT0_U_ADDRH = REG_MPEG(0x74),
> ++ GLAMO_REG_MPEG_DEC_OUT0_V_ADDRL = REG_MPEG(0x76),
> ++ GLAMO_REG_MPEG_DEC_OUT0_V_ADDRH = REG_MPEG(0x78),
> ++ GLAMO_REG_MPEG_DEC_OUT1_Y_ADDRL = REG_MPEG(0x7a),
> ++ GLAMO_REG_MPEG_DEC_OUT1_Y_ADDRH = REG_MPEG(0x7c),
> ++ GLAMO_REG_MPEG_DEC_OUT1_U_ADDRL = REG_MPEG(0x7e),
> ++ GLAMO_REG_MPEG_DEC_OUT1_U_ADDRH = REG_MPEG(0x80),
> ++ GLAMO_REG_MPEG_DEC_OUT1_V_ADDRL = REG_MPEG(0x82),
> ++ GLAMO_REG_MPEG_DEC_OUT1_V_ADDRH = REG_MPEG(0x84),
> ++ GLAMO_REG_MPEG_DEC_OUT2_Y_ADDRL = REG_MPEG(0x86),
> ++ GLAMO_REG_MPEG_DEC_OUT2_Y_ADDRH = REG_MPEG(0x88),
> ++ GLAMO_REG_MPEG_DEC_OUT2_U_ADDRL = REG_MPEG(0x8a),
> ++ GLAMO_REG_MPEG_DEC_OUT2_U_ADDRH = REG_MPEG(0x8c),
> ++ GLAMO_REG_MPEG_DEC_OUT2_V_ADDRL = REG_MPEG(0x8e),
> ++ GLAMO_REG_MPEG_DEC_OUT2_V_ADDRH = REG_MPEG(0x90),
> ++ GLAMO_REG_MPEG_DEC_WIDTH = REG_MPEG(0x92),
> ++ GLAMO_REG_MPEG_DEC_HEIGHT = REG_MPEG(0x94),
> ++ GLAMO_REG_MPEG_SPECIAL = REG_MPEG(0x96),
> ++ GLAMO_REG_MPEG_DEC_IN_ADDRL = REG_MPEG(0x98),
> ++ GLAMO_REG_MPEG_DEC_IN_ADDRH = REG_MPEG(0x9a),
> ++ //
> ++ GLAMO_REG_MPEG_DEBLK_THRESHOLD = REG_MPEG(0xc0),
> ++ //
> ++ GLAMO_REG_MPEG_DEC_STATUS = REG_MPEG(0xc8),
> ++ GLAMO_REG_MPEG_DEC_RB0 = REG_MPEG(0xca),
> ++ GLAMO_REG_MPEG_DEC_RB1 = REG_MPEG(0xcc),
> ++};
> ++
> ++
> ++#define REG_2D(x) (GLAMO_REGOFS_2D+(x))
> ++
> ++enum glamo_register_2d {
> ++ GLAMO_REG_2D_SRC_ADDRL = REG_2D(0x00),
> ++ GLAMO_REG_2D_SRC_ADDRH = REG_2D(0x02),
> ++ GLAMO_REG_2D_SRC_PITCH = REG_2D(0x04),
> ++ GLAMO_REG_2D_SRC_X = REG_2D(0x06),
> ++ GLAMO_REG_2D_SRC_Y = REG_2D(0x08),
> ++ GLAMO_REG_2D_DST_X = REG_2D(0x0a),
> ++ GLAMO_REG_2D_DST_Y = REG_2D(0x0c),
> ++ GLAMO_REG_2D_DST_ADDRL = REG_2D(0x0e),
> ++ GLAMO_REG_2D_DST_ADDRH = REG_2D(0x10),
> ++ GLAMO_REG_2D_DST_PITCH = REG_2D(0x12),
> ++ GLAMO_REG_2D_DST_HEIGHT = REG_2D(0x14),
> ++ GLAMO_REG_2D_RECT_WIDTH = REG_2D(0x16),
> ++ GLAMO_REG_2D_RECT_HEIGHT = REG_2D(0x18),
> ++ GLAMO_REG_2D_PAT_ADDRL = REG_2D(0x1a),
> ++ GLAMO_REG_2D_PAT_ADDRH = REG_2D(0x1c),
> ++ GLAMO_REG_2D_PAT_FG = REG_2D(0x1e),
> ++ GLAMO_REG_2D_PAT_BG = REG_2D(0x20),
> ++ GLAMO_REG_2D_SRC_FG = REG_2D(0x22),
> ++ GLAMO_REG_2D_SRC_BG = REG_2D(0x24),
> ++ GLAMO_REG_2D_MASK1 = REG_2D(0x26),
> ++ GLAMO_REG_2D_MASK2 = REG_2D(0x28),
> ++ GLAMO_REG_2D_MASK3 = REG_2D(0x2a),
> ++ GLAMO_REG_2D_MASK4 = REG_2D(0x2c),
> ++ GLAMO_REG_2D_ROT_X = REG_2D(0x2e),
> ++ GLAMO_REG_2D_ROT_Y = REG_2D(0x30),
> ++ GLAMO_REG_2D_LEFT_CLIP = REG_2D(0x32),
> ++ GLAMO_REG_2D_TOP_CLIP = REG_2D(0x34),
> ++ GLAMO_REG_2D_RIGHT_CLIP = REG_2D(0x36),
> ++ GLAMO_REG_2D_BOTTOM_CLIP = REG_2D(0x38),
> ++ GLAMO_REG_2D_COMMAND1 = REG_2D(0x3A),
> ++ GLAMO_REG_2D_COMMAND2 = REG_2D(0x3C),
> ++ GLAMO_REG_2D_COMMAND3 = REG_2D(0x3E),
> ++ GLAMO_REG_2D_SAFE = REG_2D(0x40),
> ++ GLAMO_REG_2D_STATUS = REG_2D(0x42),
> ++ GLAMO_REG_2D_ID1 = REG_2D(0x44),
> ++ GLAMO_REG_2D_ID2 = REG_2D(0x46),
> ++ GLAMO_REG_2D_ID3 = REG_2D(0x48),
> ++};
> ++
> ++
> ++/* No offset this time */
> ++#define REG_3D(x) (x)
> ++
> ++enum glamo_register_3d
> ++{
> ++ /* Fire the engine */
> ++ G3D_FIRE = REG_3D(0x2058),
> ++
> ++ /* Streams of vertex/colour/normal/texcoord data */
> ++ G3D_ACTIVE_STREAMS = REG_3D(0x1f00),
> ++ G3D_LAST_STREAM__VCOLFMT = REG_3D(0x2030),
> ++ G3D_STREAM_MODE_0 = REG_3D(0x1f10),
> ++ G3D_STREAM_BASE_0 = REG_3D(0x1f14),
> ++ G3D_STREAM_MODE_1 = REG_3D(0x1f18),
> ++ G3D_STREAM_BASE_1 = REG_3D(0x1f1c),
> ++ G3D_STREAM_MODE_2 = REG_3D(0x1f20),
> ++ G3D_STREAM_BASE_2 = REG_3D(0x1f24),
> ++ G3D_STREAM_MODE_3 = REG_3D(0x1f28),
> ++ G3D_STREAM_BASE_3 = REG_3D(0x1f2c),
> ++ G3D_STREAM_MODE_4 = REG_3D(0x1f30),
> ++ G3D_STREAM_BASE_4 = REG_3D(0x1f34),
> ++ G3D_STREAM_MODE_5 = REG_3D(0x1f38),
> ++ G3D_STREAM_BASE_5 = REG_3D(0x1f3c),
> ++ G3D_STREAM_MODE_6 = REG_3D(0x1f40),
> ++ G3D_STREAM_BASE_6 = REG_3D(0x1f44),
> ++ G3D_STREAM_MODE_7 = REG_3D(0x1f48),
> ++ G3D_STREAM_BASE_7 = REG_3D(0x1f4c),
> ++
> ++ /* Modelview*projection matrix */
> ++ G3D_MATRIX_MVP = REG_3D(0x26a0), /* .. 0x27df */
> ++
> ++ /* Modelview matrix */
> ++ G3D_MATRIX_MV = REG_3D(0x26e0), /* .. 0x270f */
> ++
> ++ /* Inverse MVP, 3x3 only */
> ++ G3D_MATRIX_IMVP = REG_3D(0x2710), /* .. 0x2733 */
> ++
> ++};
> ++
> ++#endif /* _GLAMO_REGS_H */
> +diff --git a/src/mesa/drivers/dri/glamo/glamo_render.c b/src/mesa/drivers/dri/glamo/glamo_render.c
> +new file mode 100644
> +index 0000000..d8b21d5
> +--- /dev/null
> ++++ b/src/mesa/drivers/dri/glamo/glamo_render.c
> +@@ -0,0 +1,230 @@
> ++/*
> ++ * Direct Rendering Support for SMedia Glamo 336x/337x
> ++ *
> ++ * (c) 2009 Thomas White<taw@bitwiz.org.uk>
> ++ *
> ++ * 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, sublicense,
> ++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
> ++ * THE AUTHORS 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.
> ++ *
> ++ *
> ++ * Based on intel_render.c, to which the following notice applies:
> ++ *
> ++ * 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.
> ++ *
> ++ */
> ++
> ++
> ++/*
> ++ * Render unclipped vertex buffers by emitting vertices directly to
> ++ * dma buffers. Use strip/fan hardware acceleration where possible.
> ++ *
> ++ */
> ++#include "main/glheader.h"
> ++#include "main/context.h"
> ++#include "main/macros.h"
> ++#include "main/imports.h"
> ++#include "main/mtypes.h"
> ++#include "main/enums.h"
> ++
> ++#include "tnl/t_context.h"
> ++#include "tnl/t_vertex.h"
> ++#include "tnl/t_pipeline.h"
> ++#include "math/m_xform.h"
> ++
> ++#include "glamo_context.h"
> ++#include "glamo_tris.h"
> ++#include "glamo_regs.h"
> ++
> ++/*
> ++ * Render unclipped vertex buffers by emitting vertices directly to
> ++ * VRAM buffers. Use strip/fan hardware primitives where possible.
> ++ * Try to simulate missing primitives with indexed vertices.
> ++ */
> ++#define HAVE_POINTS 1
> ++#define HAVE_LINES 1
> ++#define HAVE_LINE_STRIPS 0
> ++#define HAVE_TRIANGLES 1
> ++#define HAVE_TRI_STRIPS 0
> ++#define HAVE_TRI_STRIP_1 0
> ++#define HAVE_TRI_FANS 0
> ++#define HAVE_POLYGONS 0
> ++#define HAVE_QUADS 0
> ++#define HAVE_QUAD_STRIPS 0
> ++#define HAVE_ELTS 0
> ++
> ++
> ++static void glamoFlushPrim(struct glamo_context *gCtx)
> ++{
> ++ printf("glamoFlushPrim: %i vertices, %i %i\n", gCtx->prim.count,
> ++ gCtx->prim.start_offset, gCtx->prim.current_offset);
> ++
> ++ if ( gCtx->prim.vb_bo == NULL ) return;
> ++
> ++ /* Upload to hardware */
> ++ glamo_bo_subdata(gCtx->prim.vb_bo, 0, gCtx->prim.current_offset,
> ++ gCtx->prim.vb);
> ++
> ++ /* Dispatch to the hardware */
> ++ glamoDRMStartBurst(gCtx, G3D_STREAM_MODE_0);
> ++ glamoDRMAddData(gCtx, 0x000f0300, 4);
> ++ glamoDRMAddBO(gCtx, gCtx->prim.vb_bo);
> ++ glamoDRMDispatch(gCtx);
> ++
> ++ /* Please use a new BO for the next buffer */
> ++ gCtx->prim.vb_bo = NULL;
> ++
> ++ /* Continue from new start */
> ++ gCtx->prim.start_offset = gCtx->prim.current_offset;
> ++}
> ++
> ++
> ++static inline GLuint glamoGetVBMax(struct glamo_context *gCtx)
> ++{
> ++ return GLAMO_VB_SIZE / gCtx->vertex_size;
> ++}
> ++
> ++
> ++static inline GLuint glamoGetCurrentMax(struct glamo_context *gCtx)
> ++{
> ++ /* How many more vertices can be accommodated?
> ++ * Each vertex takes up 4x 32-bit fixed point values */
> ++ return (GLAMO_VB_SIZE - gCtx->prim.current_offset) / gCtx->vertex_size;
> ++}
> ++
> ++
> ++#define LOCAL_VARS \
> ++ struct glamo_context *gCtx = GLAMO_CONTEXT(ctx);
> ++
> ++#define INIT(prim)
> ++
> ++#define FLUSH() glamoFlushPrim(gCtx)
> ++
> ++#define GET_SUBSEQUENT_VB_MAX_VERTS() glamoGetVBMax(gCtx)
> ++#define GET_CURRENT_VB_MAX_VERTS() glamoGetCurrentMax(gCtx)
> ++
> ++#define ALLOC_VERTS(nr) glamoGetPrimSpace(gCtx, nr)
> ++
> ++#define EMIT_VERTS(ctx, j, nr, buf) \
> ++ _tnl_emit_vertices_to_buffer(ctx, j, (j)+(nr), buf)
> ++
> ++#define TAG(x) glamo_##x
> ++#include "tnl_dd/t_dd_dmatmp.h"
> ++
> ++
> ++/**********************************************************************/
> ++/* Render pipeline stage */
> ++/**********************************************************************/
> ++
> ++static void glamoFireEngine(struct glamo_context *gCtx)
> ++{
> ++ glamoDRMStartBurst(gCtx, G3D_FIRE);
> ++ glamoDRMAddData(gCtx, 0, 2); /* Fire! */
> ++ glamoDRMDispatch(gCtx);
> ++}
> ++
> ++
> ++static GLboolean glamoRunRender(struct gl_context *ctx,
> ++ struct tnl_pipeline_stage *stage)
> ++{
> ++ TNLcontext *tnl = TNL_CONTEXT(ctx);
> ++ struct glamo_context *gCtx = GLAMO_CONTEXT(ctx);
> ++ struct vertex_buffer *VB =&tnl->vb;
> ++ GLuint i;
> ++
> ++ printf("glamoRunRender\n");
> ++
> ++ /* Don't handle clipping */
> ++ if ( !glamo_validate_render(ctx, VB) ) {
> ++ return GL_TRUE; /* Failed */
> ++ }
> ++
> ++ /* Validate GPU state */
> ++ if ( gCtx->new_state ) {
> ++ if ( !glamoValidateState(ctx, gCtx->new_state) ) {
> ++ printf("Couldn't validate state...\n");
> ++ }
> ++ } /* else nothing to update */
> ++
> ++ tnl->clipspace.new_inputs |= VERT_BIT_POS;
> ++
> ++ tnl->Driver.Render.Start(ctx);
> ++
> ++ for ( i=0; i<VB->PrimitiveCount; i++ ) {
> ++
> ++ GLuint prim = _tnl_translate_prim(&VB->Primitive[i]);
> ++ GLuint start = VB->Primitive[i].start;
> ++ GLuint length = VB->Primitive[i].count;
> ++
> ++ if (!length) continue;
> ++
> ++ glamo_render_tab_verts[prim& PRIM_MODE_MASK](ctx, start,
> ++ start + length, prim);
> ++
> ++ }
> ++
> ++ tnl->Driver.Render.Finish(ctx);
> ++
> ++ glamoFireEngine(gCtx);
> ++
> ++ return GL_FALSE; /* Ok */
> ++}
> ++
> ++
> ++static const struct tnl_pipeline_stage _glamo_render_stage = {
> ++ "glamo render",
> ++ NULL,
> ++ NULL,
> ++ NULL,
> ++ NULL,
> ++ glamoRunRender
> ++};
> ++
> ++
> ++const struct tnl_pipeline_stage *glamo_pipeline[] = {
> ++ &_tnl_vertex_transform_stage,
> ++ &_tnl_normal_transform_stage,
> ++ &_tnl_lighting_stage,
> ++ &_tnl_fog_coordinate_stage,
> ++ &_tnl_texgen_stage,
> ++ &_tnl_texture_transform_stage,
> ++ &_tnl_point_attenuation_stage,
> ++ &_tnl_vertex_program_stage,
> ++ &_glamo_render_stage, /* ADD: unclipped rastersetup-to-dma */
> ++ &_tnl_render_stage,
> ++ 0,
> ++};
> +diff --git a/src/mesa/drivers/dri/glamo/glamo_render.h b/src/mesa/drivers/dri/glamo/glamo_render.h
> +new file mode 100644
> +index 0000000..99c36a8
> +--- /dev/null
> ++++ b/src/mesa/drivers/dri/glamo/glamo_render.h
> +@@ -0,0 +1,31 @@
> ++/*
> ++ * Direct Rendering Support for SMedia Glamo 336x/337x
> ++ *
> ++ * (c) 2009 Thomas White<taw@bitwiz.org.uk>
> ++ *
> ++ * 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, sublicense,
> ++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
> ++ * THE AUTHORS 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 __GLAMO_RENDER_H
> ++#define __GLAMO_RENDER_H
> ++
> ++#include "main/mtypes.h"
> ++
> ++extern const struct tnl_pipeline_stage *glamo_pipeline[];
> ++
> ++#endif /* __GLAMO_RENDER_H */
> +diff --git a/src/mesa/drivers/dri/glamo/glamo_screen.c b/src/mesa/drivers/dri/glamo/glamo_screen.c
> +new file mode 100644
> +index 0000000..cc8a730
> +--- /dev/null
> ++++ b/src/mesa/drivers/dri/glamo/glamo_screen.c
> +@@ -0,0 +1,250 @@
> ++/*
> ++ * Direct Rendering Support for SMedia Glamo 336x/337x
> ++ *
> ++ * (c) 2009 Thomas White<taw@bitwiz.org.uk>
> ++ * Roughly based on sis_screen.c (c) 2003 Eric Anholt
> ++ *
> ++ * 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, sublicense,
> ++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
> ++ * THE AUTHORS 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 "dri_util.h"
> ++#include "utils.h"
> ++#include "xmlconfig.h"
> ++#include "GL/internal/dri_interface.h"
> ++#include "main/framebuffer.h"
> ++#include "main/renderbuffer.h"
> ++
> ++#include "glamo_screen.h"
> ++#include "glamo_context.h"
> ++#include "glamo_fbo.h"
> ++
> ++/* This comes from libdrm_glamo */
> ++#include<glamo_bo_gem.h>
> ++
> ++
> ++static int glamoInitDriver(__DRIscreen *psp)
> ++{
> ++ return 0;
> ++}
> ++
> ++
> ++static glamoScreenPtr glamoCreateScreen(__DRIscreen *sPriv)
> ++{
> ++ glamoScreenPtr glamoScreen;
> ++
> ++ /* Allocate the private area */
> ++ glamoScreen = (glamoScreenPtr)CALLOC(sizeof(*glamoScreen));
> ++ if ( glamoScreen == NULL )
> ++ return NULL;
> ++
> ++ glamoScreen->driScreen = sPriv;
> ++
> ++ /* This is our link to the kernel's memory manager, via libdrm */
> ++ glamoScreen->bom = glamo_bo_manager_gem_ctor(sPriv->fd);
> ++
> ++ return glamoScreen;
> ++}
> ++
> ++
> ++static void glamoDestroyScreen(__DRIscreen *sPriv)
> ++{
> ++ glamoScreenPtr glamoScreen = (glamoScreenPtr)sPriv->private;
> ++
> ++ if ( glamoScreen == NULL )
> ++ return;
> ++
> ++ FREE(glamoScreen);
> ++ sPriv->private = NULL;
> ++}
> ++
> ++
> ++static const __DRIconfig **glamoInitScreen(__DRIscreen *sPriv)
> ++{
> ++ __DRIconfig **configs;
> ++ uint8_t depth_bits_array[2];
> ++ uint8_t stencil_bits_array[2];
> ++ uint8_t msaa_samples_array[1];
> ++ static const GLenum db_modes[] = { GLX_SWAP_COPY_OML, GLX_NONE };
> ++
> ++ /* Driver initialisation */
> ++ if ( glamoInitDriver(sPriv) ) {
> ++ return NULL;
> ++ }
> ++
> ++ /* Screen-specific initialisation */
> ++ sPriv->private = glamoCreateScreen(sPriv);
> ++ if ( !sPriv->private ) {
> ++ glamoDestroyScreen(sPriv);
> ++ return NULL;
> ++ }
> ++
> ++ depth_bits_array[0] = 0;
> ++ stencil_bits_array[0] = 0;
> ++ depth_bits_array[1] = 16;
> ++ stencil_bits_array[1] = 0;
> ++ msaa_samples_array[0] = 0;
> ++
> ++ configs = driCreateConfigs(GL_RGB, GL_UNSIGNED_SHORT_5_6_5,
> ++ depth_bits_array, stencil_bits_array, 2,
> ++ db_modes, 2, msaa_samples_array, 1, GL_TRUE);
> ++
> ++ if ( configs == NULL ) {
> ++ fprintf(stderr, "[%s:%u] Error creating FBConfig!\n", __func__, __LINE__);
> ++ return NULL;
> ++ }
> ++
> ++ return (const __DRIconfig **)configs;
> ++}
> ++
> ++
> ++static const __DRIconfig **glamoInitScreen2(__DRIscreen *sPriv)
> ++{
> ++ __DRIconfig **configs;
> ++ uint8_t depth_bits_array[2];
> ++ uint8_t stencil_bits_array[2];
> ++ uint8_t msaa_samples_array[1];
> ++ static const GLenum db_modes[] = { GLX_SWAP_COPY_OML, GLX_NONE };
> ++
> ++ /* Driver initialisation */
> ++ if ( glamoInitDriver(sPriv) ) {
> ++ return NULL;
> ++ }
> ++
> ++ /* Screen-specific initialisation */
> ++ sPriv->private = glamoCreateScreen(sPriv);
> ++ if ( !sPriv->private ) {
> ++ glamoDestroyScreen(sPriv);
> ++ return NULL;
> ++ }
> ++
> ++ depth_bits_array[0] = 0;
> ++ stencil_bits_array[0] = 0;
> ++ depth_bits_array[1] = 16;
> ++ stencil_bits_array[1] = 0;
> ++ msaa_samples_array[0] = 0;
> ++
> ++ configs = driCreateConfigs(GL_RGB, GL_UNSIGNED_SHORT_5_6_5,
> ++ depth_bits_array, stencil_bits_array, 2,
> ++ db_modes, 2, msaa_samples_array, 1, GL_TRUE);
> ++
> ++ if ( configs == NULL ) {
> ++ fprintf(stderr, "[%s:%u] Error creating FBConfig!\n", __func__, __LINE__);
> ++ return NULL;
> ++ }
> ++
> ++ return (const __DRIconfig **)configs;
> ++}
> ++
> ++
> ++/* Allocate buffers for a context. This is where the fun starts... */
> ++static GLboolean glamoCreateBuffer(__DRIscreen *driScrnPriv,
> ++ __DRIdrawable *driDrawPriv,
> ++ const struct gl_config *mesaVis,
> ++ GLboolean isPixmap)
> ++{
> ++ struct glamo_framebuffer *gfb;
> ++ GLenum rgbFormat;
> ++
> ++ if ( isPixmap ) return GL_FALSE; /* not implemented */
> ++
> ++ gfb = CALLOC_STRUCT(glamo_framebuffer);
> ++ if ( !gfb ) return GL_FALSE;
> ++
> ++ _mesa_initialize_window_framebuffer(&gfb->base, mesaVis);
> ++
> ++ /* we only support this one format at the moment */
> ++ rgbFormat = GL_RGB5;
> ++
> ++ /* Front color renderbuffer */
> ++ gfb->color_rb[0] = glamo_create_renderbuffer(rgbFormat, driDrawPriv);
> ++ _mesa_add_renderbuffer(&gfb->base, BUFFER_FRONT_LEFT,
> ++&gfb->color_rb[0]->base);
> ++
> ++ /* Back color renderbuffer, if requested */
> ++ if ( mesaVis->doubleBufferMode ) {
> ++ gfb->color_rb[1] = glamo_create_renderbuffer(rgbFormat, driDrawPriv);
> ++ _mesa_add_renderbuffer(&gfb->base, BUFFER_BACK_LEFT,
> ++&gfb->color_rb[1]->base);
> ++ }
> ++
> ++ if ( mesaVis->depthBits == 16 ) {
> ++ struct glamo_renderbuffer *depth;
> ++ depth = glamo_create_renderbuffer(GL_DEPTH_COMPONENT16, driDrawPriv);
> ++ _mesa_add_renderbuffer(&gfb->base, BUFFER_DEPTH,&depth->base);
> ++ }
> ++
> ++ /* Add software renderbuffers for the things we can't support in hardware */
> ++ _mesa_add_soft_renderbuffers(&gfb->base,
> ++ GL_FALSE, /* color */
> ++ GL_FALSE, /* depth */
> ++ mesaVis->stencilBits> 0, /* stencil, if required */
> ++ mesaVis->accumRedBits> 0, /* accum, if required */
> ++ GL_FALSE, /* alpha */
> ++ GL_FALSE /* aux */
> ++ );
> ++ driDrawPriv->driverPrivate = (void *)gfb;
> ++
> ++ return (driDrawPriv->driverPrivate != NULL);
> ++}
> ++
> ++
> ++static void glamoDestroyBuffer(__DRIdrawable *driDrawPriv)
> ++{
> ++}
> ++
> ++
> ++static void glamoSwapBuffers(__DRIdrawable *driDrawPriv)
> ++{
> ++ printf("glamoSwapBuffers\n"); fflush(stdout);
> ++}
> ++
> ++
> ++/*
> ++ * Mesa entry points
> ++ *
> ++ * See src/mesa/drivers/dri/common/dri_util.h for information about these
> ++ */
> ++const struct __DriverAPIRec driDriverAPI = {
> ++ .InitScreen = glamoInitScreen,
> ++ .DestroyScreen = glamoDestroyScreen,
> ++ .CreateContext = glamoCreateContext,
> ++ .DestroyContext = glamoDestroyContext,
> ++ .CreateBuffer = glamoCreateBuffer,
> ++ .DestroyBuffer = glamoDestroyBuffer,
> ++ .SwapBuffers = glamoSwapBuffers,
> ++ .MakeCurrent = glamoMakeCurrent,
> ++ .UnbindContext = glamoUnbindContext,
> ++ .GetSwapInfo = NULL, /* Not used */
> ++ .WaitForMSC = NULL,
> ++ .WaitForSBC = NULL,
> ++ .SwapBuffersMSC = NULL,
> ++ .CopySubBuffer = NULL,
> ++ .GetDrawableMSC = NULL, /* Not used */
> ++ .InitScreen2 = glamoInitScreen2, /* For DRI2 */
> ++};
> ++
> ++/* This is the table of extensions that the loader will dlsym() for. */
> ++PUBLIC const __DRIextension *__driDriverExtensions[] = {
> ++&driCoreExtension.base,
> ++&driLegacyExtension.base,
> ++&driDRI2Extension.base,
> ++ NULL
> ++};
> ++
> ++/* kate: space-indent on; indent-width 3; mixedindent off; indent-mode cstyle; */
> +diff --git a/src/mesa/drivers/dri/glamo/glamo_screen.h b/src/mesa/drivers/dri/glamo/glamo_screen.h
> +new file mode 100644
> +index 0000000..3f2eb5f
> +--- /dev/null
> ++++ b/src/mesa/drivers/dri/glamo/glamo_screen.h
> +@@ -0,0 +1,44 @@
> ++/*
> ++ * Direct Rendering Support for SMedia Glamo 336x/337x
> ++ *
> ++ * (c) 2009 Thomas White<taw@bitwiz.org.uk>
> ++ * Roughly based on sis_screen.h (c) 2003 Eric Anholt
> ++ *
> ++ * 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, sublicense,
> ++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
> ++ * THE AUTHORS 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 __GLAMO_SCREEN_H
> ++#define __GLAMO_SCREEN_H
> ++
> ++#include "xmlconfig.h"
> ++#include "dri_util.h"
> ++
> ++#include<glamo_bo_gem.h>
> ++
> ++typedef struct {
> ++
> ++ __DRIscreen *driScreen;
> ++ driOptionCache optionCache;
> ++
> ++ struct glamo_bo_manager *bom;
> ++
> ++} glamoScreenRec, *glamoScreenPtr;
> ++
> ++#endif /* __GLAMO_SCREEN_H */
> ++
> ++/* kate: space-indent on; indent-width 3; mixedindent off; indent-mode cstyle; */
> +diff --git a/src/mesa/drivers/dri/glamo/glamo_state.c b/src/mesa/drivers/dri/glamo/glamo_state.c
> +new file mode 100644
> +index 0000000..3aa2f8b
> +--- /dev/null
> ++++ b/src/mesa/drivers/dri/glamo/glamo_state.c
> +@@ -0,0 +1,305 @@
> ++/*
> ++ * Direct Rendering Support for SMedia Glamo 336x/337x
> ++ *
> ++ * (c) 2009-2010 Thomas White<taw@bitwiz.org.uk>
> ++ * Roughly based on sis_state.c (c) 2003 Eric Anholt
> ++ *
> ++ * 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, sublicense,
> ++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
> ++ * THE AUTHORS 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.
> ++ *
> ++ *
> ++ * Also partially based on intel_fbo.c, to which the following notice applies:
> ++ *
> ++ * Copyright 2006 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 "main/context.h"
> ++#include "main/framebuffer.h"
> ++#include "main/api_arrayelt.h"
> ++#include "main/macros.h"
> ++#include "swrast/swrast.h"
> ++#include "swrast_setup/swrast_setup.h"
> ++#include "tnl/tnl.h"
> ++
> ++#include "glamo_fbo.h"
> ++#include "glamo_state.h"
> ++#include "glamo_context.h"
> ++#include "glamo_cmdq.h"
> ++#include "glamo_regs.h"
> ++
> ++
> ++static void glamoResizeBuffers(struct gl_context *ctx, struct gl_framebuffer *fb,
> ++ GLuint width, GLuint height)
> ++{
> ++ struct glamo_framebuffer *glamo_fb = (struct glamo_framebuffer *)fb;
> ++ int i;
> ++
> ++ _mesa_resize_framebuffer(ctx, fb, width, height);
> ++
> ++ fb->Initialized = GL_TRUE; /* XXX remove someday */
> ++
> ++ if (fb->Name != 0) {
> ++ return;
> ++ }
> ++
> ++ /* Make sure all window system renderbuffers are up to date */
> ++ for (i = 0; i< 2; i++) {
> ++ struct gl_renderbuffer *rb =&glamo_fb->color_rb[i]->base;
> ++
> ++ /* only resize if size is changing */
> ++ if (rb&& (rb->Width != width || rb->Height != height)) {
> ++ rb->AllocStorage(ctx, rb, rb->InternalFormat,
> ++ width, height);
> ++ }
> ++ }
> ++}
> ++
> ++
> ++static void glamoClear(struct gl_context *ctx, GLbitfield mask)
> ++{
> ++ glamoContext *gCtx;
> ++ struct gl_framebuffer *fb;
> ++ int i;
> ++
> ++ gCtx = GLAMO_CONTEXT(ctx);
> ++ fb = ctx->DrawBuffer;
> ++
> ++ printf("glamoClear (%f %f %f %f)\n", ctx->Color.ClearColor[0],
> ++ ctx->Color.ClearColor[1], ctx->Color.ClearColor[2],
> ++ ctx->Color.ClearColor[3]); fflush(stdout);
> ++
> ++ for (i = 0; i< fb->_NumColorDrawBuffers; i++) {
> ++
> ++ struct glamo_renderbuffer *grb;
> ++
> ++ grb = glamo_renderbuffer(fb->_ColorDrawBuffers[i]);
> ++
> ++ glamoDRMStartBurst(gCtx, GLAMO_REG_2D_DST_X);
> ++ glamoDRMAddData(gCtx, fb->_Xmin, 2); /* dest X */
> ++ glamoDRMAddData(gCtx, fb->_Ymin, 2); /* dest Y */
> ++ glamoDRMAddBO(gCtx, grb->bo); /* dest L/H */
> ++ glamoDRMAddData(gCtx, grb->pitch& 0x7ff, 2); /* dest pitch */
> ++ glamoDRMAddData(gCtx, grb->height, 2); /* dest height */
> ++ glamoDRMAddData(gCtx, fb->_Xmax-fb->_Xmin, 2); /* width */
> ++ glamoDRMAddData(gCtx, fb->_Ymax-fb->_Ymin, 2); /* height */
> ++ glamoDRMAddData(gCtx, 0x0000, 2); /* patt L */
> ++ glamoDRMAddData(gCtx, 0x0000, 2); /* patt H */
> ++ glamoDRMAddData(gCtx, gCtx->col_clear, 2); /* FG colour */
> ++ glamoDRMDispatch(gCtx);
> ++
> ++ glamoDRMStartBurst(gCtx, GLAMO_REG_2D_COMMAND1);
> ++ glamoDRMAddData(gCtx, 0x0000, 2); /* Cmd param 1 */
> ++ glamoDRMAddData(gCtx, 0xf0<< 8, 2); /* Cmd param 2 */
> ++ glamoDRMAddData(gCtx, 0x0000, 2); /* Cmd param 3 */
> ++ glamoDRMDispatch(gCtx);
> ++
> ++ }
> ++}
> ++
> ++
> ++static void glamoClearColor(struct gl_context *ctx, const GLfloat color[4])
> ++{
> ++ struct glamo_context *gCtx = GLAMO_CONTEXT(ctx);
> ++ GLubyte col_byte[4];
> ++
> ++ printf("glamoClearColor (%f %f %f %f)\n", color[0], color[1], color[2],
> ++ color[3]); fflush(stdout);
> ++
> ++ CLAMPED_FLOAT_TO_UBYTE(col_byte[0], color[0]);
> ++ CLAMPED_FLOAT_TO_UBYTE(col_byte[1], color[1]);
> ++ CLAMPED_FLOAT_TO_UBYTE(col_byte[2], color[2]);
> ++ CLAMPED_FLOAT_TO_UBYTE(col_byte[3], color[3]);
> ++
> ++ gCtx->col_clear = GLAMO_PACKCOLOR565(col_byte[0], col_byte[1],
> ++ col_byte[2]);
> ++}
> ++
> ++
> ++static void glamoShadeModel(struct gl_context *ctx, GLenum mode)
> ++{
> ++ printf("glamoShadeModel\n"); fflush(stdout);
> ++}
> ++
> ++
> ++static void glamoViewport(struct gl_context *ctx, GLint x, GLint y,
> ++ GLsizei width, GLsizei height )
> ++{
> ++ struct glamo_context *gCtx = GLAMO_CONTEXT(ctx);
> ++ __DRIcontext *driContext = gCtx->driContext;
> ++ void (*old_viewport)(struct gl_context *ctx, GLint x, GLint y,
> ++ GLsizei w, GLsizei h);
> ++
> ++ if ( !driContext->driScreenPriv->dri2.enabled ) return;
> ++
> ++ /* TODO: Flush before fiddling with fake front buffer */
> ++
> ++ if ( ctx->DrawBuffer->Name == 0 ) {
> ++
> ++ glamo_update_renderbuffers(driContext,
> ++ driContext->driDrawablePriv);
> ++ if ( driContext->driDrawablePriv
> ++ != driContext->driReadablePriv ) {
> ++ glamo_update_renderbuffers(driContext,
> ++ driContext->driReadablePriv);
> ++ }
> ++
> ++ }
> ++
> ++ old_viewport = ctx->Driver.Viewport;
> ++ ctx->Driver.Viewport = NULL;
> ++ gCtx->driDrawable = driContext->driDrawablePriv;
> ++ ctx->Driver.Viewport = old_viewport;
> ++}
> ++
> ++
> ++static void glamoUploadMatrix(struct glamo_context *gCtx, uint16_t mreg,
> ++ GLfloat *matrix)
> ++{
> ++ int i;
> ++ char *type;
> ++
> ++ switch ( mreg ) {
> ++ case G3D_MATRIX_MVP :
> ++ type = "MVP"; break;
> ++ case G3D_MATRIX_MV :
> ++ type = "MV"; break;
> ++ case G3D_MATRIX_IMVP :
> ++ type = "inverse MVP"; break;
> ++ default :
> ++ type = "unknown"; break;
> ++ }
> ++ printf("Uploading %s matrix...\n", type);
> ++
> ++ glamoDRMStartBurst(gCtx, mreg);
> ++ if ( mreg != G3D_MATRIX_IMVP ) {
> ++ for ( i=0; i<16; i++ ) {
> ++ glamoDRMAddData(gCtx, float7s16(matrix[i]), 4);
> ++ }
> ++ } else {
> ++ /* Normal matrix needs special treatment */
> ++ for ( i=0; i<3; i++ ) {
> ++ glamoDRMAddData(gCtx, float7s16(matrix[4*i]), 4);
> ++ glamoDRMAddData(gCtx, float7s16(matrix[4*i+1]), 4);
> ++ glamoDRMAddData(gCtx, float7s16(matrix[4*i+2]), 4);
> ++ }
> ++ }
> ++ glamoDRMDispatch(gCtx);
> ++}
> ++
> ++
> ++GLboolean glamoValidateState(struct gl_context *ctx, GLuint new_state)
> ++{
> ++ struct glamo_context *gCtx = GLAMO_CONTEXT(ctx);
> ++
> ++ if ( new_state& (_NEW_MODELVIEW|_NEW_PROJECTION) ) {
> ++
> ++ glamoUploadMatrix(gCtx, G3D_MATRIX_MVP,
> ++ ctx->_ModelProjectMatrix.m);
> ++
> ++ /* FIXME: The following two aren't needed unless lighting
> ++ * is in use... */
> ++ glamoUploadMatrix(gCtx, G3D_MATRIX_MV,
> ++ ctx->ModelviewMatrixStack.Top->m);
> ++ _math_matrix_alloc_inv(&(ctx->_ModelProjectMatrix));
> ++ _math_matrix_analyse(&(ctx->_ModelProjectMatrix));
> ++ glamoUploadMatrix(gCtx, G3D_MATRIX_IMVP,
> ++ ctx->_ModelProjectMatrix.inv);
> ++ }
> ++
> ++ gCtx->new_state = 0;
> ++ return GL_TRUE;
> ++}
> ++
> ++
> ++static void glamoUpdateState(struct gl_context *ctx, GLbitfield new_state)
> ++{
> ++ struct glamo_context *gCtx = GLAMO_CONTEXT(ctx);
> ++
> ++ printf("glamoUpdateState\n");
> ++
> ++ _swrast_InvalidateState(ctx, new_state);
> ++ _swsetup_InvalidateState(ctx, new_state);
> ++ _vbo_InvalidateState(ctx, new_state);
> ++ _tnl_InvalidateState(ctx, new_state);
> ++ _ae_invalidate_state(ctx, new_state);
> ++
> ++ /* Make a note that some state has changed,
> ++ * so that it can be sent to the GPU later. */
> ++ gCtx->new_state |= new_state;
> ++}
> ++
> ++
> ++static void glamoFlush(struct gl_context *ctx)
> ++{
> ++ printf("glamoFlush\n");
> ++}
> ++
> ++
> ++void glamoInitStateFuncs(struct gl_context *ctx)
> ++{
> ++ ctx->Driver.UpdateState = glamoUpdateState;
> ++ ctx->Driver.Clear = glamoClear;
> ++ ctx->Driver.ClearColor = glamoClearColor;
> ++ ctx->Driver.ClearDepth = NULL;
> ++ ctx->Driver.ClearStencil = NULL;
> ++ ctx->Driver.AlphaFunc = NULL;
> ++ ctx->Driver.BlendFuncSeparate = NULL;
> ++ ctx->Driver.ColorMask = NULL;
> ++ ctx->Driver.CullFace = NULL;
> ++ ctx->Driver.DepthMask = NULL;
> ++ ctx->Driver.DepthFunc = NULL;
> ++ ctx->Driver.DepthRange = NULL;
> ++ ctx->Driver.DrawBuffer = NULL;
> ++ ctx->Driver.Enable = NULL;
> ++ ctx->Driver.FrontFace = NULL;
> ++ ctx->Driver.Fogfv = NULL;
> ++ ctx->Driver.Hint = NULL;
> ++ ctx->Driver.Lightfv = NULL;
> ++ ctx->Driver.LogicOpcode = NULL;
> ++ ctx->Driver.PolygonMode = NULL;
> ++ ctx->Driver.PolygonStipple = NULL;
> ++ ctx->Driver.ReadBuffer = NULL;
> ++ ctx->Driver.RenderMode = NULL;
> ++ ctx->Driver.Scissor = NULL;
> ++ ctx->Driver.ShadeModel = glamoShadeModel;
> ++ ctx->Driver.LightModelfv = NULL;
> ++ ctx->Driver.Viewport = glamoViewport;
> ++ ctx->Driver.ResizeBuffers = glamoResizeBuffers;
> ++ ctx->Driver.Flush = glamoFlush;
> ++}
> +diff --git a/src/mesa/drivers/dri/glamo/glamo_state.h b/src/mesa/drivers/dri/glamo/glamo_state.h
> +new file mode 100644
> +index 0000000..c3872c0
> +--- /dev/null
> ++++ b/src/mesa/drivers/dri/glamo/glamo_state.h
> +@@ -0,0 +1,34 @@
> ++/*
> ++ * Direct Rendering Support for SMedia Glamo 336x/337x
> ++ *
> ++ * (c) 2009 Thomas White<taw@bitwiz.org.uk>
> ++ * Roughly based on sis_state.h (c) 2003 Eric Anholt
> ++ *
> ++ * 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, sublicense,
> ++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
> ++ * THE AUTHORS 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 __GLAMO_STATE_H
> ++#define __GLAMO_STATE_H
> ++
> ++#include "main/context.h"
> ++
> ++extern void glamoInitStateFuncs(struct gl_context *ctx);
> ++
> ++#endif /* __GLAMO_STATE_H */
> ++
> ++/* kate: space-indent on; indent-width 3; mixedindent off; indent-mode cstyle; */
> +diff --git a/src/mesa/drivers/dri/glamo/glamo_tris.c b/src/mesa/drivers/dri/glamo/glamo_tris.c
> +new file mode 100644
> +index 0000000..c45fe53
> +--- /dev/null
> ++++ b/src/mesa/drivers/dri/glamo/glamo_tris.c
> +@@ -0,0 +1,310 @@
> ++/*
> ++ * Direct Rendering Support for SMedia Glamo 336x/337x
> ++ *
> ++ * (c) 2009 Thomas White<taw@bitwiz.org.uk>
> ++ *
> ++ * 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, sublicense,
> ++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
> ++ * THE AUTHORS 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.
> ++ *
> ++ *
> ++ * Based on intel_tris.c, to which the following notice applies:
> ++ *
> ++ * 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<glamo_bo.h>
> ++#include<glamo_bo_gem.h>
> ++#include<glamo_drm.h>
> ++
> ++#include "main/mtypes.h"
> ++#include "swrast/swrast.h"
> ++#include "tnl/t_context.h"
> ++#include "tnl/t_vertex.h"
> ++#include "tnl/t_pipeline.h"
> ++
> ++#include "glamo_tris.h"
> ++#include "glamo_context.h"
> ++
> ++
> ++static void glamoRunPipeline(struct gl_context *ctx)
> ++{
> ++ printf("glamoRunPipeline\n");
> ++
> ++ /* TODO: Emit state */
> ++
> ++ _tnl_run_pipeline(ctx);
> ++}
> ++
> ++
> ++static void glamoRenderStart(struct gl_context *ctx)
> ++{
> ++ struct glamo_context *gCtx = GLAMO_CONTEXT(ctx);
> ++
> ++ /* Decide which attributes will be used */
> ++ gCtx->vertex_attrs[0].attrib = _TNL_ATTRIB_POS;
> ++ gCtx->vertex_attrs[0].format = EMIT_4F;
> ++
> ++ gCtx->vertex_size = _tnl_install_attrs(ctx, gCtx->vertex_attrs, 1,
> ++ NULL, 0);
> ++}
> ++
> ++
> ++static void glamoRenderFinish(struct gl_context *ctx)
> ++{
> ++ printf("glamoRenderFinish\n");
> ++}
> ++
> ++
> ++static void glamoPrimitiveNotify(struct gl_context *ctx, GLenum prim)
> ++{
> ++ printf("glamoPrimitiveNotify\n");
> ++}
> ++
> ++
> ++uint32_t *glamoGetPrimSpace(struct glamo_context *gCtx, unsigned int count)
> ++{
> ++ uint32_t *addr;
> ++
> ++ printf("glamoGetPrimSpace\n");
> ++
> ++ /* Check for space in the existing VB */
> ++ if (gCtx->prim.vb_bo == NULL || (gCtx->prim.current_offset +
> ++ count * gCtx->vertex_size)> GLAMO_VB_SIZE) {
> ++
> ++ /* Not enough space, or no VB existing. Start a new one... */
> ++ if (gCtx->prim.vb == NULL) {
> ++ printf("Allocated %i bytes\n", GLAMO_VB_SIZE);
> ++ gCtx->prim.vb = malloc(GLAMO_VB_SIZE);
> ++ }
> ++ gCtx->prim.vb_bo = glamo_bo_open(gCtx->glamoScreen->bom, 0,
> ++ GLAMO_VB_SIZE, 4,
> ++ GLAMO_GEM_DOMAIN_VRAM, 0);
> ++ gCtx->prim.start_offset = 0;
> ++ gCtx->prim.current_offset = 0;
> ++ }
> ++
> ++ addr = (uint32_t *)(gCtx->prim.vb + gCtx->prim.current_offset);
> ++ gCtx->prim.current_offset += gCtx->vertex_size * count;
> ++ gCtx->prim.count += count;
> ++
> ++ return addr;
> ++}
> ++
> ++
> ++#define COPY_DWORDS( j, vb, vertsize, v ) \
> ++do { \
> ++ for ( j = 0 ; j< vertsize ; j++ ) { \
> ++ vb[j] = ((GLuint *)v)[j]; \
> ++ } \
> ++ vb += vertsize; \
> ++} while (0)
> ++
> ++
> ++static void glamo_draw_triangle(struct glamo_context *gCtx,
> ++ glamoVertexPtr v0, glamoVertexPtr v1,
> ++ glamoVertexPtr v2)
> ++{
> ++ GLuint *vb = glamoGetPrimSpace(gCtx, 3);
> ++ int j;
> ++
> ++ COPY_DWORDS(j, vb, gCtx->vertex_size, v0);
> ++ COPY_DWORDS(j, vb, gCtx->vertex_size, v1);
> ++ COPY_DWORDS(j, vb, gCtx->vertex_size, v2);
> ++}
> ++
> ++
> ++static void glamo_draw_line(struct glamo_context *gCtx,
> ++ glamoVertexPtr v0, glamoVertexPtr v1)
> ++{
> ++ GLuint *vb = glamoGetPrimSpace(gCtx, 2);
> ++ int j;
> ++
> ++ COPY_DWORDS(j, vb, gCtx->vertex_size, v0);
> ++ COPY_DWORDS(j, vb, gCtx->vertex_size, v1);
> ++}
> ++
> ++
> ++static void glamo_draw_point(struct glamo_context *gCtx, glamoVertexPtr v0)
> ++{
> ++ GLuint *vb = glamoGetPrimSpace(gCtx, 2);
> ++ int j;
> ++
> ++ COPY_DWORDS(j, vb, gCtx->vertex_size, v0);
> ++}
> ++
> ++
> ++#define TRI( a, b, c ) \
> ++do { \
> ++ glamo_draw_triangle(gCtx, a, b, c ); \
> ++} while (0)
> ++
> ++
> ++#define QUAD( a, b, c, d ) \
> ++printf("Drawing a quad\n"); \
> ++do { \
> ++ glamo_draw_triangle(gCtx, a, b, d); \
> ++ glamo_draw_triangle(gCtx, b, c, d); \
> ++} while (0)
> ++
> ++
> ++#define LINE(v0, v1) \
> ++do { \
> ++ glamo_draw_line(gCtx, v0, v1); \
> ++} while (0)
> ++
> ++
> ++#define POINT(v0) \
> ++do { \
> ++ glamo_draw_point(gCtx, v0); \
> ++} while (0)
> ++
> ++
> ++#define IND (0)
> ++#define TAG(x) x
> ++#include "tnl_dd/t_dd_tritmp.h"
> ++
> ++#define IND (0)
> ++#define TAG(x) x##_offset
> ++#include "tnl_dd/t_dd_tritmp.h"
> ++
> ++#define IND (0)
> ++#define TAG(x) x##_twoside
> ++#include "tnl_dd/t_dd_tritmp.h"
> ++
> ++#define IND (0)
> ++#define TAG(x) x##_twoside_offset
> ++#include "tnl_dd/t_dd_tritmp.h"
> ++
> ++#define IND (0)
> ++#define TAG(x) x##_unfilled
> ++#include "tnl_dd/t_dd_tritmp.h"
> ++
> ++#define IND (0)
> ++#define TAG(x) x##_offset_unfilled
> ++#include "tnl_dd/t_dd_tritmp.h"
> ++
> ++#define IND (0)
> ++#define TAG(x) x##_twoside_unfilled
> ++#include "tnl_dd/t_dd_tritmp.h"
> ++
> ++#define IND (0)
> ++#define TAG(x) x##_twoside_offset_unfilled
> ++#include "tnl_dd/t_dd_tritmp.h"
> ++
> ++#define IND (0)
> ++#define TAG(x) x##_fallback
> ++#include "tnl_dd/t_dd_tritmp.h"
> ++
> ++#define IND (0)
> ++#define TAG(x) x##_offset_fallback
> ++#include "tnl_dd/t_dd_tritmp.h"
> ++
> ++#define IND (0)
> ++#define TAG(x) x##_twoside_fallback
> ++#include "tnl_dd/t_dd_tritmp.h"
> ++
> ++#define IND (0)
> ++#define TAG(x) x##_twoside_offset_fallback
> ++#include "tnl_dd/t_dd_tritmp.h"
> ++
> ++#define IND (0)
> ++#define TAG(x) x##_unfilled_fallback
> ++#include "tnl_dd/t_dd_tritmp.h"
> ++
> ++#define IND (0)
> ++#define TAG(x) x##_offset_unfilled_fallback
> ++#include "tnl_dd/t_dd_tritmp.h"
> ++
> ++#define IND (0)
> ++#define TAG(x) x##_twoside_unfilled_fallback
> ++#include "tnl_dd/t_dd_tritmp.h"
> ++
> ++#define IND (0)
> ++#define TAG(x) x##_twoside_offset_unfilled_fallback
> ++#include "tnl_dd/t_dd_tritmp.h"
> ++
> ++
> ++static void init_rast_tab()
> ++{
> ++ init();
> ++ init_offset();
> ++ init_twoside();
> ++ init_twoside_offset();
> ++ init_unfilled();
> ++ init_offset_unfilled();
> ++ init_twoside_unfilled();
> ++ init_twoside_offset_unfilled();
> ++ init_fallback();
> ++ init_offset_fallback();
> ++ init_twoside_fallback();
> ++ init_twoside_offset_fallback();
> ++ init_unfilled_fallback();
> ++ init_offset_unfilled_fallback();
> ++ init_twoside_unfilled_fallback();
> ++ init_twoside_offset_unfilled_fallback();
> ++}
> ++
> ++
> ++void glamoInitTriFuncs(struct gl_context *ctx)
> ++{
> ++ TNLcontext *tnl = TNL_CONTEXT(ctx);
> ++ struct glamo_context *gCtx = GLAMO_CONTEXT(ctx);
> ++ static int firsttime = 1;
> ++
> ++ if (firsttime) {
> ++ init_rast_tab();
> ++ firsttime = 0;
> ++ }
> ++
> ++ gCtx->prim.start_offset = 0;
> ++ gCtx->prim.current_offset = 0;
> ++ gCtx->prim.vb_bo = NULL;
> ++ gCtx->prim.vb = NULL;
> ++ gCtx->prim.count = 0;
> ++
> ++ tnl->Driver.RunPipeline = glamoRunPipeline;
> ++ tnl->Driver.Render.Start = glamoRenderStart;
> ++ tnl->Driver.Render.Finish = glamoRenderFinish;
> ++ tnl->Driver.Render.PrimitiveNotify = glamoPrimitiveNotify;
> ++ tnl->Driver.Render.ResetLineStipple = _swrast_ResetLineStipple;
> ++ tnl->Driver.Render.BuildVertices = _tnl_build_vertices;
> ++ tnl->Driver.Render.CopyPV = _tnl_copy_pv;
> ++ tnl->Driver.Render.Interp = _tnl_interp;
> ++}
> +diff --git a/src/mesa/drivers/dri/glamo/glamo_tris.h b/src/mesa/drivers/dri/glamo/glamo_tris.h
> +new file mode 100644
> +index 0000000..ea396c1
> +--- /dev/null
> ++++ b/src/mesa/drivers/dri/glamo/glamo_tris.h
> +@@ -0,0 +1,38 @@
> ++/*
> ++ * Direct Rendering Support for SMedia Glamo 336x/337x
> ++ *
> ++ * (c) 2009 Thomas White<taw@bitwiz.org.uk>
> ++ *
> ++ * 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, sublicense,
> ++ * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL
> ++ * THE AUTHORS 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 __GLAMO_TRIS_H
> ++#define __GLAMO_TRIS_H
> ++
> ++#include "main/mtypes.h"
> ++
> ++#include "glamo_context.h"
> ++
> ++/* Amount of space reserved for vertex submission */
> ++#define GLAMO_VB_SIZE (32*1024)
> ++
> ++extern void glamoInitTriFuncs(struct gl_context *ctx);
> ++extern uint32_t *glamoGetPrimSpace(struct glamo_context *gCtx,
> ++ unsigned int count);
> ++
> ++#endif /* __GLAMO_TRIS_H */
> +diff --git a/src/mesa/tnl_dd/t_dd_dmatmp.h b/src/mesa/tnl_dd/t_dd_dmatmp.h
> +index 997fc0b..e3c9119 100644
> +--- a/src/mesa/tnl_dd/t_dd_dmatmp.h
> ++++ b/src/mesa/tnl_dd/t_dd_dmatmp.h
> +@@ -127,6 +127,8 @@ static void TAG(render_points_verts)( struct gl_context *ctx,
> + currentsz = dmasz;
> + }
> +
> ++ FLUSH();
> ++
> + } else {
> + fprintf(stderr, "%s - cannot draw primitive\n", __FUNCTION__);
> + return;
> +@@ -162,6 +164,8 @@ static void TAG(render_lines_verts)( struct gl_context *ctx,
> + currentsz = dmasz;
> + }
> +
> ++ FLUSH();
> ++
> + } else {
> + fprintf(stderr, "%s - cannot draw primitive\n", __FUNCTION__);
> + return;
> +@@ -191,7 +195,7 @@ static void TAG(render_line_strip_verts)( struct gl_context *ctx,
> + TAG(emit_verts)( ctx, j, nr, ALLOC_VERTS(nr) );
> + currentsz = dmasz;
> + }
> +-
> ++
> + FLUSH();
> +
> + } else {
> +@@ -294,6 +298,8 @@ static void TAG(render_triangles_verts)( struct gl_context *ctx,
> + TAG(emit_verts)( ctx, j, nr, ALLOC_VERTS(nr) );
> + currentsz = dmasz;
> + }
> ++
> ++ FLUSH();
> + }
> +
> +
> +@@ -567,6 +573,8 @@ static void TAG(render_quads_verts)( struct gl_context *ctx,
> + TAG(emit_verts)( ctx, j, nr, ALLOC_VERTS(nr) );
> + currentsz = dmasz;
> + }
> ++
> ++ FLUSH();
> + }
> + else if (HAVE_ELTS) {
> + /* Hardware doesn't have a quad primitive type -- try to
> +@@ -640,6 +648,8 @@ static void TAG(render_quads_verts)( struct gl_context *ctx,
> + tmp = EMIT_VERTS(ctx, j + 1, 3, tmp);
> + (void) tmp;
> + }
> ++
> ++ FLUSH();
> + }
> + else {
> + /* Vertices won't fit in a single buffer, should never happen.
> diff --git a/recipes/mesa/mesa-7.10/uclibc.patch b/recipes/mesa/mesa-7.10/uclibc.patch
> new file mode 100644
> index 0000000..0508112
> --- /dev/null
> +++ b/recipes/mesa/mesa-7.10/uclibc.patch
> @@ -0,0 +1,26 @@
> +Index: Mesa-7.9.1/src/mesa/main/imports.c
> +===================================================================
> +--- Mesa-7.9.1.orig/src/mesa/main/imports.c 2010-12-15 13:50:00.000000000 -0800
> ++++ Mesa-7.9.1/src/mesa/main/imports.c 2011-01-10 12:23:48.848656001 -0800
> +@@ -757,7 +757,7 @@
> + float
> + _mesa_strtof( const char *s, char **end )
> + {
> +-#if defined(_GNU_SOURCE)&& !defined(__CYGWIN__)&& !defined(__FreeBSD__)
> ++#if defined(_GNU_SOURCE)&& !defined(__CYGWIN__)&& !defined(__FreeBSD__)&& !defined(__UCLIBC__)
> + static locale_t loc = NULL;
> + if (!loc) {
> + loc = newlocale(LC_CTYPE_MASK, "C", NULL);
> +Index: Mesa-7.9.1/src/glsl/strtod.c
> +===================================================================
> +--- Mesa-7.9.1.orig/src/glsl/strtod.c 2011-01-10 20:08:01.568656001 -0800
> ++++ Mesa-7.9.1/src/glsl/strtod.c 2011-01-10 20:08:39.898656001 -0800
> +@@ -44,7 +44,7 @@
> + double
> + glsl_strtod(const char *s, char **end)
> + {
> +-#if defined(_GNU_SOURCE)&& !defined(__CYGWIN__)&& !defined(__FreeBSD__)
> ++#if defined(_GNU_SOURCE)&& !defined(__CYGWIN__)&& !defined(__FreeBSD__)&& !defined(__UCLIBC__)
> + static locale_t loc = NULL;
> + if (!loc) {
> + loc = newlocale(LC_CTYPE_MASK, "C", NULL);
> diff --git a/recipes/mesa/mesa-dri_7.10.bb b/recipes/mesa/mesa-dri_7.10.bb
> new file mode 100644
> index 0000000..26b56e4
> --- /dev/null
> +++ b/recipes/mesa/mesa-dri_7.10.bb
> @@ -0,0 +1,4 @@
> +require mesa-common.inc
> +require mesa-${PV}.inc
> +require mesa-dri.inc
> +PR = "${INC_PR}.0"
> diff --git a/recipes/mesa/mesa-xlib_7.10.bb b/recipes/mesa/mesa-xlib_7.10.bb
> new file mode 100644
> index 0000000..93bb8cd
> --- /dev/null
> +++ b/recipes/mesa/mesa-xlib_7.10.bb
> @@ -0,0 +1,4 @@
> +require mesa-common.inc
> +require mesa-${PV}.inc
> +require mesa-xlib.inc
> +PR = "${INC_PR}.0"
> diff --git a/recipes/mesa/mesa_7.10.bb b/recipes/mesa/mesa_7.10.bb
> new file mode 100644
> index 0000000..4cb8db7
> --- /dev/null
> +++ b/recipes/mesa/mesa_7.10.bb
> @@ -0,0 +1,6 @@
> +# This is a dummy package so OE can use the poky mesa files
> +require mesa-dri_${PV}.bb
> +
> +PR = "${INC_PR}.0"
> +
> +EXTRA_OECONF += "--disable-egl"
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2011-01-12 8:58 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-01-12 7:23 [PATCH 1/2] xorg: new versions 2011-01-12 Martin Jansa
2011-01-12 7:23 ` [PATCH 2/2] mesa: add new 7.10 version, with D_P -1 and without glamo.patch for now Martin Jansa
2011-01-12 8:42 ` [PATCH v2 2/2] mesa: add new 7.10 version, with D_P -2 Martin Jansa
2011-01-12 8:57 ` Khem Raj
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox