<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-3713</id>
	<title>Nabble - Mesa3D</title>
	<updated>2009-12-24T10:27:02Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/Mesa3D-f3713.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Mesa3D-f3713.html" />
	<subtitle type="html">An implementation of the OpenGL API. Mesa3D home is &lt;a href=&quot;http://sourceforge.net/projects/mesa3d/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.</subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-26916270</id>
	<title>Re: geometry shading patches</title>
	<published>2009-12-24T10:27:02Z</published>
	<updated>2009-12-24T10:27:02Z</updated>
	<author>
		<name>Zack Rusin-2</name>
	</author>
	<content type="html">On Thursday 24 December 2009 10:03:25 Keith Whitwell wrote:
&lt;br&gt;&amp;gt; Thanks Zack. &amp;nbsp;I'm fine with doing it on top of the others...
&lt;br&gt;&lt;br&gt;ok, great, thanks Keith. In that case I'll wait for any objections until 
&lt;br&gt;tomorrow and if nothing will show up commit in the morning.
&lt;br&gt;&lt;br&gt;z
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26916270&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/geometry-shading-patches-tp26914348p26916270.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26914711</id>
	<title>Re: geometry shading patches</title>
	<published>2009-12-24T07:03:25Z</published>
	<updated>2009-12-24T07:03:25Z</updated>
	<author>
		<name>Keith Whitwell-3</name>
	</author>
	<content type="html">Thanks Zack. &amp;nbsp;I'm fine with doing it on top of the others...
&lt;br&gt;&lt;br&gt;Keith
&lt;br&gt;________________________________________
&lt;br&gt;From: Zack Rusin [&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914711&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;zackr@...&lt;/a&gt;]
&lt;br&gt;Sent: Thursday, December 24, 2009 6:39 AM
&lt;br&gt;To: Keith Whitwell
&lt;br&gt;Cc: mesa3d-dev; Michal Krol
&lt;br&gt;Subject: Re: geometry shading patches
&lt;br&gt;&lt;br&gt;On Thursday 24 December 2009 09:09:44 Keith Whitwell wrote:
&lt;br&gt;&amp;gt; Zack,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; In terms of advertising support for this - I wonder if this isn't something
&lt;br&gt;&amp;gt; &amp;nbsp;we should just turn on for all drivers, given that in the worst case it is
&lt;br&gt;&amp;gt; &amp;nbsp;just a vertex path fallback, and a lot of drivers will be hitting those
&lt;br&gt;&amp;gt; &amp;nbsp;for various reasons anyway.
&lt;br&gt;&lt;br&gt;Yes, I completely agree with both of your emails. The attached patches
&lt;br&gt;implement that (plus the last one comments out some unnecessary debugging
&lt;br&gt;output). They do it on top of the previous patches but if you'd like to have a
&lt;br&gt;history clear of them I can try to redo the entire series.
&lt;br&gt;&lt;br&gt;z
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914711&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/geometry-shading-patches-tp26914348p26914711.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26914675</id>
	<title>[Bug 25631] glNewList segfaults</title>
	<published>2009-12-24T06:58:20Z</published>
	<updated>2009-12-24T06:58:20Z</updated>
	<author>
		<name>Bugzilla from bugzilla-daemon@freedesktop.org</name>
	</author>
	<content type="html">&lt;a href=&quot;http://bugs.freedesktop.org/show_bug.cgi?id=25631&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugs.freedesktop.org/show_bug.cgi?id=25631&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;--- Comment #12 from Chia-I Wu &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914675&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;olvaffe@...&lt;/a&gt;&amp;gt; &amp;nbsp;2009-12-24 06:58:19 PST ---
&lt;br&gt;I don't know why the permission issue causes the segfault on Arch. &amp;nbsp;I tried to
&lt;br&gt;&lt;br&gt;$ chmod 000 /dev/dri/card0
&lt;br&gt;&lt;br&gt;and all GL applications fall back to software rasterizer (swrast_dri.so) just
&lt;br&gt;fine. &amp;nbsp;And when I further removed swrast_dri.so, they fall back to indirect
&lt;br&gt;rendering.
&lt;br&gt;&lt;br&gt;Maybe it is some misconfiguration or mismatched library versions in the distro
&lt;br&gt;that cause the fallback path to crash. &amp;nbsp;But that would require more info to
&lt;br&gt;confirm.
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Configure bugmail: &lt;a href=&quot;http://bugs.freedesktop.org/userprefs.cgi?tab=email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugs.freedesktop.org/userprefs.cgi?tab=email&lt;/a&gt;&lt;br&gt;------- You are receiving this mail because: -------
&lt;br&gt;You are the assignee for the bug.
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914675&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-Bug-25631--New%3A-glNewList-segfaults-tp26774037p26914675.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26914526</id>
	<title>Re: geometry shading patches</title>
	<published>2009-12-24T06:39:41Z</published>
	<updated>2009-12-24T06:39:41Z</updated>
	<author>
		<name>Zack Rusin-2</name>
	</author>
	<content type="html">On Thursday 24 December 2009 09:09:44 Keith Whitwell wrote:
&lt;br&gt;&amp;gt; Zack,
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; In terms of advertising support for this - I wonder if this isn't something
&lt;br&gt;&amp;gt; &amp;nbsp;we should just turn on for all drivers, given that in the worst case it is
&lt;br&gt;&amp;gt; &amp;nbsp;just a vertex path fallback, and a lot of drivers will be hitting those
&lt;br&gt;&amp;gt; &amp;nbsp;for various reasons anyway.
&lt;br&gt;&lt;br&gt;Yes, I completely agree with both of your emails. The attached patches 
&lt;br&gt;implement that (plus the last one comments out some unnecessary debugging 
&lt;br&gt;output). They do it on top of the previous patches but if you'd like to have a 
&lt;br&gt;history clear of them I can try to redo the entire series.
&lt;br&gt;&lt;br&gt;z
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[0013-util-put-vertices_per_primitive-function-in-its-prop.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From 0483e3ed1c28982857da3292f8247388e8f9d0d9 Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Zack Rusin &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914526&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;zackr@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Thu, 24 Dec 2009 09:20:45 -0500
&lt;br&gt;Subject: [PATCH 13/15] util: put vertices_per_primitive function in its proper location
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/tgsi/tgsi_sanity.c | &amp;nbsp; &amp;nbsp;5 +--
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/tgsi/tgsi_text.c &amp;nbsp; | &amp;nbsp; &amp;nbsp;4 +-
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/util/u_prim.h &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 33 ++++++++++++++++++++++++++++++
&lt;br&gt;&amp;nbsp;src/gallium/include/pipe/p_inlines.h &amp;nbsp; &amp;nbsp; | &amp;nbsp; 32 -----------------------------
&lt;br&gt;&amp;nbsp;4 files changed, 37 insertions(+), 37 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/src/gallium/auxiliary/tgsi/tgsi_sanity.c b/src/gallium/auxiliary/tgsi/tgsi_sanity.c
&lt;br&gt;index 5d11c19..16b8ec6 100644
&lt;br&gt;--- a/src/gallium/auxiliary/tgsi/tgsi_sanity.c
&lt;br&gt;+++ b/src/gallium/auxiliary/tgsi/tgsi_sanity.c
&lt;br&gt;@@ -27,7 +27,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#include &amp;quot;util/u_debug.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;util/u_memory.h&amp;quot;
&lt;br&gt;-#include &amp;quot;pipe/p_inlines.h&amp;quot;
&lt;br&gt;+#include &amp;quot;util/u_prim.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;cso_cache/cso_hash.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;tgsi_sanity.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;tgsi_info.h&amp;quot;
&lt;br&gt;@@ -463,8 +463,7 @@ iter_property(
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (iter-&amp;gt;processor.Processor == TGSI_PROCESSOR_GEOMETRY &amp;&amp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; prop-&amp;gt;Property.PropertyName == TGSI_PROPERTY_GS_INPUT_PRIM) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx-&amp;gt;implied_array_size =
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pipe_vertices_per_primitive(prop-&amp;gt;u[0].Data);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx-&amp;gt;implied_array_size = u_vertices_per_prim(prop-&amp;gt;u[0].Data);
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; return TRUE;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;diff --git a/src/gallium/auxiliary/tgsi/tgsi_text.c b/src/gallium/auxiliary/tgsi/tgsi_text.c
&lt;br&gt;index ca247a1..825d17a 100644
&lt;br&gt;--- a/src/gallium/auxiliary/tgsi/tgsi_text.c
&lt;br&gt;+++ b/src/gallium/auxiliary/tgsi/tgsi_text.c
&lt;br&gt;@@ -27,6 +27,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#include &amp;quot;util/u_debug.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;util/u_memory.h&amp;quot;
&lt;br&gt;+#include &amp;quot;util/u_prim.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;pipe/p_defines.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;pipe/p_inlines.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;tgsi_text.h&amp;quot;
&lt;br&gt;@@ -1187,8 +1188,7 @@ static boolean parse_property( struct translate_ctx *ctx )
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (property_name == TGSI_PROPERTY_GS_INPUT_PRIM &amp;&amp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx-&amp;gt;processor == TGSI_PROCESSOR_GEOMETRY) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ctx-&amp;gt;implied_array_size =
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pipe_vertices_per_primitive(values[0]);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ctx-&amp;gt;implied_array_size = u_vertices_per_prim(values[0]);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; default:
&lt;br&gt;diff --git a/src/gallium/auxiliary/util/u_prim.h b/src/gallium/auxiliary/util/u_prim.h
&lt;br&gt;index 7434329..10a874f 100644
&lt;br&gt;--- a/src/gallium/auxiliary/util/u_prim.h
&lt;br&gt;+++ b/src/gallium/auxiliary/util/u_prim.h
&lt;br&gt;@@ -135,6 +135,39 @@ static INLINE unsigned u_reduced_prim( unsigned pipe_prim )
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static INLINE unsigned
&lt;br&gt;+u_vertices_per_prim(int primitive)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; switch(primitive) {
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_POINTS:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return 1;
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_LINES:
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_LINE_LOOP:
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_LINE_STRIP:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return 2;
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_TRIANGLES:
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_TRIANGLE_STRIP:
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_TRIANGLE_FAN:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return 3;
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_LINES_ADJACENCY:
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_LINE_STRIP_ADJACENCY:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return 4;
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_TRIANGLES_ADJACENCY:
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return 6;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; /* following primitives should never be used
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;* with geometry shaders abd their size is
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;* undefined */
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_POLYGON:
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_QUADS:
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_QUAD_STRIP:
&lt;br&gt;+ &amp;nbsp; default:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;debug_printf(&amp;quot;Unrecognized geometry shader primitive&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return 3;
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;const char *u_prim_name( unsigned pipe_prim );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#endif
&lt;br&gt;diff --git a/src/gallium/include/pipe/p_inlines.h b/src/gallium/include/pipe/p_inlines.h
&lt;br&gt;index 95ec55d..5fbd62a 100644
&lt;br&gt;--- a/src/gallium/include/pipe/p_inlines.h
&lt;br&gt;+++ b/src/gallium/include/pipe/p_inlines.h
&lt;br&gt;@@ -192,38 +192,6 @@ pipe_transfer_buffer_flags( struct pipe_transfer *transf )
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-static INLINE unsigned
&lt;br&gt;-pipe_vertices_per_primitive(int primitive)
&lt;br&gt;-{
&lt;br&gt;- &amp;nbsp; switch(primitive) {
&lt;br&gt;- &amp;nbsp; case PIPE_PRIM_POINTS:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return 1;
&lt;br&gt;- &amp;nbsp; case PIPE_PRIM_LINES:
&lt;br&gt;- &amp;nbsp; case PIPE_PRIM_LINE_LOOP:
&lt;br&gt;- &amp;nbsp; case PIPE_PRIM_LINE_STRIP:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return 2;
&lt;br&gt;- &amp;nbsp; case PIPE_PRIM_TRIANGLES:
&lt;br&gt;- &amp;nbsp; case PIPE_PRIM_TRIANGLE_STRIP:
&lt;br&gt;- &amp;nbsp; case PIPE_PRIM_TRIANGLE_FAN:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return 3;
&lt;br&gt;- &amp;nbsp; case PIPE_PRIM_LINES_ADJACENCY:
&lt;br&gt;- &amp;nbsp; case PIPE_PRIM_LINE_STRIP_ADJACENCY:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return 4;
&lt;br&gt;- &amp;nbsp; case PIPE_PRIM_TRIANGLES_ADJACENCY:
&lt;br&gt;- &amp;nbsp; case PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return 6;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; /* following primitives should never be used
&lt;br&gt;- &amp;nbsp; &amp;nbsp;* with geometry shaders */
&lt;br&gt;- &amp;nbsp; case PIPE_PRIM_POLYGON:
&lt;br&gt;- &amp;nbsp; case PIPE_PRIM_QUADS:
&lt;br&gt;- &amp;nbsp; case PIPE_PRIM_QUAD_STRIP:
&lt;br&gt;- &amp;nbsp; default:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;debug_printf(&amp;quot;Unrecognized geometry shader primitive&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return 3;
&lt;br&gt;- &amp;nbsp; }
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;#ifdef __cplusplus
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;#endif
&lt;br&gt;-- 
&lt;br&gt;1.6.5.7
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;tt&gt;[0014-gallium-geometry-shader-can-be-always-enabled-and-we.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From 099fd63d2819716e2c162650c6dfc7196eade751 Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Zack Rusin &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914526&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;zackr@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Thu, 24 Dec 2009 09:30:00 -0500
&lt;br&gt;Subject: [PATCH 14/15] gallium: geometry shader can be always enabled and we don't need a cap for that
&lt;br&gt;&lt;br&gt;using the draw module allows us to enable geometry shading even on hardware
&lt;br&gt;that doesn't support it.
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;src/gallium/drivers/softpipe/sp_screen.c | &amp;nbsp; &amp;nbsp;2 --
&lt;br&gt;&amp;nbsp;src/gallium/include/pipe/p_defines.h &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 -
&lt;br&gt;&amp;nbsp;2 files changed, 0 insertions(+), 3 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/src/gallium/drivers/softpipe/sp_screen.c b/src/gallium/drivers/softpipe/sp_screen.c
&lt;br&gt;index a32312d..bd3532d 100644
&lt;br&gt;--- a/src/gallium/drivers/softpipe/sp_screen.c
&lt;br&gt;+++ b/src/gallium/drivers/softpipe/sp_screen.c
&lt;br&gt;@@ -89,8 +89,6 @@ softpipe_get_param(struct pipe_screen *screen, int param)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 13; /* max 4Kx4K */
&lt;br&gt;&amp;nbsp; &amp;nbsp; case PIPE_CAP_TGSI_CONT_SUPPORTED:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 1;
&lt;br&gt;- &amp;nbsp; case PIPE_CAP_GEOMETRY_SHADER4:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return 1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; case PIPE_CAP_BLEND_EQUATION_SEPARATE:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; default:
&lt;br&gt;diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
&lt;br&gt;index 90fc333..2cda408 100644
&lt;br&gt;--- a/src/gallium/include/pipe/p_defines.h
&lt;br&gt;+++ b/src/gallium/include/pipe/p_defines.h
&lt;br&gt;@@ -398,7 +398,6 @@ enum pipe_transfer_usage {
&lt;br&gt;&amp;nbsp;#define PIPE_CAP_MAX_PREDICATE_REGISTERS 30
&lt;br&gt;&amp;nbsp;#define PIPE_CAP_MAX_COMBINED_SAMPLERS &amp;nbsp; 31 &amp;nbsp;/*&amp;lt; Maximum texture image units accessible from vertex
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; and fragment shaders combined */
&lt;br&gt;-#define PIPE_CAP_GEOMETRY_SHADER4 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;32
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/**
&lt;br&gt;-- 
&lt;br&gt;1.6.5.7
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;tt&gt;[0015-draw-disable-some-debugging-output-coming-from-the-g.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From 269df1b1f6fbe15f033cced6e7dc291b2c09683c Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Zack Rusin &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914526&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;zackr@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Thu, 24 Dec 2009 09:34:07 -0500
&lt;br&gt;Subject: [PATCH 15/15] draw: disable some debugging output coming from the geometry shaders
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/draw/draw_gs.c | &amp;nbsp; 10 +++++-----
&lt;br&gt;&amp;nbsp;1 files changed, 5 insertions(+), 5 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/src/gallium/auxiliary/draw/draw_gs.c b/src/gallium/auxiliary/draw/draw_gs.c
&lt;br&gt;index 0a742cb..3edfb64 100644
&lt;br&gt;--- a/src/gallium/auxiliary/draw/draw_gs.c
&lt;br&gt;+++ b/src/gallium/auxiliary/draw/draw_gs.c
&lt;br&gt;@@ -185,8 +185,8 @@ static void draw_fetch_geometry_input(struct draw_geometry_shader *shader,
&lt;br&gt;&amp;nbsp; &amp;nbsp; int idx = 0;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; for (slot = 0, vs_slot = 0; slot &amp;lt; shader-&amp;gt;info.num_inputs; slot++) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;debug_printf(&amp;quot;Slot = %d (semantic = %d)\n&amp;quot;, slot,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; shader-&amp;gt;info.input_semantic_name[slot]);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;/*debug_printf(&amp;quot;Slot = %d (semantic = %d)\n&amp;quot;, slot,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;shader-&amp;gt;info.input_semantic_name[slot]);*/
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (shader-&amp;gt;info.input_semantic_name[slot] ==
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TGSI_SEMANTIC_VERTICES) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (j = 0; j &amp;lt; num_primitives; ++j) {
&lt;br&gt;@@ -200,8 +200,8 @@ static void draw_fetch_geometry_input(struct draw_geometry_shader *shader,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (j = 0; j &amp;lt; num_primitives; ++j) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int vidx = idx;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const float (*prim_ptr)[4];
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;debug_printf(&amp;quot; &amp;nbsp; &amp;nbsp;%d) Prim (num_verts = %d)\n&amp;quot;, start_primitive + j,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; num_vertices);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/*debug_printf(&amp;quot; &amp;nbsp; &amp;nbsp;%d) Prim (num_verts = %d)\n&amp;quot;, start_primitive + j,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;num_vertices);*/
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;prim_ptr = (const float (*)[4])(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (const char *)input_ptr +
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (j * num_vertices * input_vertex_stride));
&lt;br&gt;@@ -211,7 +211,7 @@ static void draw_fetch_geometry_input(struct draw_geometry_shader *shader,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; input = (const float (*)[4])(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(const char *)prim_ptr + (k * input_vertex_stride));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; vidx = k * TGSI_EXEC_MAX_INPUT_ATTRIBS + slot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; debug_printf(&amp;quot;\t%d)(%d) Input vert:\n&amp;quot;, vidx, k);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /*debug_printf(&amp;quot;\t%d)(%d) Input vert:\n&amp;quot;, vidx, k);*/
&lt;br&gt;&amp;nbsp;#if 1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assert(!util_is_inf_or_nan(input[vs_slot][0]));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assert(!util_is_inf_or_nan(input[vs_slot][1]));
&lt;br&gt;-- 
&lt;br&gt;1.6.5.7
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;&lt;br /&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914526&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/geometry-shading-patches-tp26914348p26914526.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26914261</id>
	<title>Re: geometry shading patches</title>
	<published>2009-12-24T06:09:44Z</published>
	<updated>2009-12-24T06:09:44Z</updated>
	<author>
		<name>Keith Whitwell-3</name>
	</author>
	<content type="html">Zack,
&lt;br&gt;&lt;br&gt;In terms of advertising support for this - I wonder if this isn't something we should just turn on for all drivers, given that in the worst case it is just a vertex path fallback, and a lot of drivers will be hitting those for various reasons anyway.
&lt;br&gt;&lt;br&gt;Keith
&lt;br&gt;________________________________________
&lt;br&gt;From: Zack Rusin [&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914261&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;zackr@...&lt;/a&gt;]
&lt;br&gt;Sent: Thursday, December 24, 2009 5:24 AM
&lt;br&gt;To: mesa3d-dev
&lt;br&gt;Cc: Keith Whitwell; Michal Krol
&lt;br&gt;Subject: geometry shading patches
&lt;br&gt;&lt;br&gt;yo,
&lt;br&gt;&lt;br&gt;after our discussions i hacked a new version of geometry shading support in
&lt;br&gt;gallium. the new geometry shading syntax looks as follows:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GEOM
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PROPERTY GS_INPUT_PRIMITIVE TRIANGLES
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PROPERTY GS_OUTPUT_PRIMITIVE TRIANGLE_STRIP
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DCL IN[][0], POSITION, CONSTANT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DCL IN[][1], COLOR, CONSTANT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DCL OUT[0], POSITION, CONSTANT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DCL OUT[1], COLOR, CONSTANT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0:MOV OUT[0], IN[0][0]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1:MOV OUT[1], IN[0][1]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2:EMIT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3:MOV OUT[0], IN[1][0]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 4:MOV OUT[1], IN[1][1]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 5:EMIT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 6:MOV OUT[0], IN[2][0]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 7:MOV OUT[1], IN[2][1]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 8:EMIT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 9:ENDPRIM
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 10:END
&lt;br&gt;the attached patch series adds support for all of it throughout gallium
&lt;br&gt;(including support for 2dimensional arrays in tgsi_sanity checking, tgsi_dump
&lt;br&gt;and tgsi_text).
&lt;br&gt;Right now don't support switching of primitives in the draw module (e.g. input
&lt;br&gt;primitive being points and output primitive being a triangle_strip) but i'd
&lt;br&gt;like to do that after committing the attached changes (also the semantic for
&lt;br&gt;vertices which is a leftover from an old patch should be removed then if it's
&lt;br&gt;ok with you).
&lt;br&gt;&lt;br&gt;Keith, most relevant patches for you are 0001 and 0005.
&lt;br&gt;Michal the most relevant to you are 0007, 0010, 0011 and 0012.
&lt;br&gt;&lt;br&gt;z
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914261&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/geometry-shading-patches-tp26914348p26914261.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26914232</id>
	<title>Re: geometry shading patches</title>
	<published>2009-12-24T06:06:58Z</published>
	<updated>2009-12-24T06:06:58Z</updated>
	<author>
		<name>Keith Whitwell-3</name>
	</author>
	<content type="html">Zack -- Impressive! &amp;nbsp;
&lt;br&gt;&lt;br&gt;Only one comment on patch #5 -- this is probably a util function rather than something for include/pipe. &amp;nbsp;In particular we already have util/u_prim.h which has some similar functions in it -- I'd put this function there if possible...
&lt;br&gt;&lt;br&gt;Keith
&lt;br&gt;________________________________________
&lt;br&gt;From: Zack Rusin [&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914232&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;zackr@...&lt;/a&gt;]
&lt;br&gt;Sent: Thursday, December 24, 2009 5:24 AM
&lt;br&gt;To: mesa3d-dev
&lt;br&gt;Cc: Keith Whitwell; Michal Krol
&lt;br&gt;Subject: geometry shading patches
&lt;br&gt;&lt;br&gt;yo,
&lt;br&gt;&lt;br&gt;after our discussions i hacked a new version of geometry shading support in
&lt;br&gt;gallium. the new geometry shading syntax looks as follows:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GEOM
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PROPERTY GS_INPUT_PRIMITIVE TRIANGLES
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PROPERTY GS_OUTPUT_PRIMITIVE TRIANGLE_STRIP
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DCL IN[][0], POSITION, CONSTANT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DCL IN[][1], COLOR, CONSTANT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DCL OUT[0], POSITION, CONSTANT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DCL OUT[1], COLOR, CONSTANT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0:MOV OUT[0], IN[0][0]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1:MOV OUT[1], IN[0][1]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2:EMIT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3:MOV OUT[0], IN[1][0]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 4:MOV OUT[1], IN[1][1]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 5:EMIT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 6:MOV OUT[0], IN[2][0]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 7:MOV OUT[1], IN[2][1]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 8:EMIT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 9:ENDPRIM
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 10:END
&lt;br&gt;the attached patch series adds support for all of it throughout gallium
&lt;br&gt;(including support for 2dimensional arrays in tgsi_sanity checking, tgsi_dump
&lt;br&gt;and tgsi_text).
&lt;br&gt;Right now don't support switching of primitives in the draw module (e.g. input
&lt;br&gt;primitive being points and output primitive being a triangle_strip) but i'd
&lt;br&gt;like to do that after committing the attached changes (also the semantic for
&lt;br&gt;vertices which is a leftover from an old patch should be removed then if it's
&lt;br&gt;ok with you).
&lt;br&gt;&lt;br&gt;Keith, most relevant patches for you are 0001 and 0005.
&lt;br&gt;Michal the most relevant to you are 0007, 0010, 0011 and 0012.
&lt;br&gt;&lt;br&gt;z
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914232&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/geometry-shading-patches-tp26914348p26914232.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26914189</id>
	<title>Re: [PATCH] Fix missing sl_pp_* and sl_cl_* symbols in all the dri drivers.</title>
	<published>2009-12-24T06:03:39Z</published>
	<updated>2009-12-24T06:03:39Z</updated>
	<author>
		<name>Robert Noland-4</name>
	</author>
	<content type="html">On Thu, 2009-12-24 at 04:48 -0800, Brian Paul wrote:
&lt;br&gt;&amp;gt; &amp;gt; On Wed, Dec 23, 2009 at 4:58 PM, Robert Noland &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914189&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;rnoland@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; On Wed, 2009-12-23 at 16:49 -0700, Brian Paul wrote:
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;&amp;gt; OK, here's a patch for bin/mklib which should help on FreeBSD. &amp;nbsp;It
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;&amp;gt; also puts some common code into new subroutines.
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;&amp;gt; Let me know if this does the trick.
&lt;br&gt;&lt;br&gt;That seems to do it, thanks.
&lt;br&gt;&lt;br&gt;robert.
&lt;br&gt;&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; Missing attachment? &amp;nbsp;Or did I miss a commit?
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; Hmm, trying the attachment again.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; OK, trying yet again. &amp;nbsp;Something's goofy with my gmail.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; -Brian
&lt;br&gt;-- 
&lt;br&gt;Robert Noland &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914189&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;rnoland@...&lt;/a&gt;&amp;gt;
&lt;br&gt;2Hip Networks
&lt;br&gt;&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914189&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--Fix-missing-sl_pp_*-and-sl_cl_*-symbols-in-all-the-dri-drivers.-tp26883557p26914189.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26914348</id>
	<title>geometry shading patches</title>
	<published>2009-12-24T05:24:32Z</published>
	<updated>2009-12-24T05:24:32Z</updated>
	<author>
		<name>Zack Rusin-2</name>
	</author>
	<content type="html">yo,
&lt;br&gt;&lt;br&gt;after our discussions i hacked a new version of geometry shading support in 
&lt;br&gt;gallium. the new geometry shading syntax looks as follows:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GEOM
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PROPERTY GS_INPUT_PRIMITIVE TRIANGLES
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PROPERTY GS_OUTPUT_PRIMITIVE TRIANGLE_STRIP
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DCL IN[][0], POSITION, CONSTANT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DCL IN[][1], COLOR, CONSTANT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DCL OUT[0], POSITION, CONSTANT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DCL OUT[1], COLOR, CONSTANT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0:MOV OUT[0], IN[0][0]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1:MOV OUT[1], IN[0][1]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2:EMIT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3:MOV OUT[0], IN[1][0]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 4:MOV OUT[1], IN[1][1]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 5:EMIT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 6:MOV OUT[0], IN[2][0]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 7:MOV OUT[1], IN[2][1]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 8:EMIT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 9:ENDPRIM
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 10:END
&lt;br&gt;the attached patch series adds support for all of it throughout gallium 
&lt;br&gt;(including support for 2dimensional arrays in tgsi_sanity checking, tgsi_dump 
&lt;br&gt;and tgsi_text).
&lt;br&gt;Right now don't support switching of primitives in the draw module (e.g. input 
&lt;br&gt;primitive being points and output primitive being a triangle_strip) but i'd 
&lt;br&gt;like to do that after committing the attached changes (also the semantic for 
&lt;br&gt;vertices which is a leftover from an old patch should be removed then if it's 
&lt;br&gt;ok with you).
&lt;br&gt;&lt;br&gt;Keith, most relevant patches for you are 0001 and 0005. 
&lt;br&gt;Michal the most relevant to you are 0007, 0010, 0011 and 0012.
&lt;br&gt;&lt;br&gt;z
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[0003-gs-fix-drivers-so-they-work-with-geometry-shaders.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From d25f9137b5c9c505623ce67e1528242acad6aedf Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Zack Rusin &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914348&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;zackr@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Sat, 19 Dec 2009 13:54:53 -0500
&lt;br&gt;Subject: [PATCH 03/12] gs: fix drivers so they work with geometry shaders
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;src/gallium/drivers/llvmpipe/lp_state_derived.c | &amp;nbsp; &amp;nbsp;4 ++--
&lt;br&gt;&amp;nbsp;src/gallium/drivers/r300/r300_state_derived.c &amp;nbsp; | &amp;nbsp; &amp;nbsp;6 +++---
&lt;br&gt;&amp;nbsp;src/gallium/drivers/svga/svga_swtnl_state.c &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;4 ++--
&lt;br&gt;&amp;nbsp;3 files changed, 7 insertions(+), 7 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/src/gallium/drivers/llvmpipe/lp_state_derived.c b/src/gallium/drivers/llvmpipe/lp_state_derived.c
&lt;br&gt;index fdc6a38..acfd7be 100644
&lt;br&gt;--- a/src/gallium/drivers/llvmpipe/lp_state_derived.c
&lt;br&gt;+++ b/src/gallium/drivers/llvmpipe/lp_state_derived.c
&lt;br&gt;@@ -116,13 +116,13 @@ llvmpipe_get_vertex_info(struct llvmpipe_context *llvmpipe)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* this includes texcoords and varying vars */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; src = draw_find_vs_output(llvmpipe-&amp;gt;draw,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; src = draw_find_shader_output(llvmpipe-&amp;gt;draw,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lpfs-&amp;gt;info.input_semantic_name[i],
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lpfs-&amp;gt;info.input_semantic_index[i]);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; draw_emit_vertex_attr(vinfo, EMIT_4F, interp, src);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;llvmpipe-&amp;gt;psize_slot = draw_find_vs_output(llvmpipe-&amp;gt;draw,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;llvmpipe-&amp;gt;psize_slot = draw_find_shader_output(llvmpipe-&amp;gt;draw,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TGSI_SEMANTIC_PSIZE, 0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (llvmpipe-&amp;gt;psize_slot &amp;gt; 0) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; draw_emit_vertex_attr(vinfo, EMIT_4F, INTERP_CONSTANT,
&lt;br&gt;diff --git a/src/gallium/drivers/r300/r300_state_derived.c b/src/gallium/drivers/r300/r300_state_derived.c
&lt;br&gt;index 29bc701..727ae7a 100644
&lt;br&gt;--- a/src/gallium/drivers/r300/r300_state_derived.c
&lt;br&gt;+++ b/src/gallium/drivers/r300/r300_state_derived.c
&lt;br&gt;@@ -71,9 +71,9 @@ static void r300_draw_emit_attrib(struct r300_context* r300,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;struct tgsi_shader_info* info = &amp;r300-&amp;gt;vs-&amp;gt;info;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;int output;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;output = draw_find_vs_output(r300-&amp;gt;draw,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; info-&amp;gt;output_semantic_name[index],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; info-&amp;gt;output_semantic_index[index]);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;output = draw_find_shader_output(r300-&amp;gt;draw,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; info-&amp;gt;output_semantic_name[index],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; info-&amp;gt;output_semantic_index[index]);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;draw_emit_vertex_attr(&amp;r300-&amp;gt;vertex_info-&amp;gt;vinfo, emit, interp, output);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/src/gallium/drivers/svga/svga_swtnl_state.c b/src/gallium/drivers/svga/svga_swtnl_state.c
&lt;br&gt;index 25b8c2a..94b6ccc 100644
&lt;br&gt;--- a/src/gallium/drivers/svga/svga_swtnl_state.c
&lt;br&gt;+++ b/src/gallium/drivers/svga/svga_swtnl_state.c
&lt;br&gt;@@ -156,7 +156,7 @@ int svga_swtnl_update_vdecl( struct svga_context *svga )
&lt;br&gt;&amp;nbsp; &amp;nbsp; memset(vdecl, 0, sizeof(vdecl));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* always add position */
&lt;br&gt;- &amp;nbsp; src = draw_find_vs_output(draw, TGSI_SEMANTIC_POSITION, 0);
&lt;br&gt;+ &amp;nbsp; src = draw_find_shader_output(draw, TGSI_SEMANTIC_POSITION, 0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; draw_emit_vertex_attr(vinfo, EMIT_4F, INTERP_LINEAR, src);
&lt;br&gt;&amp;nbsp; &amp;nbsp; vinfo-&amp;gt;attrib[0].emit = EMIT_4F;
&lt;br&gt;&amp;nbsp; &amp;nbsp; vdecl[0].array.offset = offset;
&lt;br&gt;@@ -169,7 +169,7 @@ int svga_swtnl_update_vdecl( struct svga_context *svga )
&lt;br&gt;&amp;nbsp; &amp;nbsp; for (i = 0; i &amp;lt; fs-&amp;gt;base.info.num_inputs; i++) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned name = fs-&amp;gt;base.info.input_semantic_name[i];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned index = fs-&amp;gt;base.info.input_semantic_index[i];
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;src = draw_find_vs_output(draw, name, index);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;src = draw_find_shader_output(draw, name, index);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;vdecl[nr_decls].array.offset = offset;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;vdecl[nr_decls].identity.usageIndex = fs-&amp;gt;base.info.input_semantic_index[i];
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-- 
&lt;br&gt;1.6.5.7
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;tt&gt;[0001-gallium-add-geometry-shader-support-to-gallium.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From 3adfbe16c537585c110f6339052a22be38d36cae Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Zack Rusin &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914348&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;zackr@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Mon, 14 Dec 2009 17:11:46 -0500
&lt;br&gt;Subject: [PATCH 01/12] gallium: add geometry shader support to gallium
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/cso_cache/cso_context.c &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 40 +++-
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/cso_cache/cso_context.h &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;7 +
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/draw/Makefile &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/draw/SConscript &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;3 +-
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/draw/draw_context.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 77 ++++-
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/draw/draw_context.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 19 +-
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/draw/draw_gs.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp;338 ++++++++++++++++++++
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/draw/draw_gs.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 76 +++++
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/draw/draw_pipe_aaline.c &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 12 +-
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/draw/draw_pipe_aapoint.c &amp;nbsp; &amp;nbsp; | &amp;nbsp; 12 +-
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/draw/draw_pipe_clip.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;4 +-
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/draw/draw_pipe_cull.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/draw/draw_pipe_offset.c &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/draw/draw_pipe_stipple.c &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;5 +-
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/draw/draw_pipe_wide_line.c &amp;nbsp; | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/draw/draw_pipe_wide_point.c &amp;nbsp;| &amp;nbsp; 14 +-
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/draw/draw_private.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 32 ++-
&lt;br&gt;&amp;nbsp;.../auxiliary/draw/draw_pt_fetch_shade_pipeline.c &amp;nbsp;| &amp;nbsp; 50 +++-
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/draw/draw_pt_post_vs.c &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;4 +-
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/draw/draw_pt_util.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 16 +
&lt;br&gt;&amp;nbsp;.../auxiliary/draw/draw_pt_varray_tmp_linear.h &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;4 +
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/draw/draw_vs_varient.c &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;5 +-
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/tgsi/tgsi_dump.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;4 +-
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/tgsi/tgsi_exec.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 45 +++-
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/tgsi/tgsi_exec.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 15 +-
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/tgsi/tgsi_text.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;4 +-
&lt;br&gt;&amp;nbsp;src/gallium/drivers/cell/ppu/cell_draw_arrays.c &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;src/gallium/drivers/cell/ppu/cell_state_derived.c &amp;nbsp;| &amp;nbsp; &amp;nbsp;8 +-
&lt;br&gt;&amp;nbsp;src/gallium/drivers/cell/ppu/cell_state_emit.c &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;src/gallium/drivers/i915/i915_context.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;src/gallium/drivers/i915/i915_state_derived.c &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 10 +-
&lt;br&gt;&amp;nbsp;src/gallium/drivers/llvmpipe/lp_state_derived.c &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;src/gallium/drivers/llvmpipe/lp_state_fs.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;3 +-
&lt;br&gt;&amp;nbsp;src/gallium/drivers/nv04/nv04_vbo.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;src/gallium/drivers/nv10/nv10_vbo.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;src/gallium/drivers/nv20/nv20_state_emit.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 16 +-
&lt;br&gt;&amp;nbsp;src/gallium/drivers/nv20/nv20_vbo.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;src/gallium/drivers/nv40/nv40_draw.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;5 +-
&lt;br&gt;&amp;nbsp;src/gallium/drivers/softpipe/sp_context.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;4 +
&lt;br&gt;&amp;nbsp;src/gallium/drivers/softpipe/sp_context.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;src/gallium/drivers/softpipe/sp_draw_arrays.c &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 23 +-
&lt;br&gt;&amp;nbsp;src/gallium/drivers/softpipe/sp_screen.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;2 +
&lt;br&gt;&amp;nbsp;src/gallium/drivers/softpipe/sp_setup.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;src/gallium/drivers/softpipe/sp_state.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 10 +
&lt;br&gt;&amp;nbsp;src/gallium/drivers/softpipe/sp_state_derived.c &amp;nbsp; &amp;nbsp;| &amp;nbsp; 10 +-
&lt;br&gt;&amp;nbsp;src/gallium/drivers/softpipe/sp_state_fs.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 59 ++++
&lt;br&gt;&amp;nbsp;src/gallium/drivers/svga/svga_swtnl_draw.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;src/gallium/include/pipe/p_context.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;6 +
&lt;br&gt;&amp;nbsp;src/gallium/include/pipe/p_defines.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 30 +-
&lt;br&gt;&amp;nbsp;src/gallium/include/pipe/p_shader_tokens.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 22 +-
&lt;br&gt;&amp;nbsp;src/gallium/state_trackers/python/p_context.i &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 19 ++
&lt;br&gt;&amp;nbsp;src/gallium/state_trackers/python/samples/gs.py &amp;nbsp; &amp;nbsp;| &amp;nbsp;254 +++++++++++++++
&lt;br&gt;&amp;nbsp;src/gallium/state_trackers/python/st_device.h &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;src/mesa/state_tracker/st_draw_feedback.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;3 +-
&lt;br&gt;&amp;nbsp;54 files changed, 1159 insertions(+), 137 deletions(-)
&lt;br&gt;&amp;nbsp;create mode 100644 src/gallium/auxiliary/draw/draw_gs.c
&lt;br&gt;&amp;nbsp;create mode 100644 src/gallium/auxiliary/draw/draw_gs.h
&lt;br&gt;&amp;nbsp;create mode 100644 src/gallium/state_trackers/python/samples/gs.py
&lt;br&gt;&lt;br&gt;diff --git a/src/gallium/auxiliary/cso_cache/cso_context.c b/src/gallium/auxiliary/cso_cache/cso_context.c
&lt;br&gt;index 80bd0c9..2b16332 100644
&lt;br&gt;--- a/src/gallium/auxiliary/cso_cache/cso_context.c
&lt;br&gt;+++ b/src/gallium/auxiliary/cso_cache/cso_context.c
&lt;br&gt;@@ -42,6 +42,7 @@
&lt;br&gt;&amp;nbsp;#include &amp;quot;cso_cache/cso_context.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;cso_cache/cso_cache.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;cso_cache/cso_hash.h&amp;quot;
&lt;br&gt;+#include &amp;quot;cso_context.h&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;struct cso_context {
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct pipe_context *pipe;
&lt;br&gt;@@ -85,8 +86,8 @@ struct cso_context {
&lt;br&gt;&amp;nbsp; &amp;nbsp; void *blend, *blend_saved;
&lt;br&gt;&amp;nbsp; &amp;nbsp; void *depth_stencil, *depth_stencil_saved;
&lt;br&gt;&amp;nbsp; &amp;nbsp; void *rasterizer, *rasterizer_saved;
&lt;br&gt;- &amp;nbsp; void *fragment_shader, *fragment_shader_saved;
&lt;br&gt;- &amp;nbsp; void *vertex_shader, *vertex_shader_saved;
&lt;br&gt;+ &amp;nbsp; void *fragment_shader, *fragment_shader_saved, *geometry_shader;
&lt;br&gt;+ &amp;nbsp; void *vertex_shader, *vertex_shader_saved, *geometry_shader_saved;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct pipe_framebuffer_state fb, fb_saved;
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct pipe_viewport_state vp, vp_saved;
&lt;br&gt;@@ -1027,3 +1028,38 @@ enum pipe_error cso_set_blend_color(struct cso_context *ctx,
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; return PIPE_OK;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+enum pipe_error cso_set_geometry_shader_handle(struct cso_context *ctx,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void *handle)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; if (ctx-&amp;gt;geometry_shader != handle) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx-&amp;gt;geometry_shader = handle;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx-&amp;gt;pipe-&amp;gt;bind_gs_state(ctx-&amp;gt;pipe, handle);
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; return PIPE_OK;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void cso_delete_geometry_shader(struct cso_context *ctx, void *handle)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (handle == ctx-&amp;gt;geometry_shader) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;/* unbind before deleting */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx-&amp;gt;pipe-&amp;gt;bind_gs_state(ctx-&amp;gt;pipe, NULL);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx-&amp;gt;geometry_shader = NULL;
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; ctx-&amp;gt;pipe-&amp;gt;delete_gs_state(ctx-&amp;gt;pipe, handle);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void cso_save_geometry_shader(struct cso_context *ctx)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; assert(!ctx-&amp;gt;geometry_shader_saved);
&lt;br&gt;+ &amp;nbsp; ctx-&amp;gt;geometry_shader_saved = ctx-&amp;gt;geometry_shader;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void cso_restore_geometry_shader(struct cso_context *ctx)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; if (ctx-&amp;gt;geometry_shader_saved != ctx-&amp;gt;geometry_shader) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx-&amp;gt;pipe-&amp;gt;bind_gs_state(ctx-&amp;gt;pipe, ctx-&amp;gt;geometry_shader_saved);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx-&amp;gt;geometry_shader = ctx-&amp;gt;geometry_shader_saved;
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; ctx-&amp;gt;geometry_shader_saved = NULL;
&lt;br&gt;+}
&lt;br&gt;diff --git a/src/gallium/auxiliary/cso_cache/cso_context.h b/src/gallium/auxiliary/cso_cache/cso_context.h
&lt;br&gt;index e5b9217..b9e313e 100644
&lt;br&gt;--- a/src/gallium/auxiliary/cso_cache/cso_context.h
&lt;br&gt;+++ b/src/gallium/auxiliary/cso_cache/cso_context.h
&lt;br&gt;@@ -146,6 +146,13 @@ void cso_save_vertex_shader(struct cso_context *cso);
&lt;br&gt;&amp;nbsp;void cso_restore_vertex_shader(struct cso_context *cso);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+enum pipe_error cso_set_geometry_shader_handle(struct cso_context *ctx,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void *handle);
&lt;br&gt;+void cso_delete_geometry_shader(struct cso_context *ctx, void *handle);
&lt;br&gt;+void cso_save_geometry_shader(struct cso_context *cso);
&lt;br&gt;+void cso_restore_geometry_shader(struct cso_context *cso);
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;enum pipe_error cso_set_framebuffer(struct cso_context *cso,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const struct pipe_framebuffer_state *fb);
&lt;br&gt;diff --git a/src/gallium/auxiliary/draw/Makefile b/src/gallium/auxiliary/draw/Makefile
&lt;br&gt;index 5041dcc..2481674 100644
&lt;br&gt;--- a/src/gallium/auxiliary/draw/Makefile
&lt;br&gt;+++ b/src/gallium/auxiliary/draw/Makefile
&lt;br&gt;@@ -5,6 +5,7 @@ LIBNAME = draw
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;C_SOURCES = \
&lt;br&gt;&amp;nbsp;	draw_context.c \
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;draw_gs.c \
&lt;br&gt;&amp;nbsp;	draw_pipe.c \
&lt;br&gt;&amp;nbsp;	draw_pipe_aaline.c \
&lt;br&gt;&amp;nbsp;	draw_pipe_aapoint.c \
&lt;br&gt;diff --git a/src/gallium/auxiliary/draw/SConscript b/src/gallium/auxiliary/draw/SConscript
&lt;br&gt;index 5f05aa3..a022c14 100644
&lt;br&gt;--- a/src/gallium/auxiliary/draw/SConscript
&lt;br&gt;+++ b/src/gallium/auxiliary/draw/SConscript
&lt;br&gt;@@ -40,7 +40,8 @@ draw = env.ConvenienceLibrary(
&lt;br&gt;&amp;nbsp;		'draw_vs_llvm.c',
&lt;br&gt;&amp;nbsp;		'draw_vs_ppc.c',
&lt;br&gt;&amp;nbsp;		'draw_vs_sse.c',
&lt;br&gt;-		'draw_vs_varient.c'
&lt;br&gt;+		'draw_vs_varient.c',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'draw_gs.c'
&lt;br&gt;&amp;nbsp;	])
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;auxiliaries.insert(0, draw)
&lt;br&gt;diff --git a/src/gallium/auxiliary/draw/draw_context.c b/src/gallium/auxiliary/draw/draw_context.c
&lt;br&gt;index cc5f7f0..667aa46 100644
&lt;br&gt;--- a/src/gallium/auxiliary/draw/draw_context.c
&lt;br&gt;+++ b/src/gallium/auxiliary/draw/draw_context.c
&lt;br&gt;@@ -36,6 +36,7 @@
&lt;br&gt;&amp;nbsp;#include &amp;quot;draw_context.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;draw_vbuf.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;draw_vs.h&amp;quot;
&lt;br&gt;+#include &amp;quot;draw_gs.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;draw_pt.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;draw_pipe.h&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -67,6 +68,9 @@ struct draw_context *draw_create( void )
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (!draw_vs_init( draw ))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;goto fail;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; if (!draw_gs_init( draw ))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;goto fail;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; return draw;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;fail:
&lt;br&gt;@@ -231,11 +235,19 @@ draw_set_mapped_vertex_buffer(struct draw_context *draw,
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void
&lt;br&gt;&amp;nbsp;draw_set_mapped_constant_buffer(struct draw_context *draw,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const void *buffer, 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned shader_type,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const void *buffer,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned size )
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp; draw-&amp;gt;pt.user.constants = buffer;
&lt;br&gt;- &amp;nbsp; draw_vs_set_constants( draw, (const float (*)[4])buffer, size );
&lt;br&gt;+ &amp;nbsp; debug_assert(shader_type == PIPE_SHADER_VERTEX ||
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;shader_type == PIPE_SHADER_GEOMETRY);
&lt;br&gt;+ &amp;nbsp; if (shader_type == PIPE_SHADER_VERTEX) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;draw-&amp;gt;pt.user.vs_constants = buffer;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;draw_vs_set_constants( draw, (const float (*)[4])buffer, size );
&lt;br&gt;+ &amp;nbsp; } else if (shader_type == PIPE_SHADER_GEOMETRY) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;draw-&amp;gt;pt.user.gs_constants = buffer;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;draw_gs_set_constants( draw, (const float (*)[4])buffer, size );
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -298,7 +310,7 @@ draw_set_force_passthrough( struct draw_context *draw, boolean enable )
&lt;br&gt;&amp;nbsp; * a post-transformed vertex.
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;&amp;nbsp; * With this function, drivers that use the draw module should have no reason
&lt;br&gt;- * to track the current vertex shader.
&lt;br&gt;+ * to track the current vertex/geometry shader.
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;&amp;nbsp; * Note that the draw module may sometimes generate vertices with extra
&lt;br&gt;&amp;nbsp; * attributes (such as texcoords for AA lines). &amp;nbsp;The driver can call this
&lt;br&gt;@@ -309,43 +321,59 @@ draw_set_force_passthrough( struct draw_context *draw, boolean enable )
&lt;br&gt;&amp;nbsp; * work for the drivers.
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;int
&lt;br&gt;-draw_find_vs_output(const struct draw_context *draw,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uint semantic_name, uint semantic_index)
&lt;br&gt;+draw_find_shader_output(const struct draw_context *draw,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uint semantic_name, uint semantic_index)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; const struct draw_vertex_shader *vs = draw-&amp;gt;vs.vertex_shader;
&lt;br&gt;+ &amp;nbsp; const struct draw_geometry_shader *gs = draw-&amp;gt;gs.geometry_shader;
&lt;br&gt;&amp;nbsp; &amp;nbsp; uint i;
&lt;br&gt;- &amp;nbsp; for (i = 0; i &amp;lt; vs-&amp;gt;info.num_outputs; i++) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (vs-&amp;gt;info.output_semantic_name[i] == semantic_name &amp;&amp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;vs-&amp;gt;info.output_semantic_index[i] == semantic_index)
&lt;br&gt;+ &amp;nbsp; const struct tgsi_shader_info *info = &amp;vs-&amp;gt;info;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; if (gs)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;info = &amp;gs-&amp;gt;info;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; for (i = 0; i &amp;lt; info-&amp;gt;num_outputs; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (info-&amp;gt;output_semantic_name[i] == semantic_name &amp;&amp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;info-&amp;gt;output_semantic_index[i] == semantic_index)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return i;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* XXX there may be more than one extra vertex attrib.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* For example, simulated gl_FragCoord and gl_PointCoord.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;- &amp;nbsp; if (draw-&amp;gt;extra_vp_outputs.semantic_name == semantic_name &amp;&amp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; draw-&amp;gt;extra_vp_outputs.semantic_index == semantic_index) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return draw-&amp;gt;extra_vp_outputs.slot;
&lt;br&gt;+ &amp;nbsp; if (draw-&amp;gt;extra_shader_outputs.semantic_name == semantic_name &amp;&amp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; draw-&amp;gt;extra_shader_outputs.semantic_index == semantic_index) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return draw-&amp;gt;extra_shader_outputs.slot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; return 0;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/**
&lt;br&gt;- * Return number of vertex shader outputs.
&lt;br&gt;+ * Return number of the shader outputs.
&lt;br&gt;+ *
&lt;br&gt;+ * If geometry shader is present, its output will be returned,
&lt;br&gt;+ * if not vertex shader is used.
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;uint
&lt;br&gt;-draw_num_vs_outputs(const struct draw_context *draw)
&lt;br&gt;+draw_num_shader_outputs(const struct draw_context *draw)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; uint count = draw-&amp;gt;vs.vertex_shader-&amp;gt;info.num_outputs;
&lt;br&gt;- &amp;nbsp; if (draw-&amp;gt;extra_vp_outputs.slot &amp;gt; 0)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; /* if geometry shader is present, its outputs go to te
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;* driver, not the vertex shaders */
&lt;br&gt;+ &amp;nbsp; if (draw-&amp;gt;gs.geometry_shader)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;count = draw-&amp;gt;gs.geometry_shader-&amp;gt;info.num_outputs;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; if (draw-&amp;gt;extra_shader_outputs.slot &amp;gt; 0)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;count++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; return count;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/**
&lt;br&gt;- * Provide TGSI sampler objects for vertex shaders that use texture fetches.
&lt;br&gt;+ * Provide TGSI sampler objects for vertex/geometry shaders that use texture fetches.
&lt;br&gt;&amp;nbsp; * This might only be used by software drivers for the time being.
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;void
&lt;br&gt;@@ -355,6 +383,8 @@ draw_texture_samplers(struct draw_context *draw,
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; draw-&amp;gt;vs.num_samplers = num_samplers;
&lt;br&gt;&amp;nbsp; &amp;nbsp; draw-&amp;gt;vs.samplers = samplers;
&lt;br&gt;+ &amp;nbsp; draw-&amp;gt;gs.num_samplers = num_samplers;
&lt;br&gt;+ &amp;nbsp; draw-&amp;gt;gs.samplers = samplers;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -421,3 +451,18 @@ void draw_do_flush( struct draw_context *draw, unsigned flags )
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;draw-&amp;gt;flushing = FALSE;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+int draw_current_shader_outputs(struct draw_context *draw)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; if (draw-&amp;gt;gs.geometry_shader)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return draw-&amp;gt;gs.num_gs_outputs;
&lt;br&gt;+ &amp;nbsp; return draw-&amp;gt;vs.num_vs_outputs;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int draw_current_shader_position_output(struct draw_context *draw)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; if (draw-&amp;gt;gs.geometry_shader)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return draw-&amp;gt;gs.position_output;
&lt;br&gt;+ &amp;nbsp; return draw-&amp;gt;vs.position_output;
&lt;br&gt;+}
&lt;br&gt;diff --git a/src/gallium/auxiliary/draw/draw_context.h b/src/gallium/auxiliary/draw/draw_context.h
&lt;br&gt;index 465b8f1..b716209 100644
&lt;br&gt;--- a/src/gallium/auxiliary/draw/draw_context.h
&lt;br&gt;+++ b/src/gallium/auxiliary/draw/draw_context.h
&lt;br&gt;@@ -45,6 +45,7 @@ struct pipe_context;
&lt;br&gt;&amp;nbsp;struct draw_context;
&lt;br&gt;&amp;nbsp;struct draw_stage;
&lt;br&gt;&amp;nbsp;struct draw_vertex_shader;
&lt;br&gt;+struct draw_geometry_shader;
&lt;br&gt;&amp;nbsp;struct tgsi_sampler;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -85,11 +86,11 @@ draw_install_pstipple_stage(struct draw_context *draw, struct pipe_context *pipe
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;int
&lt;br&gt;-draw_find_vs_output(const struct draw_context *draw,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uint semantic_name, uint semantic_index);
&lt;br&gt;+draw_find_shader_output(const struct draw_context *draw,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uint semantic_name, uint semantic_index);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;uint
&lt;br&gt;-draw_num_vs_outputs(const struct draw_context *draw);
&lt;br&gt;+draw_num_shader_outputs(const struct draw_context *draw);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void
&lt;br&gt;@@ -112,6 +113,17 @@ void draw_delete_vertex_shader(struct draw_context *draw,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; struct draw_vertex_shader *dvs);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+/*
&lt;br&gt;+ * Geometry shader functions
&lt;br&gt;+ */
&lt;br&gt;+struct draw_geometry_shader *
&lt;br&gt;+draw_create_geometry_shader(struct draw_context *draw,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const struct pipe_shader_state *shader);
&lt;br&gt;+void draw_bind_geometry_shader(struct draw_context *draw,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; struct draw_geometry_shader *dvs);
&lt;br&gt;+void draw_delete_geometry_shader(struct draw_context *draw,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; struct draw_geometry_shader *dvs);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/*
&lt;br&gt;&amp;nbsp; * Vertex data functions
&lt;br&gt;@@ -140,6 +152,7 @@ void draw_set_mapped_vertex_buffer(struct draw_context *draw,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned attr, const void *buffer);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void draw_set_mapped_constant_buffer(struct draw_context *draw,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned shader_type,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const void *buffer,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned size );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/src/gallium/auxiliary/draw/draw_gs.c b/src/gallium/auxiliary/draw/draw_gs.c
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..1154228
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/src/gallium/auxiliary/draw/draw_gs.c
&lt;br&gt;@@ -0,0 +1,338 @@
&lt;br&gt;+/**************************************************************************
&lt;br&gt;+ *
&lt;br&gt;+ * Copyright 2009 VMWare Inc.
&lt;br&gt;+ * All Rights Reserved.
&lt;br&gt;+ *
&lt;br&gt;+ * Permission is hereby granted, free of charge, to any person obtaining a
&lt;br&gt;+ * copy of this software and associated documentation files (the
&lt;br&gt;+ * &amp;quot;Software&amp;quot;), to deal in the Software without restriction, including
&lt;br&gt;+ * without limitation the rights to use, copy, modify, merge, publish,
&lt;br&gt;+ * distribute, sub license, and/or sell copies of the Software, and to
&lt;br&gt;+ * permit persons to whom the Software is furnished to do so, subject to
&lt;br&gt;+ * the following conditions:
&lt;br&gt;+ *
&lt;br&gt;+ * The above copyright notice and this permission notice (including the
&lt;br&gt;+ * next paragraph) shall be included in all copies or substantial portions
&lt;br&gt;+ * of the Software.
&lt;br&gt;+ *
&lt;br&gt;+ * THE SOFTWARE IS PROVIDED &amp;quot;AS IS&amp;quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS
&lt;br&gt;+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
&lt;br&gt;+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
&lt;br&gt;+ * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
&lt;br&gt;+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
&lt;br&gt;+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
&lt;br&gt;+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
&lt;br&gt;+ *
&lt;br&gt;+ **************************************************************************/
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;draw_gs.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;draw_private.h&amp;quot;
&lt;br&gt;+#include &amp;quot;draw_context.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;tgsi/tgsi_parse.h&amp;quot;
&lt;br&gt;+#include &amp;quot;tgsi/tgsi_exec.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;pipe/p_shader_tokens.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;util/u_math.h&amp;quot;
&lt;br&gt;+#include &amp;quot;util/u_memory.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+#define MAX_PRIM_VERTICES 6
&lt;br&gt;+/* fixme: move it from here */
&lt;br&gt;+#define MAX_PRIMITIVES 64
&lt;br&gt;+
&lt;br&gt;+boolean
&lt;br&gt;+draw_gs_init( struct draw_context *draw )
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; draw-&amp;gt;gs.machine = tgsi_exec_machine_create();
&lt;br&gt;+ &amp;nbsp; if (!draw-&amp;gt;gs.machine)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; draw-&amp;gt;gs.machine-&amp;gt;Primitives = align_malloc(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;MAX_PRIMITIVES * sizeof(struct tgsi_exec_vector), 16);
&lt;br&gt;+ &amp;nbsp; if (!draw-&amp;gt;gs.machine-&amp;gt;Primitives)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;+ &amp;nbsp; memset(draw-&amp;gt;gs.machine-&amp;gt;Primitives, 0,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MAX_PRIMITIVES * sizeof(struct tgsi_exec_vector));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; return TRUE;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+void draw_gs_set_constants( struct draw_context *draw,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const float (*constants)[4],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned size )
&lt;br&gt;+{
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+struct draw_geometry_shader *
&lt;br&gt;+draw_create_geometry_shader(struct draw_context *draw,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const struct pipe_shader_state *state)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; struct draw_geometry_shader *gs;
&lt;br&gt;+ &amp;nbsp; int i;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; gs = CALLOC_STRUCT(draw_geometry_shader);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; if (!gs)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return NULL;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; gs-&amp;gt;state = *state;
&lt;br&gt;+ &amp;nbsp; gs-&amp;gt;state.tokens = tgsi_dup_tokens(state-&amp;gt;tokens);
&lt;br&gt;+ &amp;nbsp; if (!gs-&amp;gt;state.tokens) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;FREE(gs);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return NULL;
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; tgsi_scan_shader(state-&amp;gt;tokens, &amp;gs-&amp;gt;info);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; /* setup the defaults */
&lt;br&gt;+ &amp;nbsp; gs-&amp;gt;input_primitive = PIPE_PRIM_TRIANGLES;
&lt;br&gt;+ &amp;nbsp; gs-&amp;gt;output_primitive = PIPE_PRIM_TRIANGLE_STRIP;
&lt;br&gt;+ &amp;nbsp; gs-&amp;gt;max_output_vertices = 32;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; for (i = 0; i &amp;lt; gs-&amp;gt;info.num_properties; ++i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (gs-&amp;gt;info.properties[i].name ==
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TGSI_PROPERTY_GS_INPUT_PRIM)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gs-&amp;gt;input_primitive = gs-&amp;gt;info.properties[i].data[0];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;else if (gs-&amp;gt;info.properties[i].name ==
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TGSI_PROPERTY_GS_OUTPUT_PRIM)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gs-&amp;gt;output_primitive = gs-&amp;gt;info.properties[i].data[0];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;else if (gs-&amp;gt;info.properties[i].name ==
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TGSI_PROPERTY_GS_MAX_VERTICES)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gs-&amp;gt;max_output_vertices = gs-&amp;gt;info.properties[i].data[0];
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; gs-&amp;gt;machine = draw-&amp;gt;gs.machine;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; if (gs)
&lt;br&gt;+ &amp;nbsp; {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;uint i;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;for (i = 0; i &amp;lt; gs-&amp;gt;info.num_outputs; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (gs-&amp;gt;info.output_semantic_name[i] == TGSI_SEMANTIC_POSITION &amp;&amp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gs-&amp;gt;info.output_semantic_index[i] == 0)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gs-&amp;gt;position_output = i;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; return gs;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void draw_bind_geometry_shader(struct draw_context *draw,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; struct draw_geometry_shader *dgs)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; draw_do_flush(draw, DRAW_FLUSH_STATE_CHANGE);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; if (dgs) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;draw-&amp;gt;gs.geometry_shader = dgs;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;draw-&amp;gt;gs.num_gs_outputs = dgs-&amp;gt;info.num_outputs;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;draw-&amp;gt;gs.position_output = dgs-&amp;gt;position_output;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;draw_geometry_shader_prepare(dgs, draw);
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;draw-&amp;gt;gs.geometry_shader = NULL;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;draw-&amp;gt;gs.num_gs_outputs = 0;
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void draw_delete_geometry_shader(struct draw_context *draw,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; struct draw_geometry_shader *dgs)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; FREE(dgs);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static INLINE int num_vertices_for_prim(int prim)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; switch(prim) {
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_POINTS:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return 1;
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_LINES:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return 2;
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_LINE_LOOP:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return 2;
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_LINE_STRIP:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return 2;
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_TRIANGLES:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return 3;
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_TRIANGLE_STRIP:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return 3;
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_TRIANGLE_FAN:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return 3;
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_LINES_ADJACENCY:
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_LINE_STRIP_ADJACENCY:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return 4;
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_TRIANGLES_ADJACENCY:
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return 6;
&lt;br&gt;+ &amp;nbsp; default:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;assert(!&amp;quot;Bad geometry shader input&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static void draw_fetch_geometry_input(struct draw_geometry_shader *shader,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int start_primitive,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int num_primitives,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const float (*input_ptr)[4],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned input_vertex_stride,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned inputs_from_vs)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; struct tgsi_exec_machine *machine = shader-&amp;gt;machine;
&lt;br&gt;+ &amp;nbsp; unsigned slot, vs_slot, k, j;
&lt;br&gt;+ &amp;nbsp; unsigned num_vertices = num_vertices_for_prim(shader-&amp;gt;input_primitive);
&lt;br&gt;+ &amp;nbsp; int idx = 0;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; for (slot = 0, vs_slot = 0; slot &amp;lt; shader-&amp;gt;info.num_inputs; slot++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;debug_printf(&amp;quot;Slot = %d (semantic = %d)\n&amp;quot;, slot,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; shader-&amp;gt;info.input_semantic_name[slot]);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (shader-&amp;gt;info.input_semantic_name[slot] ==
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TGSI_SEMANTIC_VERTICES) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (j = 0; j &amp;lt; num_primitives; ++j) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;machine-&amp;gt;Inputs[idx].xyzw[0].f[j] = (float)num_vertices;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;machine-&amp;gt;Inputs[idx].xyzw[1].f[j] = (float)num_vertices;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;machine-&amp;gt;Inputs[idx].xyzw[2].f[j] = (float)num_vertices;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;machine-&amp;gt;Inputs[idx].xyzw[3].f[j] = (float)num_vertices;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ++idx;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (j = 0; j &amp;lt; num_primitives; ++j) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int vidx = idx;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const float (*prim_ptr)[4];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;debug_printf(&amp;quot; &amp;nbsp; &amp;nbsp;%d) Prim (num_verts = %d)\n&amp;quot;, start_primitive + j,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; num_vertices);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;prim_ptr = (const float (*)[4])(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (const char *)input_ptr +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (j * num_vertices * input_vertex_stride));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (k = 0; k &amp;lt; num_vertices; ++k, ++vidx) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const float (*input)[4];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; input = (const float (*)[4])(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(const char *)prim_ptr + (k * input_vertex_stride));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; debug_printf(&amp;quot;\t%d)(%d) Input vert:\n&amp;quot;, vidx, k);
&lt;br&gt;+#if 1
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assert(!util_is_inf_or_nan(input[vs_slot][0]));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assert(!util_is_inf_or_nan(input[vs_slot][1]));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assert(!util_is_inf_or_nan(input[vs_slot][2]));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assert(!util_is_inf_or_nan(input[vs_slot][3]));
&lt;br&gt;+#endif
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; machine-&amp;gt;Inputs[vidx].xyzw[0].f[j] = input[vs_slot][0];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; machine-&amp;gt;Inputs[vidx].xyzw[1].f[j] = input[vs_slot][1];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; machine-&amp;gt;Inputs[vidx].xyzw[2].f[j] = input[vs_slot][2];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; machine-&amp;gt;Inputs[vidx].xyzw[3].f[j] = input[vs_slot][3];
&lt;br&gt;+#if 0
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; debug_printf(&amp;quot;\t\t%d %f %f %f %f\n&amp;quot;, slot,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;machine-&amp;gt;Inputs[vidx].xyzw[0].f[j],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;machine-&amp;gt;Inputs[vidx].xyzw[1].f[j],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;machine-&amp;gt;Inputs[vidx].xyzw[2].f[j],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;machine-&amp;gt;Inputs[vidx].xyzw[3].f[j]);
&lt;br&gt;+#endif
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ++vs_slot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; idx += num_vertices;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static INLINE void
&lt;br&gt;+draw_geometry_fetch_outputs(struct draw_geometry_shader *shader,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int num_primitives,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float (*output)[4],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned vertex_size)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; struct tgsi_exec_machine *machine = shader-&amp;gt;machine;
&lt;br&gt;+ &amp;nbsp; unsigned prim_idx, j, slot;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; /* Unswizzle all output results.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;+ &amp;nbsp; /* FIXME: handle all the primitives produced by the gs, not just
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;* the first one
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;unsigned prim_count =
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;mach-&amp;gt;Temps[TEMP_PRIMITIVE_I].xyzw[TEMP_PRIMITIVE_C].u[0];*/
&lt;br&gt;+ &amp;nbsp; for (prim_idx = 0; prim_idx &amp;lt; num_primitives; ++prim_idx) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned num_verts_per_prim = machine-&amp;gt;Primitives[0];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;for (j = 0; j &amp;lt; num_verts_per_prim; j++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int idx = (prim_idx * num_verts_per_prim + j) *
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; shader-&amp;gt;info.num_outputs;
&lt;br&gt;+#ifdef DEBUG_OUTPUTS
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; debug_printf(&amp;quot;%d) Output vert:\n&amp;quot;, idx);
&lt;br&gt;+#endif
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (slot = 0; slot &amp;lt; shader-&amp;gt;info.num_outputs; slot++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;output[slot][0] = machine-&amp;gt;Outputs[idx + slot].xyzw[0].f[prim_idx];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;output[slot][1] = machine-&amp;gt;Outputs[idx + slot].xyzw[1].f[prim_idx];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;output[slot][2] = machine-&amp;gt;Outputs[idx + slot].xyzw[2].f[prim_idx];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;output[slot][3] = machine-&amp;gt;Outputs[idx + slot].xyzw[3].f[prim_idx];
&lt;br&gt;+#ifdef DEBUG_OUTPUTS
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;debug_printf(&amp;quot;\t%d: %f %f %f %f\n&amp;quot;, slot,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; output[slot][0],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; output[slot][1],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; output[slot][2],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; output[slot][3]);
&lt;br&gt;+#endif
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;debug_assert(!util_is_inf_or_nan(output[slot][0]));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; output = (float (*)[4])((char *)output + vertex_size);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void draw_geometry_shader_run(struct draw_geometry_shader *shader,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const float (*input)[4],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float (*output)[4],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const float (*constants)[4],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned count,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned input_stride,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned vertex_size)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; struct tgsi_exec_machine *machine = shader-&amp;gt;machine;
&lt;br&gt;+ &amp;nbsp; unsigned int i;
&lt;br&gt;+ &amp;nbsp; unsigned num_vertices = num_vertices_for_prim(shader-&amp;gt;input_primitive);
&lt;br&gt;+ &amp;nbsp; unsigned num_primitives = count/num_vertices;
&lt;br&gt;+ &amp;nbsp; unsigned inputs_from_vs = 0;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; machine-&amp;gt;Consts = constants;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; for (i = 0; i &amp;lt; shader-&amp;gt;info.num_inputs; ++i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (shader-&amp;gt;info.input_semantic_name[i] != TGSI_SEMANTIC_VERTICES &amp;&amp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;shader-&amp;gt;info.input_semantic_name[i] != TGSI_SEMANTIC_PRIMID)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ++inputs_from_vs;
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; for (i = 0; i &amp;lt; num_primitives; ++i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned int max_primitives = 1;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;draw_fetch_geometry_input(shader, i, max_primitives, input,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;input_stride, inputs_from_vs);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;tgsi_set_exec_mask(machine,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; max_primitives &amp;gt; 1,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; max_primitives &amp;gt; 2,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; max_primitives &amp;gt; 3);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;/* run interpreter */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;tgsi_exec_machine_run(machine);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;draw_geometry_fetch_outputs(shader, max_primitives,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;output, vertex_size);
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void draw_geometry_shader_delete(struct draw_geometry_shader *shader)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; FREE((void*) shader-&amp;gt;state.tokens);
&lt;br&gt;+ &amp;nbsp; FREE(shader);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void draw_geometry_shader_prepare(struct draw_geometry_shader *shader,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;struct draw_context *draw)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (shader-&amp;gt;machine-&amp;gt;Tokens != shader-&amp;gt;state.tokens) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; tgsi_exec_machine_bind_shader(shader-&amp;gt;machine,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; shader-&amp;gt;state.tokens,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; draw-&amp;gt;gs.num_samplers,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; draw-&amp;gt;gs.samplers);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;diff --git a/src/gallium/auxiliary/draw/draw_gs.h b/src/gallium/auxiliary/draw/draw_gs.h
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..d6a97d9
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/src/gallium/auxiliary/draw/draw_gs.h
&lt;br&gt;@@ -0,0 +1,76 @@
&lt;br&gt;+/**************************************************************************
&lt;br&gt;+ * 
&lt;br&gt;+ * Copyright 2009 VMWare Inc.
&lt;br&gt;+ * All Rights Reserved.
&lt;br&gt;+ *
&lt;br&gt;+ * Permission is hereby granted, free of charge, to any person obtaining a
&lt;br&gt;+ * copy of this software and associated documentation files (the
&lt;br&gt;+ * &amp;quot;Software&amp;quot;), to deal in the Software without restriction, including
&lt;br&gt;+ * without limitation the rights to use, copy, modify, merge, publish,
&lt;br&gt;+ * distribute, sub license, and/or sell copies of the Software, and to
&lt;br&gt;+ * permit persons to whom the Software is furnished to do so, subject to
&lt;br&gt;+ * the following conditions:
&lt;br&gt;+ * 
&lt;br&gt;+ * The above copyright notice and this permission notice (including the
&lt;br&gt;+ * next paragraph) shall be included in all copies or substantial portions
&lt;br&gt;+ * of the Software.
&lt;br&gt;+ * 
&lt;br&gt;+ * THE SOFTWARE IS PROVIDED &amp;quot;AS IS&amp;quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS
&lt;br&gt;+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
&lt;br&gt;+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
&lt;br&gt;+ * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
&lt;br&gt;+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
&lt;br&gt;+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
&lt;br&gt;+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
&lt;br&gt;+ * 
&lt;br&gt;+ **************************************************************************/
&lt;br&gt;+
&lt;br&gt;+#ifndef DRAW_GS_H
&lt;br&gt;+#define DRAW_GS_H
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;draw_context.h&amp;quot;
&lt;br&gt;+#include &amp;quot;draw_private.h&amp;quot;
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+#define MAX_TGSI_PRIMITIVES 4
&lt;br&gt;+
&lt;br&gt;+struct draw_context;
&lt;br&gt;+
&lt;br&gt;+/**
&lt;br&gt;+ * Private version of the compiled geometry shader
&lt;br&gt;+ */
&lt;br&gt;+struct draw_geometry_shader {
&lt;br&gt;+ &amp;nbsp; struct draw_context *draw;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; struct tgsi_exec_machine *machine;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; /* This member will disappear shortly:*/
&lt;br&gt;+ &amp;nbsp; struct pipe_shader_state state;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; struct tgsi_shader_info info;
&lt;br&gt;+ &amp;nbsp; unsigned position_output;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; unsigned max_output_vertices;
&lt;br&gt;+ &amp;nbsp; unsigned input_primitive;
&lt;br&gt;+ &amp;nbsp; unsigned output_primitive;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; /* Extracted from shader:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;+ &amp;nbsp; const float (*immediates)[4];
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+void draw_geometry_shader_run(struct draw_geometry_shader *shader,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const float (*input)[4],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float (*output)[4],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const float (*constants)[4],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned count,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned input_stride,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned output_stride);
&lt;br&gt;+
&lt;br&gt;+void draw_geometry_shader_prepare(struct draw_geometry_shader *shader,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;struct draw_context *draw);
&lt;br&gt;+
&lt;br&gt;+void draw_geometry_shader_delete(struct draw_geometry_shader *shader);
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+#endif
&lt;br&gt;diff --git a/src/gallium/auxiliary/draw/draw_pipe_aaline.c b/src/gallium/auxiliary/draw/draw_pipe_aaline.c
&lt;br&gt;index 1437542..4585dcd 100644
&lt;br&gt;--- a/src/gallium/auxiliary/draw/draw_pipe_aaline.c
&lt;br&gt;+++ b/src/gallium/auxiliary/draw/draw_pipe_aaline.c
&lt;br&gt;@@ -660,13 +660,13 @@ aaline_first_line(struct draw_stage *stage, struct prim_header *header)
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* update vertex attrib info */
&lt;br&gt;- &amp;nbsp; aaline-&amp;gt;tex_slot = draw-&amp;gt;vs.num_vs_outputs;
&lt;br&gt;- &amp;nbsp; aaline-&amp;gt;pos_slot = draw-&amp;gt;vs.position_output;
&lt;br&gt;+ &amp;nbsp; aaline-&amp;gt;tex_slot = draw_current_shader_outputs(draw);
&lt;br&gt;+ &amp;nbsp; aaline-&amp;gt;pos_slot = draw_current_shader_position_output(draw);;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* advertise the extra post-transformed vertex attribute */
&lt;br&gt;- &amp;nbsp; draw-&amp;gt;extra_vp_outputs.semantic_name = TGSI_SEMANTIC_GENERIC;
&lt;br&gt;- &amp;nbsp; draw-&amp;gt;extra_vp_outputs.semantic_index = aaline-&amp;gt;fs-&amp;gt;generic_attrib;
&lt;br&gt;- &amp;nbsp; draw-&amp;gt;extra_vp_outputs.slot = aaline-&amp;gt;tex_slot;
&lt;br&gt;+ &amp;nbsp; draw-&amp;gt;extra_shader_outputs.semantic_name = TGSI_SEMANTIC_GENERIC;
&lt;br&gt;+ &amp;nbsp; draw-&amp;gt;extra_shader_outputs.semantic_index = aaline-&amp;gt;fs-&amp;gt;generic_attrib;
&lt;br&gt;+ &amp;nbsp; draw-&amp;gt;extra_shader_outputs.slot = aaline-&amp;gt;tex_slot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* how many samplers? */
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* we'll use sampler/texture[pstip-&amp;gt;sampler_unit] for the stipple */
&lt;br&gt;@@ -707,7 +707,7 @@ aaline_flush(struct draw_stage *stage, unsigned flags)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; aaline-&amp;gt;state.texture);
&lt;br&gt;&amp;nbsp; &amp;nbsp; draw-&amp;gt;suspend_flushing = FALSE;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; draw-&amp;gt;extra_vp_outputs.slot = 0;
&lt;br&gt;+ &amp;nbsp; draw-&amp;gt;extra_shader_outputs.slot = 0;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/src/gallium/auxiliary/draw/draw_pipe_aapoint.c b/src/gallium/auxiliary/draw/draw_pipe_aapoint.c
&lt;br&gt;index 75130a8..d86717e 100644
&lt;br&gt;--- a/src/gallium/auxiliary/draw/draw_pipe_aapoint.c
&lt;br&gt;+++ b/src/gallium/auxiliary/draw/draw_pipe_aapoint.c
&lt;br&gt;@@ -687,14 +687,14 @@ aapoint_first_point(struct draw_stage *stage, struct prim_header *header)
&lt;br&gt;&amp;nbsp; &amp;nbsp; bind_aapoint_fragment_shader(aapoint);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* update vertex attrib info */
&lt;br&gt;- &amp;nbsp; aapoint-&amp;gt;tex_slot = draw-&amp;gt;vs.num_vs_outputs;
&lt;br&gt;+ &amp;nbsp; aapoint-&amp;gt;tex_slot = draw_current_shader_outputs(draw);
&lt;br&gt;&amp;nbsp; &amp;nbsp; assert(aapoint-&amp;gt;tex_slot &amp;gt; 0); /* output[0] is vertex pos */
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; aapoint-&amp;gt;pos_slot = draw-&amp;gt;vs.position_output;
&lt;br&gt;+ &amp;nbsp; aapoint-&amp;gt;pos_slot = draw_current_shader_position_output(draw);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; draw-&amp;gt;extra_vp_outputs.semantic_name = TGSI_SEMANTIC_GENERIC;
&lt;br&gt;- &amp;nbsp; draw-&amp;gt;extra_vp_outputs.semantic_index = aapoint-&amp;gt;fs-&amp;gt;generic_attrib;
&lt;br&gt;- &amp;nbsp; draw-&amp;gt;extra_vp_outputs.slot = aapoint-&amp;gt;tex_slot;
&lt;br&gt;+ &amp;nbsp; draw-&amp;gt;extra_shader_outputs.semantic_name = TGSI_SEMANTIC_GENERIC;
&lt;br&gt;+ &amp;nbsp; draw-&amp;gt;extra_shader_outputs.semantic_index = aapoint-&amp;gt;fs-&amp;gt;generic_attrib;
&lt;br&gt;+ &amp;nbsp; draw-&amp;gt;extra_shader_outputs.slot = aapoint-&amp;gt;tex_slot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* find psize slot in post-transform vertex */
&lt;br&gt;&amp;nbsp; &amp;nbsp; aapoint-&amp;gt;psize_slot = -1;
&lt;br&gt;@@ -731,7 +731,7 @@ aapoint_flush(struct draw_stage *stage, unsigned flags)
&lt;br&gt;&amp;nbsp; &amp;nbsp; aapoint-&amp;gt;driver_bind_fs_state(pipe, aapoint-&amp;gt;fs-&amp;gt;driver_fs);
&lt;br&gt;&amp;nbsp; &amp;nbsp; draw-&amp;gt;suspend_flushing = FALSE;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; draw-&amp;gt;extra_vp_outputs.slot = 0;
&lt;br&gt;+ &amp;nbsp; draw-&amp;gt;extra_shader_outputs.slot = 0;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/src/gallium/auxiliary/draw/draw_pipe_clip.c b/src/gallium/auxiliary/draw/draw_pipe_clip.c
&lt;br&gt;index 0670268..205cda5 100644
&lt;br&gt;--- a/src/gallium/auxiliary/draw/draw_pipe_clip.c
&lt;br&gt;+++ b/src/gallium/auxiliary/draw/draw_pipe_clip.c
&lt;br&gt;@@ -114,8 +114,8 @@ static void interp( const struct clipper *clip,
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;nbsp;const struct vertex_header *out, 
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;nbsp;const struct vertex_header *in )
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp; const unsigned nr_attrs = clip-&amp;gt;stage.draw-&amp;gt;vs.num_vs_outputs;
&lt;br&gt;- &amp;nbsp; const unsigned pos_attr = clip-&amp;gt;stage.draw-&amp;gt;vs.position_output;
&lt;br&gt;+ &amp;nbsp; const unsigned nr_attrs = draw_current_shader_outputs(clip-&amp;gt;stage.draw);
&lt;br&gt;+ &amp;nbsp; const unsigned pos_attr = draw_current_shader_position_output(clip-&amp;gt;stage.draw);
&lt;br&gt;&amp;nbsp; &amp;nbsp; unsigned j;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* Vertex header.
&lt;br&gt;diff --git a/src/gallium/auxiliary/draw/draw_pipe_cull.c b/src/gallium/auxiliary/draw/draw_pipe_cull.c
&lt;br&gt;index 0a70483..11b39db 100644
&lt;br&gt;--- a/src/gallium/auxiliary/draw/draw_pipe_cull.c
&lt;br&gt;+++ b/src/gallium/auxiliary/draw/draw_pipe_cull.c
&lt;br&gt;@@ -55,7 +55,7 @@ static INLINE struct cull_stage *cull_stage( struct draw_stage *stage )
&lt;br&gt;&amp;nbsp;static void cull_tri( struct draw_stage *stage,
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;nbsp; &amp;nbsp;struct prim_header *header )
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp; const unsigned pos = stage-&amp;gt;draw-&amp;gt;vs.position_output;
&lt;br&gt;+ &amp;nbsp; const unsigned pos = draw_current_shader_position_output(stage-&amp;gt;draw);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* Window coords: */
&lt;br&gt;&amp;nbsp; &amp;nbsp; const float *v0 = header-&amp;gt;v[0]-&amp;gt;data[pos];
&lt;br&gt;diff --git a/src/gallium/auxiliary/draw/draw_pipe_offset.c b/src/gallium/auxiliary/draw/draw_pipe_offset.c
&lt;br&gt;index 40798a5..e829492 100644
&lt;br&gt;--- a/src/gallium/auxiliary/draw/draw_pipe_offset.c
&lt;br&gt;+++ b/src/gallium/auxiliary/draw/draw_pipe_offset.c
&lt;br&gt;@@ -63,7 +63,7 @@ static INLINE struct offset_stage *offset_stage( struct draw_stage *stage )
&lt;br&gt;&amp;nbsp;static void do_offset_tri( struct draw_stage *stage,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; struct prim_header *header )
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp; const unsigned pos = stage-&amp;gt;draw-&amp;gt;vs.position_output;
&lt;br&gt;+ &amp;nbsp; const unsigned pos = draw_current_shader_position_output(stage-&amp;gt;draw);
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct offset_stage *offset = offset_stage(stage); &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; float inv_det = 1.0f / header-&amp;gt;det;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/src/gallium/auxiliary/draw/draw_pipe_stipple.c b/src/gallium/auxiliary/draw/draw_pipe_stipple.c
&lt;br&gt;index 6e921ba..70fbab9 100644
&lt;br&gt;--- a/src/gallium/auxiliary/draw/draw_pipe_stipple.c
&lt;br&gt;+++ b/src/gallium/auxiliary/draw/draw_pipe_stipple.c
&lt;br&gt;@@ -73,7 +73,8 @@ screen_interp( struct draw_context *draw,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const struct vertex_header *v1 )
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; uint attr;
&lt;br&gt;- &amp;nbsp; for (attr = 0; attr &amp;lt; draw-&amp;gt;vs.num_vs_outputs; attr++) {
&lt;br&gt;+ &amp;nbsp; int num_outputs = draw_current_shader_outputs(draw);
&lt;br&gt;+ &amp;nbsp; for (attr = 0; attr &amp;lt; num_outputs; attr++) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const float *val0 = v0-&amp;gt;data[attr];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const float *val1 = v1-&amp;gt;data[attr];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;float *newv = dst-&amp;gt;data[attr];
&lt;br&gt;@@ -121,7 +122,7 @@ stipple_line(struct draw_stage *stage, struct prim_header *header)
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct stipple_stage *stipple = stipple_stage(stage);
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct vertex_header *v0 = header-&amp;gt;v[0];
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct vertex_header *v1 = header-&amp;gt;v[1];
&lt;br&gt;- &amp;nbsp; const unsigned pos = stage-&amp;gt;draw-&amp;gt;vs.position_output;
&lt;br&gt;+ &amp;nbsp; const unsigned pos = draw_current_shader_position_output(stage-&amp;gt;draw);
&lt;br&gt;&amp;nbsp; &amp;nbsp; const float *pos0 = v0-&amp;gt;data[pos];
&lt;br&gt;&amp;nbsp; &amp;nbsp; const float *pos1 = v1-&amp;gt;data[pos];
&lt;br&gt;&amp;nbsp; &amp;nbsp; float start = 0;
&lt;br&gt;diff --git a/src/gallium/auxiliary/draw/draw_pipe_wide_line.c b/src/gallium/auxiliary/draw/draw_pipe_wide_line.c
&lt;br&gt;index f32cbef..3073c87 100644
&lt;br&gt;--- a/src/gallium/auxiliary/draw/draw_pipe_wide_line.c
&lt;br&gt;+++ b/src/gallium/auxiliary/draw/draw_pipe_wide_line.c
&lt;br&gt;@@ -59,7 +59,7 @@ static void wideline_line( struct draw_stage *stage,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; struct prim_header *header )
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; /*const struct wideline_stage *wide = wideline_stage(stage);*/
&lt;br&gt;- &amp;nbsp; const unsigned pos = stage-&amp;gt;draw-&amp;gt;vs.position_output;
&lt;br&gt;+ &amp;nbsp; const unsigned pos = draw_current_shader_position_output(stage-&amp;gt;draw);
&lt;br&gt;&amp;nbsp; &amp;nbsp; const float half_width = 0.5f * stage-&amp;gt;draw-&amp;gt;rasterizer-&amp;gt;line_width;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct prim_header tri;
&lt;br&gt;diff --git a/src/gallium/auxiliary/draw/draw_pipe_wide_point.c b/src/gallium/auxiliary/draw/draw_pipe_wide_point.c
&lt;br&gt;index 7d76a7d..8dc50c0 100644
&lt;br&gt;--- a/src/gallium/auxiliary/draw/draw_pipe_wide_point.c
&lt;br&gt;+++ b/src/gallium/auxiliary/draw/draw_pipe_wide_point.c
&lt;br&gt;@@ -112,7 +112,7 @@ static void set_texcoords(const struct widepoint_stage *wide,
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (wide-&amp;gt;point_coord_fs_input &amp;gt;= 0) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* put gl_PointCoord into the extra vertex slot */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;uint slot = wide-&amp;gt;stage.draw-&amp;gt;extra_vp_outputs.slot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;uint slot = wide-&amp;gt;stage.draw-&amp;gt;extra_shader_outputs.slot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;v-&amp;gt;data[slot][0] = tc[0];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;v-&amp;gt;data[slot][1] = tc[1];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;v-&amp;gt;data[slot][2] = 0.0F;
&lt;br&gt;@@ -130,7 +130,7 @@ static void widepoint_point( struct draw_stage *stage,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; struct prim_header *header )
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; const struct widepoint_stage *wide = widepoint_stage(stage);
&lt;br&gt;- &amp;nbsp; const unsigned pos = stage-&amp;gt;draw-&amp;gt;vs.position_output;
&lt;br&gt;+ &amp;nbsp; const unsigned pos = draw_current_shader_position_output(stage-&amp;gt;draw);
&lt;br&gt;&amp;nbsp; &amp;nbsp; const boolean sprite = (boolean) stage-&amp;gt;draw-&amp;gt;rasterizer-&amp;gt;point_sprite;
&lt;br&gt;&amp;nbsp; &amp;nbsp; float half_size;
&lt;br&gt;&amp;nbsp; &amp;nbsp; float left_adj, right_adj, bot_adj, top_adj;
&lt;br&gt;@@ -257,13 +257,13 @@ static void widepoint_first_point( struct draw_stage *stage,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;wide-&amp;gt;point_coord_fs_input = find_pntc_input_attrib(draw);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* setup extra vp output (point coord implemented as a texcoord) */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;draw-&amp;gt;extra_vp_outputs.semantic_name = TGSI_SEMANTIC_GENERIC;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;draw-&amp;gt;extra_vp_outputs.semantic_index = 0;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;draw-&amp;gt;extra_vp_outputs.slot = draw-&amp;gt;vs.num_vs_outputs;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;draw-&amp;gt;extra_shader_outputs.semantic_name = TGSI_SEMANTIC_GENERIC;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;draw-&amp;gt;extra_shader_outputs.semantic_index = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;draw-&amp;gt;extra_shader_outputs.slot = draw_current_shader_outputs(draw);
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;wide-&amp;gt;point_coord_fs_input = -1;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;draw-&amp;gt;extra_vp_outputs.slot = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;draw-&amp;gt;extra_shader_outputs.slot = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; wide-&amp;gt;psize_slot = -1;
&lt;br&gt;@@ -287,7 +287,7 @@ static void widepoint_flush( struct draw_stage *stage, unsigned flags )
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; stage-&amp;gt;point = widepoint_first_point;
&lt;br&gt;&amp;nbsp; &amp;nbsp; stage-&amp;gt;next-&amp;gt;flush( stage-&amp;gt;next, flags );
&lt;br&gt;- &amp;nbsp; stage-&amp;gt;draw-&amp;gt;extra_vp_outputs.slot = 0;
&lt;br&gt;+ &amp;nbsp; stage-&amp;gt;draw-&amp;gt;extra_shader_outputs.slot = 0;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/src/gallium/auxiliary/draw/draw_private.h b/src/gallium/auxiliary/draw/draw_private.h
&lt;br&gt;index 3850ced..e490415 100644
&lt;br&gt;--- a/src/gallium/auxiliary/draw/draw_private.h
&lt;br&gt;+++ b/src/gallium/auxiliary/draw/draw_private.h
&lt;br&gt;@@ -152,8 +152,9 @@ struct draw_context
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /** vertex arrays */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const void *vbuffer[PIPE_MAX_ATTRIBS];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /** constant buffer (for vertex shader) */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const void *constants;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /** constant buffer (for vertex/geometry shader) */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const void *vs_constants;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const void *gs_constants;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} user;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;boolean test_fse; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* enable FSE even though its not correct (eg for softpipe) */
&lt;br&gt;@@ -211,6 +212,18 @@ struct draw_context
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;struct translate_cache *emit_cache;
&lt;br&gt;&amp;nbsp; &amp;nbsp; } vs;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; struct {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;struct draw_geometry_shader *geometry_shader;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;uint num_gs_outputs; &amp;nbsp;/**&amp;lt; convenience, from geometry_shader */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;uint position_output;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;/** TGSI program interpreter runtime state */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;struct tgsi_exec_machine *machine;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;uint num_samplers;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;struct tgsi_sampler **samplers;
&lt;br&gt;+ &amp;nbsp; } gs;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* Clip derived state:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;nbsp; &amp;nbsp; float plane[12][4];
&lt;br&gt;@@ -222,7 +235,7 @@ struct draw_context
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uint semantic_name;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uint semantic_index;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int slot;
&lt;br&gt;- &amp;nbsp; } extra_vp_outputs;
&lt;br&gt;+ &amp;nbsp; } extra_shader_outputs;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; unsigned reduced_prim;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -245,6 +258,19 @@ void draw_vs_set_constants( struct draw_context *,
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+/*******************************************************************************
&lt;br&gt;+ * Geometry shading code:
&lt;br&gt;+ */
&lt;br&gt;+boolean draw_gs_init( struct draw_context *draw );
&lt;br&gt;+void draw_gs_set_constants( struct draw_context *,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const float (*constants)[4],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned size );
&lt;br&gt;+
&lt;br&gt;+/*******************************************************************************
&lt;br&gt;+ * Common shading code:
&lt;br&gt;+ */
&lt;br&gt;+int draw_current_shader_outputs(struct draw_context *draw);
&lt;br&gt;+int draw_current_shader_position_output(struct draw_context *draw);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/*******************************************************************************
&lt;br&gt;&amp;nbsp; * Vertex processing (was passthrough) code:
&lt;br&gt;diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline.c b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline.c
&lt;br&gt;index 9321137..1a9df4c 100644
&lt;br&gt;--- a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline.c
&lt;br&gt;+++ b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline.c
&lt;br&gt;@@ -32,6 +32,7 @@
&lt;br&gt;&amp;nbsp;#include &amp;quot;draw/draw_vertex.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;draw/draw_pt.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;draw/draw_vs.h&amp;quot;
&lt;br&gt;+#include &amp;quot;draw/draw_gs.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;translate/translate.h&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -119,7 +120,8 @@ static void fetch_pipeline_run( struct draw_pt_middle_end *middle,
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct fetch_pipeline_middle_end *fpme = (struct fetch_pipeline_middle_end *)middle;
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct draw_context *draw = fpme-&amp;gt;draw;
&lt;br&gt;- &amp;nbsp; struct draw_vertex_shader *shader = draw-&amp;gt;vs.vertex_shader;
&lt;br&gt;+ &amp;nbsp; struct draw_vertex_shader *vshader = draw-&amp;gt;vs.vertex_shader;
&lt;br&gt;+ &amp;nbsp; struct draw_geometry_shader *gshader = draw-&amp;gt;gs.geometry_shader;
&lt;br&gt;&amp;nbsp; &amp;nbsp; unsigned opt = fpme-&amp;gt;opt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; unsigned alloc_count = align( fetch_count, 4 );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -147,13 +149,21 @@ static void fetch_pipeline_run( struct draw_pt_middle_end *middle,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (opt &amp; PT_SHADE)
&lt;br&gt;&amp;nbsp; &amp;nbsp; {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;shader-&amp;gt;run_linear(shader, 
&lt;br&gt;-			 (const float (*)[4])pipeline_verts-&amp;gt;data,
&lt;br&gt;-			 ( &amp;nbsp; &amp;nbsp; &amp;nbsp;float (*)[4])pipeline_verts-&amp;gt;data,
&lt;br&gt;-			 (const float (*)[4])draw-&amp;gt;pt.user.constants,
&lt;br&gt;-			 fetch_count,
&lt;br&gt;-			 fpme-&amp;gt;vertex_size,
&lt;br&gt;-			 fpme-&amp;gt;vertex_size);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;vshader-&amp;gt;run_linear(vshader,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(const float (*)[4])pipeline_verts-&amp;gt;data,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;( &amp;nbsp; &amp;nbsp; &amp;nbsp;float (*)[4])pipeline_verts-&amp;gt;data,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(const float (*)[4])draw-&amp;gt;pt.user.vs_constants,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fetch_count,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fpme-&amp;gt;vertex_size,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fpme-&amp;gt;vertex_size);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (gshader)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; draw_geometry_shader_run(gshader,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(const float (*)[4])pipeline_verts-&amp;gt;data,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;( &amp;nbsp; &amp;nbsp; &amp;nbsp;float (*)[4])pipeline_verts-&amp;gt;data,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(const float (*)[4])draw-&amp;gt;pt.user.gs_constants,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fetch_count,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fpme-&amp;gt;vertex_size,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fpme-&amp;gt;vertex_size);
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (draw_pt_post_vs_run( fpme-&amp;gt;post_vs,
&lt;br&gt;@@ -196,6 +206,7 @@ static void fetch_pipeline_linear_run( struct draw_pt_middle_end *middle,
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct fetch_pipeline_middle_end *fpme = (struct fetch_pipeline_middle_end *)middle;
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct draw_context *draw = fpme-&amp;gt;draw;
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct draw_vertex_shader *shader = draw-&amp;gt;vs.vertex_shader;
&lt;br&gt;+ &amp;nbsp; struct draw_geometry_shader *geometry_shader = draw-&amp;gt;gs.geometry_shader;
&lt;br&gt;&amp;nbsp; &amp;nbsp; unsigned opt = fpme-&amp;gt;opt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; unsigned alloc_count = align( count, 4 );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -226,10 +237,19 @@ static void fetch_pipeline_linear_run( struct draw_pt_middle_end *middle,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;shader-&amp;gt;run_linear(shader,
&lt;br&gt;&amp;nbsp;			 (const float (*)[4])pipeline_verts-&amp;gt;data,
&lt;br&gt;&amp;nbsp;			 ( &amp;nbsp; &amp;nbsp; &amp;nbsp;float (*)[4])pipeline_verts-&amp;gt;data,
&lt;br&gt;-			 (const float (*)[4])draw-&amp;gt;pt.user.constants,
&lt;br&gt;+			 (const float (*)[4])draw-&amp;gt;pt.user.vs_constants,
&lt;br&gt;&amp;nbsp;			 count,
&lt;br&gt;&amp;nbsp;			 fpme-&amp;gt;vertex_size,
&lt;br&gt;&amp;nbsp;			 fpme-&amp;gt;vertex_size);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (geometry_shader)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; draw_geometry_shader_run(geometry_shader,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(const float (*)[4])pipeline_verts-&amp;gt;data,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;( &amp;nbsp; &amp;nbsp; &amp;nbsp;float (*)[4])pipeline_verts-&amp;gt;data,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(const float (*)[4])draw-&amp;gt;pt.user.gs_constants,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;count,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fpme-&amp;gt;vertex_size,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fpme-&amp;gt;vertex_size);
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (draw_pt_post_vs_run( fpme-&amp;gt;post_vs,
&lt;br&gt;@@ -270,6 +290,7 @@ static boolean fetch_pipeline_linear_run_elts( struct draw_pt_middle_end *middle
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct fetch_pipeline_middle_end *fpme = (struct fetch_pipeline_middle_end *)middle;
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct draw_context *draw = fpme-&amp;gt;draw;
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct draw_vertex_shader *shader = draw-&amp;gt;vs.vertex_shader;
&lt;br&gt;+ &amp;nbsp; struct draw_geometry_shader *geometry_shader = draw-&amp;gt;gs.geometry_shader;
&lt;br&gt;&amp;nbsp; &amp;nbsp; unsigned opt = fpme-&amp;gt;opt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; unsigned alloc_count = align( count, 4 );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -296,10 +317,19 @@ static boolean fetch_pipeline_linear_run_elts( struct draw_pt_middle_end *middle
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;shader-&amp;gt;run_linear(shader,
&lt;br&gt;&amp;nbsp;			 (const float (*)[4])pipeline_verts-&amp;gt;data,
&lt;br&gt;&amp;nbsp;			 ( &amp;nbsp; &amp;nbsp; &amp;nbsp;float (*)[4])pipeline_verts-&amp;gt;data,
&lt;br&gt;-			 (const float (*)[4])draw-&amp;gt;pt.user.constants,
&lt;br&gt;+			 (const float (*)[4])draw-&amp;gt;pt.user.vs_constants,
&lt;br&gt;&amp;nbsp;			 count,
&lt;br&gt;&amp;nbsp;			 fpme-&amp;gt;vertex_size,
&lt;br&gt;&amp;nbsp;			 fpme-&amp;gt;vertex_size);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (geometry_shader)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; draw_geometry_shader_run(geometry_shader,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(const float (*)[4])pipeline_verts-&amp;gt;data,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;( &amp;nbsp; &amp;nbsp; &amp;nbsp;float (*)[4])pipeline_verts-&amp;gt;data,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(const float (*)[4])draw-&amp;gt;pt.user.gs_constants,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;count,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fpme-&amp;gt;vertex_size,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fpme-&amp;gt;vertex_size);
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (draw_pt_post_vs_run( fpme-&amp;gt;post_vs,
&lt;br&gt;diff --git a/src/gallium/auxiliary/draw/draw_pt_post_vs.c b/src/gallium/auxiliary/draw/draw_pt_post_vs.c
&lt;br&gt;index 9dfb478..5515182 100644
&lt;br&gt;--- a/src/gallium/auxiliary/draw/draw_pt_post_vs.c
&lt;br&gt;+++ b/src/gallium/auxiliary/draw/draw_pt_post_vs.c
&lt;br&gt;@@ -100,7 +100,7 @@ static boolean post_vs_cliptest_viewport_gl( struct pt_post_vs *pvs,
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct vertex_header *out = vertices;
&lt;br&gt;&amp;nbsp; &amp;nbsp; const float *scale = pvs-&amp;gt;draw-&amp;gt;viewport.scale;
&lt;br&gt;&amp;nbsp; &amp;nbsp; const float *trans = pvs-&amp;gt;draw-&amp;gt;viewport.translate;
&lt;br&gt;- &amp;nbsp; const unsigned pos = pvs-&amp;gt;draw-&amp;gt;vs.position_output;
&lt;br&gt;+ &amp;nbsp; const unsigned pos = draw_current_shader_position_output(pvs-&amp;gt;draw);
&lt;br&gt;&amp;nbsp; &amp;nbsp; unsigned clipped = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; unsigned j;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -190,7 +190,7 @@ static boolean post_vs_viewport( struct pt_post_vs *pvs,
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct vertex_header *out = vertices;
&lt;br&gt;&amp;nbsp; &amp;nbsp; const float *scale = pvs-&amp;gt;draw-&amp;gt;viewport.scale;
&lt;br&gt;&amp;nbsp; &amp;nbsp; const float *trans = pvs-&amp;gt;draw-&amp;gt;viewport.translate;
&lt;br&gt;- &amp;nbsp; const unsigned pos = pvs-&amp;gt;draw-&amp;gt;vs.position_output;
&lt;br&gt;+ &amp;nbsp; const unsigned pos = draw_current_shader_position_output(pvs-&amp;gt;draw);
&lt;br&gt;&amp;nbsp; &amp;nbsp; unsigned j;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (0) debug_printf(&amp;quot;%s\n&amp;quot;, __FUNCTION__);
&lt;br&gt;diff --git a/src/gallium/auxiliary/draw/draw_pt_util.c b/src/gallium/auxiliary/draw/draw_pt_util.c
&lt;br&gt;index b61fa29..17c3b8c 100644
&lt;br&gt;--- a/src/gallium/auxiliary/draw/draw_pt_util.c
&lt;br&gt;+++ b/src/gallium/auxiliary/draw/draw_pt_util.c
&lt;br&gt;@@ -50,16 +50,32 @@ void draw_pt_split_prim(unsigned prim, unsigned *first, unsigned *incr)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*first = 2;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*incr = 1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_LINES_ADJACENCY:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;*first = 4;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;*incr = 2;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_LINE_STRIP_ADJACENCY:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;*first = 4;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;*incr = 1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; case PIPE_PRIM_TRIANGLES:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*first = 3;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*incr = 3;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_TRIANGLES_ADJACENCY:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;*first = 6;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;*incr = 3;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; case PIPE_PRIM_TRIANGLE_STRIP:
&lt;br&gt;&amp;nbsp; &amp;nbsp; case PIPE_PRIM_TRIANGLE_FAN:
&lt;br&gt;&amp;nbsp; &amp;nbsp; case PIPE_PRIM_POLYGON:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*first = 3;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*incr = 1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;*first = 6;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;*incr = 1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; case PIPE_PRIM_QUADS:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*first = 4;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*incr = 4;
&lt;br&gt;diff --git a/src/gallium/auxiliary/draw/draw_pt_varray_tmp_linear.h b/src/gallium/auxiliary/draw/draw_pt_varray_tmp_linear.h
&lt;br&gt;index 010c7a1..f0aec5f 100644
&lt;br&gt;--- a/src/gallium/auxiliary/draw/draw_pt_varray_tmp_linear.h
&lt;br&gt;+++ b/src/gallium/auxiliary/draw/draw_pt_varray_tmp_linear.h
&lt;br&gt;@@ -36,6 +36,10 @@ static void FUNC(struct draw_pt_front_end *frontend,
&lt;br&gt;&amp;nbsp; &amp;nbsp; case PIPE_PRIM_TRIANGLE_STRIP:
&lt;br&gt;&amp;nbsp; &amp;nbsp; case PIPE_PRIM_QUADS:
&lt;br&gt;&amp;nbsp; &amp;nbsp; case PIPE_PRIM_QUAD_STRIP:
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_LINES_ADJACENCY:
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_LINE_STRIP_ADJACENCY:
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_TRIANGLES_ADJACENCY:
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (j = 0; j &amp;lt; count;) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned remaining = count - j;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned nr = trim( MIN2(varray-&amp;gt;driver_fetch_max, remaining), first, incr );
&lt;br&gt;diff --git a/src/gallium/auxiliary/draw/draw_vs_varient.c b/src/gallium/auxiliary/draw/draw_vs_varient.c
&lt;br&gt;index 7ee567d..d166925 100644
&lt;br&gt;--- a/src/gallium/auxiliary/draw/draw_vs_varient.c
&lt;br&gt;+++ b/src/gallium/auxiliary/draw/draw_vs_varient.c
&lt;br&gt;@@ -147,11 +147,12 @@ static void PIPE_CDECL vsvg_run_elts( struct draw_vs_varient *varient,
&lt;br&gt;&amp;nbsp; &amp;nbsp; vsvg-&amp;gt;base.vs-&amp;gt;run_linear( vsvg-&amp;gt;base.vs, 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;temp_buffer,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;temp_buffer,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(const float (*)[4])vsvg-&amp;gt;base.vs-&amp;gt;draw-&amp;gt;pt.user.constants,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(const float (*)[4])vsvg-&amp;gt;base.vs-&amp;gt;draw-&amp;gt;pt.user.vs_constants,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;count,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;temp_vertex_stride, 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;temp_vertex_stride);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; /* FIXME: geometry shading? */
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (vsvg-&amp;gt;base.key.clip) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* not really handling clipping, just do the rhw so we can
&lt;br&gt;@@ -207,7 +208,7 @@ static void PIPE_CDECL vsvg_run_linear( struct draw_vs_varient *varient,
&lt;br&gt;&amp;nbsp; &amp;nbsp; vsvg-&amp;gt;base.vs-&amp;gt;run_linear( vsvg-&amp;gt;base.vs, 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;temp_buffer,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;temp_buffer,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(const float (*)[4])vsvg-&amp;gt;base.vs-&amp;gt;draw-&amp;gt;pt.user.constants,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(const float (*)[4])vsvg-&amp;gt;base.vs-&amp;gt;draw-&amp;gt;pt.user.vs_constants,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;count,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;temp_vertex_stride, 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;temp_vertex_stride);
&lt;br&gt;diff --git a/src/gallium/auxiliary/tgsi/tgsi_dump.c b/src/gallium/auxiliary/tgsi/tgsi_dump.c
&lt;br&gt;index 5e7e5d2..bb4f564 100644
&lt;br&gt;--- a/src/gallium/auxiliary/tgsi/tgsi_dump.c
&lt;br&gt;+++ b/src/gallium/auxiliary/tgsi/tgsi_dump.c
&lt;br&gt;@@ -122,7 +122,9 @@ static const char *semantic_names[] =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;quot;GENERIC&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;quot;NORMAL&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;quot;FACE&amp;quot;,
&lt;br&gt;- &amp;nbsp; &amp;quot;EDGEFLAG&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;quot;EDGEFLAG&amp;quot;,
&lt;br&gt;+ &amp;nbsp; &amp;quot;VERTICES_IN&amp;quot;,
&lt;br&gt;+ &amp;nbsp; &amp;quot;PRIM_ID&amp;quot;
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static const char *immediate_type_names[] =
&lt;br&gt;diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c b/src/gallium/auxiliary/tgsi/tgsi_exec.c
&lt;br&gt;index 123117c..e2f2878 100644
&lt;br&gt;--- a/src/gallium/auxiliary/tgsi/tgsi_exec.c
&lt;br&gt;+++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c
&lt;br&gt;@@ -372,6 +372,7 @@ tgsi_exec_machine_create( void )
&lt;br&gt;&amp;nbsp; &amp;nbsp; memset(mach, 0, sizeof(*mach));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; mach-&amp;gt;Addrs = &amp;mach-&amp;gt;Temps[TGSI_EXEC_TEMP_ADDR];
&lt;br&gt;+ &amp;nbsp; mach-&amp;gt;MaxGeometryShaderOutputs = TGSI_MAX_TOTAL_VERTICES;
&lt;br&gt;&amp;nbsp; &amp;nbsp; mach-&amp;gt;Predicates = &amp;mach-&amp;gt;Temps[TGSI_EXEC_TEMP_P0];
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* Setup constants. */
&lt;br&gt;@@ -1468,6 +1469,15 @@ store_dest(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;index = mach-&amp;gt;Temps[TEMP_OUTPUT_I].xyzw[TEMP_OUTPUT_C].u[0]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; + reg-&amp;gt;Register.Index;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dst = &amp;mach-&amp;gt;Outputs[offset + index].xyzw[chan_index];
&lt;br&gt;+#if 0
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (TGSI_PROCESSOR_GEOMETRY == mach-&amp;gt;Processor) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stderr, &amp;quot;STORING OUT[%d] mask(%d), = (&amp;quot;, index, execmask);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (i = 0; i &amp;lt; QUAD_SIZE; i++)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (execmask &amp; (1 &amp;lt;&amp;lt; i))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stderr, &amp;quot;%f, &amp;quot;, chan-&amp;gt;f[i]);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stderr, &amp;quot;)\n&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+#endif
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; case TGSI_FILE_TEMPORARY:
&lt;br&gt;@@ -1638,6 +1648,35 @@ exec_kilp(struct tgsi_exec_machine *mach,
&lt;br&gt;&amp;nbsp; &amp;nbsp; mach-&amp;gt;Temps[TEMP_KILMASK_I].xyzw[TEMP_KILMASK_C].u[0] |= kilmask;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static void
&lt;br&gt;+emit_vertex(struct tgsi_exec_machine *mach)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; /* FIXME: check for exec mask correctly
&lt;br&gt;+ &amp;nbsp; unsigned i;
&lt;br&gt;+ &amp;nbsp; for (i = 0; i &amp;lt; QUAD_SIZE; ++i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ((mach-&amp;gt;ExecMask &amp; (1 &amp;lt;&amp;lt; i)))
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; if (mach-&amp;gt;ExecMask) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;mach-&amp;gt;Temps[TEMP_OUTPUT_I].xyzw[TEMP_OUTPUT_C].u[0] += mach-&amp;gt;NumOutputs;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;mach-&amp;gt;Primitives[mach-&amp;gt;Temps[TEMP_PRIMITIVE_I].xyzw[TEMP_PRIMITIVE_C].u[0]]++;
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;+emit_primitive(struct tgsi_exec_machine *mach)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; unsigned *prim_count = &amp;mach-&amp;gt;Temps[TEMP_PRIMITIVE_I].xyzw[TEMP_PRIMITIVE_C].u[0];
&lt;br&gt;+ &amp;nbsp; /* FIXME: check for exec mask correctly
&lt;br&gt;+ &amp;nbsp; unsigned i;
&lt;br&gt;+ &amp;nbsp; for (i = 0; i &amp;lt; QUAD_SIZE; ++i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ((mach-&amp;gt;ExecMask &amp; (1 &amp;lt;&amp;lt; i)))
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; if (mach-&amp;gt;ExecMask) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;++(*prim_count);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;debug_assert((*prim_count * mach-&amp;gt;NumOutputs) &amp;lt; mach-&amp;gt;MaxGeometryShaderOutputs);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;mach-&amp;gt;Primitives[*prim_count] = 0;
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/*
&lt;br&gt;&amp;nbsp; * Fetch a four texture samples using STR texture coordinates.
&lt;br&gt;@@ -3087,13 +3126,11 @@ exec_instruction(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; case TGSI_OPCODE_EMIT:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;mach-&amp;gt;Temps[TEMP_OUTPUT_I].xyzw[TEMP_OUTPUT_C].u[0] += 16;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;mach-&amp;gt;Primitives[mach-&amp;gt;Temps[TEMP_PRIMITIVE_I].xyzw[TEMP_PRIMITIVE_C].u[0]]++;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;emit_vertex(mach);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; case TGSI_OPCODE_ENDPRIM:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;mach-&amp;gt;Temps[TEMP_PRIMITIVE_I].xyzw[TEMP_PRIMITIVE_C].u[0]++;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;mach-&amp;gt;Primitives[mach-&amp;gt;Temps[TEMP_PRIMITIVE_I].xyzw[TEMP_PRIMITIVE_C].u[0]] = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;emit_primitive(mach);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; case TGSI_OPCODE_BGNFOR:
&lt;br&gt;diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.h b/src/gallium/auxiliary/tgsi/tgsi_exec.h
&lt;br&gt;index fd94c1b..afaf5c3 100644
&lt;br&gt;--- a/src/gallium/auxiliary/tgsi/tgsi_exec.h
&lt;br&gt;+++ b/src/gallium/auxiliary/tgsi/tgsi_exec.h
&lt;br&gt;@@ -191,6 +191,14 @@ struct tgsi_exec_labels
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;#define TGSI_EXEC_MAX_CONST_BUFFER &amp;nbsp;4096
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+/* The maximum number of vertices per primitive */
&lt;br&gt;+#define TGSI_MAX_PRIM_VERTICES 6
&lt;br&gt;+
&lt;br&gt;+/* The maximum number of primitives to be generated */
&lt;br&gt;+#define TGSI_MAX_PRIMITIVES 64
&lt;br&gt;+
&lt;br&gt;+/* The maximum total number of vertices */
&lt;br&gt;+#define TGSI_MAX_TOTAL_VERTICES (TGSI_MAX_PRIM_VERTICES * TGSI_MAX_PRIMITIVES * PIPE_MAX_ATTRIBS)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/** function call/activation record */
&lt;br&gt;&amp;nbsp;struct tgsi_call_record
&lt;br&gt;@@ -201,7 +209,6 @@ struct tgsi_call_record
&lt;br&gt;&amp;nbsp; &amp;nbsp; uint ReturnAddr;
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;/**
&lt;br&gt;&amp;nbsp; * Run-time virtual machine state for executing TGSI shader.
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;@@ -214,8 +221,8 @@ struct tgsi_exec_machine
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; float &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Imms[TGSI_EXEC_NUM_IMMEDIATES][4];
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; struct tgsi_exec_vector &amp;nbsp; &amp;nbsp; &amp;nbsp; Inputs[PIPE_MAX_ATTRIBS];
&lt;br&gt;- &amp;nbsp; struct tgsi_exec_vector &amp;nbsp; &amp;nbsp; &amp;nbsp; Outputs[PIPE_MAX_ATTRIBS];
&lt;br&gt;+ &amp;nbsp; struct tgsi_exec_vector &amp;nbsp; &amp;nbsp; &amp;nbsp; Inputs[TGSI_MAX_PRIM_VERTICES * PIPE_MAX_ATTRIBS];
&lt;br&gt;+ &amp;nbsp; struct tgsi_exec_vector &amp;nbsp; &amp;nbsp; &amp;nbsp; Outputs[TGSI_MAX_TOTAL_VERTICES];
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct tgsi_exec_vector &amp;nbsp; &amp;nbsp; &amp;nbsp; *Addrs;
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct tgsi_exec_vector &amp;nbsp; &amp;nbsp; &amp;nbsp; *Predicates;
&lt;br&gt;@@ -229,6 +236,8 @@ struct tgsi_exec_machine
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* GEOMETRY processor only. */
&lt;br&gt;&amp;nbsp; &amp;nbsp; unsigned &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*Primitives;
&lt;br&gt;+ &amp;nbsp; unsigned &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NumOutputs;
&lt;br&gt;+ &amp;nbsp; unsigned &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MaxGeometryShaderOutputs;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* FRAGMENT processor only. */
&lt;br&gt;&amp;nbsp; &amp;nbsp; const struct tgsi_interp_coef *InterpCoefs;
&lt;br&gt;diff --git a/src/gallium/auxiliary/tgsi/tgsi_text.c b/src/gallium/auxiliary/tgsi/tgsi_text.c
&lt;br&gt;index f000958..84e863b 100644
&lt;br&gt;--- a/src/gallium/auxiliary/tgsi/tgsi_text.c
&lt;br&gt;+++ b/src/gallium/auxiliary/tgsi/tgsi_text.c
&lt;br&gt;@@ -791,7 +791,9 @@ static const char *semantic_names[TGSI_SEMANTIC_COUNT] =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;quot;PSIZE&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;quot;GENERIC&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;quot;NORMAL&amp;quot;,
&lt;br&gt;- &amp;nbsp; &amp;quot;FACE&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;quot;FACE&amp;quot;,
&lt;br&gt;+ &amp;nbsp; &amp;quot;VERTICES_IN&amp;quot;,
&lt;br&gt;+ &amp;nbsp; &amp;quot;PRIM_ID&amp;quot;
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static const char *interpolate_names[TGSI_INTERPOLATE_COUNT] =
&lt;br&gt;diff --git a/src/gallium/drivers/cell/ppu/cell_draw_arrays.c b/src/gallium/drivers/cell/ppu/cell_draw_arrays.c
&lt;br&gt;index 5cc1d4d..01bea0f 100644
&lt;br&gt;--- a/src/gallium/drivers/cell/ppu/cell_draw_arrays.c
&lt;br&gt;+++ b/src/gallium/drivers/cell/ppu/cell_draw_arrays.c
&lt;br&gt;@@ -59,7 +59,7 @@ cell_map_constant_buffers(struct cell_context *sp)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; draw_set_mapped_constant_buffer(sp-&amp;gt;draw,
&lt;br&gt;+ &amp;nbsp; draw_set_mapped_constant_buffer(sp-&amp;gt;draw, PIPE_SHADER_VERTEX,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sp-&amp;gt;mapped_constants[PIPE_SHADER_VERTEX],
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sp-&amp;gt;constants[PIPE_SHADER_VERTEX].buffer-&amp;gt;size);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;diff --git a/src/gallium/drivers/cell/ppu/cell_state_derived.c b/src/gallium/drivers/cell/ppu/cell_state_derived.c
&lt;br&gt;index efc4f78..b723e79 100644
&lt;br&gt;--- a/src/gallium/drivers/cell/ppu/cell_state_derived.c
&lt;br&gt;+++ b/src/gallium/drivers/cell/ppu/cell_state_derived.c
&lt;br&gt;@@ -66,7 +66,7 @@ calculate_vertex_layout( struct cell_context *cell )
&lt;br&gt;&amp;nbsp; &amp;nbsp; vinfo-&amp;gt;num_attribs = 0;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* we always want to emit vertex pos */
&lt;br&gt;- &amp;nbsp; src = draw_find_vs_output(cell-&amp;gt;draw, TGSI_SEMANTIC_POSITION, 0);
&lt;br&gt;+ &amp;nbsp; src = draw_find_shader_output(cell-&amp;gt;draw, TGSI_SEMANTIC_POSITION, 0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; assert(src &amp;gt;= 0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; draw_emit_vertex_attr(vinfo, EMIT_4F, INTERP_POS, src);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -82,14 +82,14 @@ calculate_vertex_layout( struct cell_context *cell )
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case TGSI_SEMANTIC_COLOR:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; src = draw_find_vs_output(cell-&amp;gt;draw, TGSI_SEMANTIC_COLOR, 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; src = draw_find_shader_output(cell-&amp;gt;draw, TGSI_SEMANTIC_COLOR, 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fs-&amp;gt;info.input_semantic_index[i]);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assert(src &amp;gt;= 0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; draw_emit_vertex_attr(vinfo, EMIT_4F, colorInterp, src);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case TGSI_SEMANTIC_FOG:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; src = draw_find_vs_output(cell-&amp;gt;draw, TGSI_SEMANTIC_FOG, 0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; src = draw_find_shader_output(cell-&amp;gt;draw, TGSI_SEMANTIC_FOG, 0);
&lt;br&gt;&amp;nbsp;#if 1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (src &amp;lt; 0) /* XXX temp hack, try demos/fogcoord.c with this */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src = 0;
&lt;br&gt;@@ -100,7 +100,7 @@ calculate_vertex_layout( struct cell_context *cell )
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case TGSI_SEMANTIC_GENERIC:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* this includes texcoords and varying vars */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; src = draw_find_vs_output(cell-&amp;gt;draw, TGSI_SEMANTIC_GENERIC,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; src = draw_find_shader_output(cell-&amp;gt;draw, TGSI_SEMANTIC_GENERIC,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fs-&amp;gt;info.input_semantic_index[i]);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assert(src &amp;gt;= 0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; draw_emit_vertex_attr(vinfo, EMIT_4F, INTERP_PERSPECTIVE, src);
&lt;br&gt;diff --git a/src/gallium/drivers/cell/ppu/cell_state_emit.c b/src/gallium/drivers/cell/ppu/cell_state_emit.c
&lt;br&gt;index ac5fafe..5b87286 100644
&lt;br&gt;--- a/src/gallium/drivers/cell/ppu/cell_state_emit.c
&lt;br&gt;+++ b/src/gallium/drivers/cell/ppu/cell_state_emit.c
&lt;br&gt;@@ -331,7 +331,7 @@ cell_emit_state(struct cell_context *cell)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const struct draw_context *const draw = cell-&amp;gt;draw;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;struct cell_shader_info info;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;info.num_outputs = draw_num_vs_outputs(draw);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;info.num_outputs = draw_num_shader_outputs(draw);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;info.declarations = (uintptr_t) draw-&amp;gt;vs.machine.Declarations;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;info.num_declarations = draw-&amp;gt;vs.machine.NumDeclarations;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;info.instructions = (uintptr_t) draw-&amp;gt;vs.machine.Instructions;
&lt;br&gt;diff --git a/src/gallium/drivers/i915/i915_context.c b/src/gallium/drivers/i915/i915_context.c
&lt;br&gt;index 94c8aee..949f046 100644
&lt;br&gt;--- a/src/gallium/drivers/i915/i915_context.c
&lt;br&gt;+++ b/src/gallium/drivers/i915/i915_context.c
&lt;br&gt;@@ -84,7 +84,7 @@ i915_draw_range_elements(struct pipe_context *pipe,
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; draw_set_mapped_constant_buffer(draw,
&lt;br&gt;+ &amp;nbsp; draw_set_mapped_constant_buffer(draw, PIPE_SHADER_VERTEX,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; i915-&amp;gt;current.constants[PIPE_SHADER_VERTEX],
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (i915-&amp;gt;current.num_user_constants[PIPE_SHADER_VERTEX] * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;4 * sizeof(float)));
&lt;br&gt;diff --git a/src/gallium/drivers/i915/i915_state_derived.c b/src/gallium/drivers/i915/i915_state_derived.c
&lt;br&gt;index 178d4e8..03dd509 100644
&lt;br&gt;--- a/src/gallium/drivers/i915/i915_state_derived.c
&lt;br&gt;+++ b/src/gallium/drivers/i915/i915_state_derived.c
&lt;br&gt;@@ -84,7 +84,7 @@ static void calculate_vertex_layout( struct i915_context *i915 )
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* pos */
&lt;br&gt;- &amp;nbsp; src = draw_find_vs_output(i915-&amp;gt;draw, TGSI_SEMANTIC_POSITION, 0);
&lt;br&gt;+ &amp;nbsp; src = draw_find_shader_output(i915-&amp;gt;draw, TGSI_SEMANTIC_POSITION, 0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (needW) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;draw_emit_vertex_attr(&amp;vinfo, EMIT_4F, INTERP_LINEAR, src);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;vinfo.hwfmt[0] |= S4_VFMT_XYZW;
&lt;br&gt;@@ -101,21 +101,21 @@ static void calculate_vertex_layout( struct i915_context *i915 )
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* primary color */
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (colors[0]) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;src = draw_find_vs_output(i915-&amp;gt;draw, TGSI_SEMANTIC_COLOR, 0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;src = draw_find_shader_output(i915-&amp;gt;draw, TGSI_SEMANTIC_COLOR, 0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;draw_emit_vertex_attr(&amp;vinfo, EMIT_4UB, colorInterp, src);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;vinfo.hwfmt[0] |= S4_VFMT_COLOR;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* secondary color */
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (colors[1]) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;src = draw_find_vs_output(i915-&amp;gt;draw, TGSI_SEMANTIC_COLOR, 1);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;src = draw_find_shader_output(i915-&amp;gt;draw, TGSI_SEMANTIC_COLOR, 1);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;draw_emit_vertex_attr(&amp;vinfo, EMIT_4UB, colorInterp, src);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;vinfo.hwfmt[0] |= S4_VFMT_SPEC_FOG;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* fog coord, not fog blend factor */
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (fog) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;src = draw_find_vs_output(i915-&amp;gt;draw, TGSI_SEMANTIC_FOG, 0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;src = draw_find_shader_output(i915-&amp;gt;draw, TGSI_SEMANTIC_FOG, 0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;draw_emit_vertex_attr(&amp;vinfo, EMIT_1F, INTERP_PERSPECTIVE, src);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;vinfo.hwfmt[0] |= S4_VFMT_FOG_PARAM;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;@@ -125,7 +125,7 @@ static void calculate_vertex_layout( struct i915_context *i915 )
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uint hwtc;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (texCoords[i]) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hwtc = TEXCOORDFMT_4D;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; src = draw_find_vs_output(i915-&amp;gt;draw, TGSI_SEMANTIC_GENERIC, i);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; src = draw_find_shader_output(i915-&amp;gt;draw, TGSI_SEMANTIC_GENERIC, i);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; draw_emit_vertex_attr(&amp;vinfo, EMIT_4F, INTERP_PERSPECTIVE, src);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;diff --git a/src/gallium/drivers/llvmpipe/lp_state_derived.c b/src/gallium/drivers/llvmpipe/lp_state_derived.c
&lt;br&gt;index e703964..fdc6a38 100644
&lt;br&gt;--- a/src/gallium/drivers/llvmpipe/lp_state_derived.c
&lt;br&gt;+++ b/src/gallium/drivers/llvmpipe/lp_state_derived.c
&lt;br&gt;@@ -66,7 +66,7 @@ llvmpipe_get_vertex_info(struct llvmpipe_context *llvmpipe)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* compute vertex layout now */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const struct lp_fragment_shader *lpfs = llvmpipe-&amp;gt;fs;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;struct vertex_info *vinfo_vbuf = &amp;llvmpipe-&amp;gt;vertex_info_vbuf;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;const uint num = draw_num_vs_outputs(llvmpipe-&amp;gt;draw);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;const uint num = draw_current_shader_outputs(llvmpipe-&amp;gt;draw);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uint i;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Tell draw_vbuf to simply emit the whole post-xform vertex
&lt;br&gt;diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c b/src/gallium/drivers/llvmpipe/lp_state_fs.c
&lt;br&gt;index 22683ff..af053f1 100644
&lt;br&gt;--- a/src/gallium/drivers/llvmpipe/lp_state_fs.c
&lt;br&gt;+++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c
&lt;br&gt;@@ -734,7 +734,8 @@ llvmpipe_set_constant_buffer(struct pipe_context *pipe,
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; if(shader == PIPE_SHADER_VERTEX) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;draw_set_mapped_constant_buffer(llvmpipe-&amp;gt;draw, data, size);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;draw_set_mapped_constant_buffer(llvmpipe-&amp;gt;draw, PIPE_SHADER_VERTEX,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;data, size);
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; llvmpipe-&amp;gt;dirty |= LP_NEW_CONSTANTS;
&lt;br&gt;diff --git a/src/gallium/drivers/nv04/nv04_vbo.c b/src/gallium/drivers/nv04/nv04_vbo.c
&lt;br&gt;index e316781..099ab10 100644
&lt;br&gt;--- a/src/gallium/drivers/nv04/nv04_vbo.c
&lt;br&gt;+++ b/src/gallium/drivers/nv04/nv04_vbo.c
&lt;br&gt;@@ -45,7 +45,7 @@ boolean nv04_draw_elements( struct pipe_context *pipe,
&lt;br&gt;&amp;nbsp;		draw_set_mapped_element_buffer(draw, 0, NULL);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	draw_set_mapped_constant_buffer(draw,
&lt;br&gt;+	draw_set_mapped_constant_buffer(draw, PIPE_SHADER_VERTEX,
&lt;br&gt;&amp;nbsp;					nv04-&amp;gt;constbuf[PIPE_SHADER_VERTEX],
&lt;br&gt;&amp;nbsp;					nv04-&amp;gt;constbuf_nr[PIPE_SHADER_VERTEX]);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/src/gallium/drivers/nv10/nv10_vbo.c b/src/gallium/drivers/nv10/nv10_vbo.c
&lt;br&gt;index 441a4f7..0d26141 100644
&lt;br&gt;--- a/src/gallium/drivers/nv10/nv10_vbo.c
&lt;br&gt;+++ b/src/gallium/drivers/nv10/nv10_vbo.c
&lt;br&gt;@@ -45,6 +45,7 @@ boolean nv10_draw_elements( struct pipe_context *pipe,
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	draw_set_mapped_constant_buffer(draw,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PIPE_SHADER_VERTEX,
&lt;br&gt;&amp;nbsp;					nv10-&amp;gt;constbuf[PIPE_SHADER_VERTEX],
&lt;br&gt;&amp;nbsp;					nv10-&amp;gt;constbuf_nr[PIPE_SHADER_VERTEX]);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/src/gallium/drivers/nv20/nv20_state_emit.c b/src/gallium/drivers/nv20/nv20_state_emit.c
&lt;br&gt;index 0122b1c..63cba1f 100644
&lt;br&gt;--- a/src/gallium/drivers/nv20/nv20_state_emit.c
&lt;br&gt;+++ b/src/gallium/drivers/nv20/nv20_state_emit.c
&lt;br&gt;@@ -228,7 +228,7 @@ static void nv20_vertex_layout(struct nv20_context *nv20)
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	/* always do position */ {
&lt;br&gt;-		src = draw_find_vs_output(dc, TGSI_SEMANTIC_POSITION, 0);
&lt;br&gt;+		src = draw_find_shader_output(dc, TGSI_SEMANTIC_POSITION, 0);
&lt;br&gt;&amp;nbsp;		draw_emit_vertex_attr(vinfo, EMIT_4F, INTERP_LINEAR, src);
&lt;br&gt;&amp;nbsp;		vinfo-&amp;gt;hwfmt[0] |= (1 &amp;lt;&amp;lt; 0);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;@@ -237,19 +237,19 @@ static void nv20_vertex_layout(struct nv20_context *nv20)
&lt;br&gt;&amp;nbsp;	for (i = 4; i &amp;lt; 6; i++) {
&lt;br&gt;&amp;nbsp;		if (!generics[i])
&lt;br&gt;&amp;nbsp;			continue;
&lt;br&gt;-		src = draw_find_vs_output(dc, TGSI_SEMANTIC_GENERIC, i);
&lt;br&gt;+		src = draw_find_shader_output(dc, TGSI_SEMANTIC_GENERIC, i);
&lt;br&gt;&amp;nbsp;		draw_emit_vertex_attr(vinfo, EMIT_4F, INTERP_PERSPECTIVE, src);
&lt;br&gt;&amp;nbsp;		vinfo-&amp;gt;hwfmt[0] |= (1 &amp;lt;&amp;lt; (i - 3));
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	if (colors[0]) {
&lt;br&gt;-		src = draw_find_vs_output(dc, TGSI_SEMANTIC_COLOR, 0);
&lt;br&gt;+		src = draw_find_shader_output(dc, TGSI_SEMANTIC_COLOR, 0);
&lt;br&gt;&amp;nbsp;		draw_emit_vertex_attr(vinfo, EMIT_4F, colorInterp, src);
&lt;br&gt;&amp;nbsp;		vinfo-&amp;gt;hwfmt[0] |= (1 &amp;lt;&amp;lt; 3);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	if (colors[1]) {
&lt;br&gt;-		src = draw_find_vs_output(dc, TGSI_SEMANTIC_COLOR, 1);
&lt;br&gt;+		src = draw_find_shader_output(dc, TGSI_SEMANTIC_COLOR, 1);
&lt;br&gt;&amp;nbsp;		draw_emit_vertex_attr(vinfo, EMIT_4F, colorInterp, src);
&lt;br&gt;&amp;nbsp;		vinfo-&amp;gt;hwfmt[0] |= (1 &amp;lt;&amp;lt; 4);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;@@ -258,7 +258,7 @@ static void nv20_vertex_layout(struct nv20_context *nv20)
&lt;br&gt;&amp;nbsp;	for (i = 6; i &amp;lt; 10; i++) {
&lt;br&gt;&amp;nbsp;		if (!generics[i])
&lt;br&gt;&amp;nbsp;			continue;
&lt;br&gt;-		src = draw_find_vs_output(dc, TGSI_SEMANTIC_GENERIC, i);
&lt;br&gt;+		src = draw_find_shader_output(dc, TGSI_SEMANTIC_GENERIC, i);
&lt;br&gt;&amp;nbsp;		draw_emit_vertex_attr(vinfo, EMIT_4F, INTERP_PERSPECTIVE, src);
&lt;br&gt;&amp;nbsp;		vinfo-&amp;gt;hwfmt[0] |= (1 &amp;lt;&amp;lt; (i - 1));
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;@@ -267,7 +267,7 @@ static void nv20_vertex_layout(struct nv20_context *nv20)
&lt;br&gt;&amp;nbsp;	for (i = 0; i &amp;lt; 4; i++) {
&lt;br&gt;&amp;nbsp;		if (!generics[i])
&lt;br&gt;&amp;nbsp;			continue;
&lt;br&gt;-		src = draw_find_vs_output(dc, TGSI_SEMANTIC_GENERIC, i);
&lt;br&gt;+		src = draw_find_shader_output(dc, TGSI_SEMANTIC_GENERIC, i);
&lt;br&gt;&amp;nbsp;		draw_emit_vertex_attr(vinfo, EMIT_4F, INTERP_PERSPECTIVE, src);
&lt;br&gt;&amp;nbsp;		vinfo-&amp;gt;hwfmt[0] |= (1 &amp;lt;&amp;lt; (i + 9));
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;@@ -276,13 +276,13 @@ static void nv20_vertex_layout(struct nv20_context *nv20)
&lt;br&gt;&amp;nbsp;	for (i = 10; i &amp;lt; 12; i++) {
&lt;br&gt;&amp;nbsp;		if (!generics[i])
&lt;br&gt;&amp;nbsp;			continue;
&lt;br&gt;-		src = draw_find_vs_output(dc, TGSI_SEMANTIC_GENERIC, i);
&lt;br&gt;+		src = draw_find_shader_output(dc, TGSI_SEMANTIC_GENERIC, i);
&lt;br&gt;&amp;nbsp;		draw_emit_vertex_attr(vinfo, EMIT_4F, INTERP_PERSPECTIVE, src);
&lt;br&gt;&amp;nbsp;		vinfo-&amp;gt;hwfmt[0] |= (1 &amp;lt;&amp;lt; (i + 3));
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	if (fog) {
&lt;br&gt;-		src = draw_find_vs_output(dc, TGSI_SEMANTIC_FOG, 0);
&lt;br&gt;+		src = draw_find_shader_output(dc, TGSI_SEMANTIC_FOG, 0);
&lt;br&gt;&amp;nbsp;		draw_emit_vertex_attr(vinfo, EMIT_1F, INTERP_PERSPECTIVE, src);
&lt;br&gt;&amp;nbsp;		vinfo-&amp;gt;hwfmt[0] |= (1 &amp;lt;&amp;lt; 15);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;diff --git a/src/gallium/drivers/nv20/nv20_vbo.c b/src/gallium/drivers/nv20/nv20_vbo.c
&lt;br&gt;index 84d7db6..4bf461e 100644
&lt;br&gt;--- a/src/gallium/drivers/nv20/nv20_vbo.c
&lt;br&gt;+++ b/src/gallium/drivers/nv20/nv20_vbo.c
&lt;br&gt;@@ -45,7 +45,7 @@ boolean nv20_draw_elements( struct pipe_context *pipe,
&lt;br&gt;&amp;nbsp;		draw_set_mapped_element_buffer(draw, 0, NULL);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	draw_set_mapped_constant_buffer(draw,
&lt;br&gt;+	draw_set_mapped_constant_buffer(draw, PIPE_SHADER_VERTEX,
&lt;br&gt;&amp;nbsp;					nv20-&amp;gt;constbuf[PIPE_SHADER_VERTEX],
&lt;br&gt;&amp;nbsp;					nv20-&amp;gt;constbuf_nr[PIPE_SHADER_VERTEX]);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/src/gallium/drivers/nv40/nv40_draw.c b/src/gallium/drivers/nv40/nv40_draw.c
&lt;br&gt;index b2f19ec..3875bc3 100644
&lt;br&gt;--- a/src/gallium/drivers/nv40/nv40_draw.c
&lt;br&gt;+++ b/src/gallium/drivers/nv40/nv40_draw.c
&lt;br&gt;@@ -261,7 +261,8 @@ nv40_draw_elements_swtnl(struct pipe_context *pipe,
&lt;br&gt;&amp;nbsp;		map = pipe_buffer_map(pscreen,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;nv40-&amp;gt;constbuf[PIPE_SHADER_VERTEX],
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;PIPE_BUFFER_USAGE_CPU_READ);
&lt;br&gt;-		draw_set_mapped_constant_buffer(nv40-&amp;gt;draw, map, nr);
&lt;br&gt;+		draw_set_mapped_constant_buffer(nv40-&amp;gt;draw, PIPE_SHADER_VERTEX,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;map, nr);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	draw_arrays(nv40-&amp;gt;draw, mode, start, count);
&lt;br&gt;@@ -285,7 +286,7 @@ static INLINE void
&lt;br&gt;&amp;nbsp;emit_attrib(struct nv40_context *nv40, unsigned hw, unsigned emit,
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp;unsigned semantic, unsigned index)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	unsigned draw_out = draw_find_vs_output(nv40-&amp;gt;draw, semantic, index);
&lt;br&gt;+	unsigned draw_out = draw_find_shader_output(nv40-&amp;gt;draw, semantic, index);
&lt;br&gt;&amp;nbsp;	unsigned a = nv40-&amp;gt;swtnl.nr_attribs++;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	nv40-&amp;gt;swtnl.hw[a] = hw;
&lt;br&gt;diff --git a/src/gallium/drivers/softpipe/sp_context.c b/src/gallium/drivers/softpipe/sp_context.c
&lt;br&gt;index 2a33587..0c890cb 100644
&lt;br&gt;--- a/src/gallium/drivers/softpipe/sp_context.c
&lt;br&gt;+++ b/src/gallium/drivers/softpipe/sp_context.c
&lt;br&gt;@@ -222,6 +222,10 @@ softpipe_create( struct pipe_screen *screen )
&lt;br&gt;&amp;nbsp; &amp;nbsp; softpipe-&amp;gt;pipe.bind_vs_state &amp;nbsp; = softpipe_bind_vs_state;
&lt;br&gt;&amp;nbsp; &amp;nbsp; softpipe-&amp;gt;pipe.delete_vs_state = softpipe_delete_vs_state;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; softpipe-&amp;gt;pipe.create_gs_state = softpipe_create_gs_state;
&lt;br&gt;+ &amp;nbsp; softpipe-&amp;gt;pipe.bind_gs_state &amp;nbsp; = softpipe_bind_gs_state;
&lt;br&gt;+ &amp;nbsp; softpipe-&amp;gt;pipe.delete_gs_state = softpipe_delete_gs_state;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; softpipe-&amp;gt;pipe.set_blend_color = softpipe_set_blend_color;
&lt;br&gt;&amp;nbsp; &amp;nbsp; softpipe-&amp;gt;pipe.set_clip_state = softpipe_set_clip_state;
&lt;br&gt;&amp;nbsp; &amp;nbsp; softpipe-&amp;gt;pipe.set_constant_buffer = softpipe_set_constant_buffer;
&lt;br&gt;diff --git a/src/gallium/drivers/softpipe/sp_context.h b/src/gallium/drivers/softpipe/sp_context.h
&lt;br&gt;index 8ce20c5..159547e 100644
&lt;br&gt;--- a/src/gallium/drivers/softpipe/sp_context.h
&lt;br&gt;+++ b/src/gallium/drivers/softpipe/sp_context.h
&lt;br&gt;@@ -58,6 +58,7 @@ struct softpipe_context {
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct pipe_rasterizer_state *rasterizer;
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct sp_fragment_shader *fs;
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct sp_vertex_shader *vs;
&lt;br&gt;+ &amp;nbsp; struct sp_geometry_shader *gs;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /** Other rendering state */
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct pipe_blend_color blend_color;
&lt;br&gt;diff --git a/src/gallium/drivers/softpipe/sp_draw_arrays.c b/src/gallium/drivers/softpipe/sp_draw_arrays.c
&lt;br&gt;index 518ef88..9ea5d6f 100644
&lt;br&gt;--- a/src/gallium/drivers/softpipe/sp_draw_arrays.c
&lt;br&gt;+++ b/src/gallium/drivers/softpipe/sp_draw_arrays.c
&lt;br&gt;@@ -48,7 +48,7 @@ static void
&lt;br&gt;&amp;nbsp;softpipe_map_constant_buffers(struct softpipe_context *sp)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct pipe_winsys *ws = sp-&amp;gt;pipe.winsys;
&lt;br&gt;- &amp;nbsp; uint i, size;
&lt;br&gt;+ &amp;nbsp; uint i, vssize, gssize;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; for (i = 0; i &amp;lt; PIPE_SHADER_TYPES; i++) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (sp-&amp;gt;constants[i].buffer &amp;&amp; sp-&amp;gt;constants[i].buffer-&amp;gt;size)
&lt;br&gt;@@ -57,13 +57,21 @@ softpipe_map_constant_buffers(struct softpipe_context *sp)
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (sp-&amp;gt;constants[PIPE_SHADER_VERTEX].buffer)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;size = sp-&amp;gt;constants[PIPE_SHADER_VERTEX].buffer-&amp;gt;size;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;vssize = sp-&amp;gt;constants[PIPE_SHADER_VERTEX].buffer-&amp;gt;size;
&lt;br&gt;&amp;nbsp; &amp;nbsp; else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;size = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;vssize = 0;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; draw_set_mapped_constant_buffer(sp-&amp;gt;draw,
&lt;br&gt;+ &amp;nbsp; if (sp-&amp;gt;constants[PIPE_SHADER_GEOMETRY].buffer)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;gssize = sp-&amp;gt;constants[PIPE_SHADER_GEOMETRY].buffer-&amp;gt;size;
&lt;br&gt;+ &amp;nbsp; else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;gssize = 0;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; draw_set_mapped_constant_buffer(sp-&amp;gt;draw, PIPE_SHADER_VERTEX,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sp-&amp;gt;mapped_constants[PIPE_SHADER_VERTEX],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; size);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; vssize);
&lt;br&gt;+ &amp;nbsp; draw_set_mapped_constant_buffer(sp-&amp;gt;draw, PIPE_SHADER_GEOMETRY,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sp-&amp;gt;mapped_constants[PIPE_SHADER_GEOMETRY],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gssize);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -78,9 +86,10 @@ softpipe_unmap_constant_buffers(struct softpipe_context *sp)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;nbsp; &amp;nbsp; draw_flush(sp-&amp;gt;draw);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; draw_set_mapped_constant_buffer(sp-&amp;gt;draw, NULL, 0);
&lt;br&gt;+ &amp;nbsp; draw_set_mapped_constant_buffer(sp-&amp;gt;draw, PIPE_SHADER_VERTEX, NULL, 0);
&lt;br&gt;+ &amp;nbsp; draw_set_mapped_constant_buffer(sp-&amp;gt;draw, PIPE_SHADER_GEOMETRY, NULL, 0);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; for (i = 0; i &amp;lt; 2; i++) {
&lt;br&gt;+ &amp;nbsp; for (i = 0; i &amp;lt; PIPE_SHADER_TYPES; i++) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (sp-&amp;gt;constants[i].buffer &amp;&amp; sp-&amp;gt;constants[i].buffer-&amp;gt;size)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ws-&amp;gt;buffer_unmap(ws, sp-&amp;gt;constants[i].buffer);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sp-&amp;gt;mapped_constants[i] = NULL;
&lt;br&gt;diff --git a/src/gallium/drivers/softpipe/sp_screen.c b/src/gallium/drivers/softpipe/sp_screen.c
&lt;br&gt;index bd3532d..a32312d 100644
&lt;br&gt;--- a/src/gallium/drivers/softpipe/sp_screen.c
&lt;br&gt;+++ b/src/gallium/drivers/softpipe/sp_screen.c
&lt;br&gt;@@ -89,6 +89,8 @@ softpipe_get_param(struct pipe_screen *screen, int param)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 13; /* max 4Kx4K */
&lt;br&gt;&amp;nbsp; &amp;nbsp; case PIPE_CAP_TGSI_CONT_SUPPORTED:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 1;
&lt;br&gt;+ &amp;nbsp; case PIPE_CAP_GEOMETRY_SHADER4:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return 1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; case PIPE_CAP_BLEND_EQUATION_SEPARATE:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; default:
&lt;br&gt;diff --git a/src/gallium/drivers/softpipe/sp_setup.c b/src/gallium/drivers/softpipe/sp_setup.c
&lt;br&gt;index 615581b..3da7536 100644
&lt;br&gt;--- a/src/gallium/drivers/softpipe/sp_setup.c
&lt;br&gt;+++ b/src/gallium/drivers/softpipe/sp_setup.c
&lt;br&gt;@@ -1268,7 +1268,7 @@ void sp_setup_prepare( struct setup_context *setup )
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* Note: nr_attrs is only used for debugging (vertex printing) */
&lt;br&gt;- &amp;nbsp; setup-&amp;gt;nr_vertex_attrs = draw_num_vs_outputs(sp-&amp;gt;draw);
&lt;br&gt;+ &amp;nbsp; setup-&amp;gt;nr_vertex_attrs = draw_num_shader_outputs(sp-&amp;gt;draw);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; sp-&amp;gt;quad.first-&amp;gt;begin( sp-&amp;gt;quad.first );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/src/gallium/drivers/softpipe/sp_state.h b/src/gallium/drivers/softpipe/sp_state.h
&lt;br&gt;index 26d5c3f..5a32d21 100644
&lt;br&gt;--- a/src/gallium/drivers/softpipe/sp_state.h
&lt;br&gt;+++ b/src/gallium/drivers/softpipe/sp_state.h
&lt;br&gt;@@ -50,6 +50,7 @@
&lt;br&gt;&amp;nbsp;#define SP_NEW_VERTEX &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0x1000
&lt;br&gt;&amp;nbsp;#define SP_NEW_VS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0x2000
&lt;br&gt;&amp;nbsp;#define SP_NEW_QUERY &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0x4000
&lt;br&gt;+#define SP_NEW_GS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0x8000
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;struct tgsi_sampler;
&lt;br&gt;@@ -90,6 +91,11 @@ struct sp_vertex_shader {
&lt;br&gt;&amp;nbsp; &amp;nbsp; int max_sampler; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* -1 if no samplers */
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+/** Subclass of pipe_shader_state */
&lt;br&gt;+struct sp_geometry_shader {
&lt;br&gt;+ &amp;nbsp; struct pipe_shader_state shader;
&lt;br&gt;+ &amp;nbsp; struct draw_geometry_shader *draw_data;
&lt;br&gt;+};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void *
&lt;br&gt;@@ -143,6 +149,10 @@ void *softpipe_create_vs_state(struct pipe_context *,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const struct pipe_shader_state *);
&lt;br&gt;&amp;nbsp;void softpipe_bind_vs_state(struct pipe_context *, void *);
&lt;br&gt;&amp;nbsp;void softpipe_delete_vs_state(struct pipe_context *, void *);
&lt;br&gt;+void *softpipe_create_gs_state(struct pipe_context *,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const struct pipe_shader_state *);
&lt;br&gt;+void softpipe_bind_gs_state(struct pipe_context *, void *);
&lt;br&gt;+void softpipe_delete_gs_state(struct pipe_context *, void *);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void softpipe_set_polygon_stipple( struct pipe_context *,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp;const struct pipe_poly_stipple * );
&lt;br&gt;diff --git a/src/gallium/drivers/softpipe/sp_state_derived.c b/src/gallium/drivers/softpipe/sp_state_derived.c
&lt;br&gt;index c24a737..f6856a5 100644
&lt;br&gt;--- a/src/gallium/drivers/softpipe/sp_state_derived.c
&lt;br&gt;+++ b/src/gallium/drivers/softpipe/sp_state_derived.c
&lt;br&gt;@@ -67,7 +67,7 @@ softpipe_get_vertex_info(struct softpipe_context *softpipe)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* compute vertex layout now */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const struct sp_fragment_shader *spfs = softpipe-&amp;gt;fs;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;struct vertex_info *vinfo_vbuf = &amp;softpipe-&amp;gt;vertex_info_vbuf;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;const uint num = draw_num_vs_outputs(softpipe-&amp;gt;draw);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;const uint num = draw_current_shader_outputs(softpipe-&amp;gt;draw);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uint i;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Tell draw_vbuf to simply emit the whole post-xform vertex
&lt;br&gt;@@ -117,13 +117,13 @@ softpipe_get_vertex_info(struct softpipe_context *softpipe)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* this includes texcoords and varying vars */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; src = draw_find_vs_output(softpipe-&amp;gt;draw,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; spfs-&amp;gt;info.input_semantic_name[i],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; spfs-&amp;gt;info.input_semantic_index[i]);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; src = draw_find_shader_output(softpipe-&amp;gt;draw,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; spfs-&amp;gt;info.input_semantic_name[i],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; spfs-&amp;gt;info.input_semantic_index[i]);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; draw_emit_vertex_attr(vinfo, EMIT_4F, interp, src);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;softpipe-&amp;gt;psize_slot = draw_find_vs_output(softpipe-&amp;gt;draw,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;softpipe-&amp;gt;psize_slot = draw_find_shader_output(softpipe-&amp;gt;draw,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TGSI_SEMANTIC_PSIZE, 0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (softpipe-&amp;gt;psize_slot &amp;gt; 0) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; draw_emit_vertex_attr(vinfo, EMIT_4F, INTERP_CONSTANT,
&lt;br&gt;diff --git a/src/gallium/drivers/softpipe/sp_state_fs.c b/src/gallium/drivers/softpipe/sp_state_fs.c
&lt;br&gt;index b41f7e8..22f82b1 100644
&lt;br&gt;--- a/src/gallium/drivers/softpipe/sp_state_fs.c
&lt;br&gt;+++ b/src/gallium/drivers/softpipe/sp_state_fs.c
&lt;br&gt;@@ -165,3 +165,62 @@ softpipe_set_constant_buffer(struct pipe_context *pipe,
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; softpipe-&amp;gt;dirty |= SP_NEW_CONSTANTS;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+void *
&lt;br&gt;+softpipe_create_gs_state(struct pipe_context *pipe,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const struct pipe_shader_state *templ)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; struct softpipe_context *softpipe = softpipe_context(pipe);
&lt;br&gt;+ &amp;nbsp; struct sp_geometry_shader *state;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; state = CALLOC_STRUCT(sp_geometry_shader);
&lt;br&gt;+ &amp;nbsp; if (state == NULL )
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;goto fail;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; /* copy shader tokens, the ones passed in will go away.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;+ &amp;nbsp; state-&amp;gt;shader.tokens = tgsi_dup_tokens(templ-&amp;gt;tokens);
&lt;br&gt;+ &amp;nbsp; if (state-&amp;gt;shader.tokens == NULL)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;goto fail;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; state-&amp;gt;draw_data = draw_create_geometry_shader(softpipe-&amp;gt;draw, templ);
&lt;br&gt;+ &amp;nbsp; if (state-&amp;gt;draw_data == NULL)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;goto fail;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; return state;
&lt;br&gt;+
&lt;br&gt;+fail:
&lt;br&gt;+ &amp;nbsp; if (state) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;FREE( (void *)state-&amp;gt;shader.tokens );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;FREE( state-&amp;gt;draw_data );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;FREE( state );
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; return NULL;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+void
&lt;br&gt;+softpipe_bind_gs_state(struct pipe_context *pipe, void *gs)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; struct softpipe_context *softpipe = softpipe_context(pipe);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; softpipe-&amp;gt;gs = (struct sp_geometry_shader *)gs;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; draw_bind_geometry_shader(softpipe-&amp;gt;draw,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (softpipe-&amp;gt;gs ? softpipe-&amp;gt;gs-&amp;gt;draw_data : NULL));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; softpipe-&amp;gt;dirty |= SP_NEW_GS;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+void
&lt;br&gt;+softpipe_delete_gs_state(struct pipe_context *pipe, void *gs)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; struct softpipe_context *softpipe = softpipe_context(pipe);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; struct sp_geometry_shader *state =
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;(struct sp_geometry_shader *)gs;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; draw_delete_geometry_shader(softpipe-&amp;gt;draw, state-&amp;gt;draw_data);
&lt;br&gt;+ &amp;nbsp; FREE(state);
&lt;br&gt;+}
&lt;br&gt;diff --git a/src/gallium/drivers/svga/svga_swtnl_draw.c b/src/gallium/drivers/svga/svga_swtnl_draw.c
&lt;br&gt;index 8b14c91..7655121 100644
&lt;br&gt;--- a/src/gallium/drivers/svga/svga_swtnl_draw.c
&lt;br&gt;+++ b/src/gallium/drivers/svga/svga_swtnl_draw.c
&lt;br&gt;@@ -90,7 +90,7 @@ svga_swtnl_draw_range_elements(struct svga_context *svga,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PIPE_BUFFER_USAGE_CPU_READ);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assert(map);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;draw_set_mapped_constant_buffer(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; draw, 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; draw, PIPE_SHADER_VERTEX,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; map,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; svga-&amp;gt;curr.cb[PIPE_SHADER_VERTEX]-&amp;gt;size);
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h
&lt;br&gt;index 11bcdc0..6c06fb9 100644
&lt;br&gt;--- a/src/gallium/include/pipe/p_context.h
&lt;br&gt;+++ b/src/gallium/include/pipe/p_context.h
&lt;br&gt;@@ -142,6 +142,12 @@ struct pipe_context {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const struct pipe_shader_state *);
&lt;br&gt;&amp;nbsp; &amp;nbsp; void &amp;nbsp; (*bind_vs_state)(struct pipe_context *, void *);
&lt;br&gt;&amp;nbsp; &amp;nbsp; void &amp;nbsp; (*delete_vs_state)(struct pipe_context *, void *);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; void * (*create_gs_state)(struct pipe_context *,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const struct pipe_shader_state *);
&lt;br&gt;+ &amp;nbsp; void &amp;nbsp; (*bind_gs_state)(struct pipe_context *, void *);
&lt;br&gt;+ &amp;nbsp; void &amp;nbsp; (*delete_gs_state)(struct pipe_context *, void *);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; /*@}*/
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /**
&lt;br&gt;diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
&lt;br&gt;index fe1390d..90fc333 100644
&lt;br&gt;--- a/src/gallium/include/pipe/p_defines.h
&lt;br&gt;+++ b/src/gallium/include/pipe/p_defines.h
&lt;br&gt;@@ -321,23 +321,28 @@ enum pipe_transfer_usage {
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;#define PIPE_SHADER_VERTEX &amp;nbsp; 0
&lt;br&gt;&amp;nbsp;#define PIPE_SHADER_FRAGMENT 1
&lt;br&gt;-#define PIPE_SHADER_TYPES &amp;nbsp; &amp;nbsp;2
&lt;br&gt;+#define PIPE_SHADER_GEOMETRY 2
&lt;br&gt;+#define PIPE_SHADER_TYPES &amp;nbsp; &amp;nbsp;3
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/**
&lt;br&gt;&amp;nbsp; * Primitive types:
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;-#define PIPE_PRIM_POINTS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0
&lt;br&gt;-#define PIPE_PRIM_LINES &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1
&lt;br&gt;-#define PIPE_PRIM_LINE_LOOP &amp;nbsp; &amp;nbsp; &amp;nbsp; 2
&lt;br&gt;-#define PIPE_PRIM_LINE_STRIP &amp;nbsp; &amp;nbsp; &amp;nbsp;3
&lt;br&gt;-#define PIPE_PRIM_TRIANGLES &amp;nbsp; &amp;nbsp; &amp;nbsp; 4
&lt;br&gt;-#define PIPE_PRIM_TRIANGLE_STRIP &amp;nbsp;5
&lt;br&gt;-#define PIPE_PRIM_TRIANGLE_FAN &amp;nbsp; &amp;nbsp;6
&lt;br&gt;-#define PIPE_PRIM_QUADS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 7
&lt;br&gt;-#define PIPE_PRIM_QUAD_STRIP &amp;nbsp; &amp;nbsp; &amp;nbsp;8
&lt;br&gt;-#define PIPE_PRIM_POLYGON &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 9
&lt;br&gt;-#define PIPE_PRIM_MAX &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 10
&lt;br&gt;+#define PIPE_PRIM_POINTS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0
&lt;br&gt;+#define PIPE_PRIM_LINES &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1
&lt;br&gt;+#define PIPE_PRIM_LINE_LOOP &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2
&lt;br&gt;+#define PIPE_PRIM_LINE_STRIP &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3
&lt;br&gt;+#define PIPE_PRIM_TRIANGLES &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;4
&lt;br&gt;+#define PIPE_PRIM_TRIANGLE_STRIP &amp;nbsp; &amp;nbsp; &amp;nbsp; 5
&lt;br&gt;+#define PIPE_PRIM_TRIANGLE_FAN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 6
&lt;br&gt;+#define PIPE_PRIM_QUADS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;7
&lt;br&gt;+#define PIPE_PRIM_QUAD_STRIP &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 8
&lt;br&gt;+#define PIPE_PRIM_POLYGON &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;9
&lt;br&gt;+#define PIPE_PRIM_LINES_ADJACENCY &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;10
&lt;br&gt;+#define PIPE_PRIM_LINE_STRIP_ADJACENCY &amp;nbsp; &amp;nbsp;11
&lt;br&gt;+#define PIPE_PRIM_TRIANGLES_ADJACENCY &amp;nbsp; &amp;nbsp; &amp;nbsp;12
&lt;br&gt;+#define PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY 13
&lt;br&gt;+#define PIPE_PRIM_MAX &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;14
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/**
&lt;br&gt;@@ -393,6 +398,7 @@ enum pipe_transfer_usage {
&lt;br&gt;&amp;nbsp;#define PIPE_CAP_MAX_PREDICATE_REGISTERS 30
&lt;br&gt;&amp;nbsp;#define PIPE_CAP_MAX_COMBINED_SAMPLERS &amp;nbsp; 31 &amp;nbsp;/*&amp;lt; Maximum texture image units accessible from vertex
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; and fragment shaders combined */
&lt;br&gt;+#define PIPE_CAP_GEOMETRY_SHADER4 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;32
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/**
&lt;br&gt;diff --git a/src/gallium/include/pipe/p_shader_tokens.h b/src/gallium/include/pipe/p_shader_tokens.h
&lt;br&gt;index 5da85bb..3e7335b 100644
&lt;br&gt;--- a/src/gallium/include/pipe/p_shader_tokens.h
&lt;br&gt;+++ b/src/gallium/include/pipe/p_shader_tokens.h
&lt;br&gt;@@ -121,16 +121,18 @@ struct tgsi_declaration_range
&lt;br&gt;&amp;nbsp; &amp;nbsp; unsigned Last &amp;nbsp; &amp;nbsp;: 16; /**&amp;lt; UINT */
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-#define TGSI_SEMANTIC_POSITION 0
&lt;br&gt;-#define TGSI_SEMANTIC_COLOR &amp;nbsp; &amp;nbsp;1
&lt;br&gt;-#define TGSI_SEMANTIC_BCOLOR &amp;nbsp; 2 /**&amp;lt; back-face color */
&lt;br&gt;-#define TGSI_SEMANTIC_FOG &amp;nbsp; &amp;nbsp; &amp;nbsp;3
&lt;br&gt;-#define TGSI_SEMANTIC_PSIZE &amp;nbsp; &amp;nbsp;4
&lt;br&gt;-#define TGSI_SEMANTIC_GENERIC &amp;nbsp;5
&lt;br&gt;-#define TGSI_SEMANTIC_NORMAL &amp;nbsp; 6
&lt;br&gt;-#define TGSI_SEMANTIC_FACE &amp;nbsp; &amp;nbsp; 7
&lt;br&gt;-#define TGSI_SEMANTIC_EDGEFLAG 8
&lt;br&gt;-#define TGSI_SEMANTIC_COUNT &amp;nbsp; &amp;nbsp;9 /**&amp;lt; number of semantic values */
&lt;br&gt;+#define TGSI_SEMANTIC_POSITION &amp;nbsp;0
&lt;br&gt;+#define TGSI_SEMANTIC_COLOR &amp;nbsp; &amp;nbsp; 1
&lt;br&gt;+#define TGSI_SEMANTIC_BCOLOR &amp;nbsp; &amp;nbsp;2 /**&amp;lt; back-face color */
&lt;br&gt;+#define TGSI_SEMANTIC_FOG &amp;nbsp; &amp;nbsp; &amp;nbsp; 3
&lt;br&gt;+#define TGSI_SEMANTIC_PSIZE &amp;nbsp; &amp;nbsp; 4
&lt;br&gt;+#define TGSI_SEMANTIC_GENERIC &amp;nbsp; 5
&lt;br&gt;+#define TGSI_SEMANTIC_NORMAL &amp;nbsp; &amp;nbsp;6
&lt;br&gt;+#define TGSI_SEMANTIC_FACE &amp;nbsp; &amp;nbsp; &amp;nbsp;7
&lt;br&gt;+#define TGSI_SEMANTIC_EDGEFLAG &amp;nbsp;8
&lt;br&gt;+#define TGSI_SEMANTIC_VERTICES &amp;nbsp;9
&lt;br&gt;+#define TGSI_SEMANTIC_PRIMID &amp;nbsp; 10
&lt;br&gt;+#define TGSI_SEMANTIC_COUNT &amp;nbsp; &amp;nbsp;11 /**&amp;lt; number of semantic values */
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;struct tgsi_declaration_semantic
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;diff --git a/src/gallium/state_trackers/python/p_context.i b/src/gallium/state_trackers/python/p_context.i
&lt;br&gt;index 9728207..3c35e6f 100644
&lt;br&gt;--- a/src/gallium/state_trackers/python/p_context.i
&lt;br&gt;+++ b/src/gallium/state_trackers/python/p_context.i
&lt;br&gt;@@ -103,6 +103,25 @@ struct st_context {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;vs = vs;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; void set_geometry_shader( const struct pipe_shader_state *state ) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;void *gs;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!state) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cso_set_geometry_shader_handle($self-&amp;gt;cso, NULL);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;gs = $self-&amp;gt;pipe-&amp;gt;create_gs_state($self-&amp;gt;pipe, state);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!gs)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if(cso_set_geometry_shader_handle($self-&amp;gt;cso, gs) != PIPE_OK)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;cso_delete_geometry_shader($self-&amp;gt;cso, $self-&amp;gt;gs);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;gs = gs;
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; /*
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* Parameter-like state (or properties)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;diff --git a/src/gallium/state_trackers/python/samples/gs.py b/src/gallium/state_trackers/python/samples/gs.py
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..f4f083e
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/src/gallium/state_trackers/python/samples/gs.py
&lt;br&gt;@@ -0,0 +1,254 @@
&lt;br&gt;+#!/usr/bin/env python
&lt;br&gt;+##########################################################################
&lt;br&gt;+#
&lt;br&gt;+# Copyright 2009 VMware
&lt;br&gt;+# All Rights Reserved.
&lt;br&gt;+#
&lt;br&gt;+# Permission is hereby granted, free of charge, to any person obtaining a
&lt;br&gt;+# copy of this software and associated documentation files (the
&lt;br&gt;+# &amp;quot;Software&amp;quot;), to deal in the Software without restriction, including
&lt;br&gt;+# without limitation the rights to use, copy, modify, merge, publish,
&lt;br&gt;+# distribute, sub license, and/or sell copies of the Software, and to
&lt;br&gt;+# permit persons to whom the Software is furnished to do so, subject to
&lt;br&gt;+# the following conditions:
&lt;br&gt;+#
&lt;br&gt;+# The above copyright notice and this permission notice (including the
&lt;br&gt;+# next paragraph) shall be included in all copies or substantial portions
&lt;br&gt;+# of the Software.
&lt;br&gt;+#
&lt;br&gt;+# THE SOFTWARE IS PROVIDED &amp;quot;AS IS&amp;quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS
&lt;br&gt;+# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
&lt;br&gt;+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
&lt;br&gt;+# IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
&lt;br&gt;+# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
&lt;br&gt;+# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
&lt;br&gt;+# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
&lt;br&gt;+#
&lt;br&gt;+##########################################################################
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+from gallium import *
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+def make_image(surface):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;data = surface.get_tile_rgba8(0, 0, surface.width, surface.height)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;import Image
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;outimage = Image.fromstring('RGBA', (surface.width, surface.height), data, &amp;quot;raw&amp;quot;, 'RGBA', 0, 1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return outimage
&lt;br&gt;+
&lt;br&gt;+def save_image(filename, surface):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;outimage = make_image(surface)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;outimage.save(filename, &amp;quot;PNG&amp;quot;)
&lt;br&gt;+
&lt;br&gt;+def show_image(surface):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;outimage = make_image(surface)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;import Tkinter as tk
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;from PIL import Image, ImageTk
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;root = tk.Tk()
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;root.title('background image')
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;image1 = ImageTk.PhotoImage(outimage)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;w = image1.width()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;h = image1.height()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;x = 100
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;y = 100
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;root.geometry(&amp;quot;%dx%d+%d+%d&amp;quot; % (w, h, x, y))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;panel1 = tk.Label(root, image=image1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;panel1.pack(side='top', fill='both', expand='yes')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;panel1.image = image1
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;root.mainloop()
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+def test(dev):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ctx = dev.context_create()
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;width = 255
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;height = 255
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;minz = 0.0
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;maxz = 1.0
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# disabled blending/masking
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;blend = Blend()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;blend.rgb_src_factor = PIPE_BLENDFACTOR_ONE
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;blend.alpha_src_factor = PIPE_BLENDFACTOR_ONE
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;blend.rgb_dst_factor = PIPE_BLENDFACTOR_ZERO
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;blend.alpha_dst_factor = PIPE_BLENDFACTOR_ZERO
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;blend.colormask = PIPE_MASK_RGBA
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ctx.set_blend(blend)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# depth/stencil/alpha
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;depth_stencil_alpha = DepthStencilAlpha()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;depth_stencil_alpha.depth.enabled = 1
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;depth_stencil_alpha.depth.writemask = 1
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;depth_stencil_alpha.depth.func = PIPE_FUNC_LESS
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ctx.set_depth_stencil_alpha(depth_stencil_alpha)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# rasterizer
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;rasterizer = Rasterizer()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;rasterizer.front_winding = PIPE_WINDING_CW
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;rasterizer.cull_mode = PIPE_WINDING_NONE
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;rasterizer.scissor = 1
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ctx.set_rasterizer(rasterizer)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# viewport
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;viewport = Viewport()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;scale = FloatArray(4)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;scale[0] = width / 2.0
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;scale[1] = -height / 2.0
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;scale[2] = (maxz - minz) / 2.0
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;scale[3] = 1.0
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;viewport.scale = scale
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;translate = FloatArray(4)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;translate[0] = width / 2.0
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;translate[1] = height / 2.0
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;translate[2] = (maxz - minz) / 2.0
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;translate[3] = 0.0
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;viewport.translate = translate
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ctx.set_viewport(viewport)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# samplers
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;sampler = Sampler()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;sampler.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;sampler.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;sampler.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NONE
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;sampler.min_img_filter = PIPE_TEX_MIPFILTER_NEAREST
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;sampler.mag_img_filter = PIPE_TEX_MIPFILTER_NEAREST
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;sampler.normalized_coords = 1
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ctx.set_sampler(0, sampler)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# scissor
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;scissor = Scissor()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;scissor.minx = 0
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;scissor.miny = 0
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;scissor.maxx = width
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;scissor.maxy = height
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ctx.set_scissor(scissor)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;clip = Clip()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;clip.nr = 0
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ctx.set_clip(clip)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# framebuffer
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;cbuf = dev.texture_create(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PIPE_FORMAT_X8R8G8B8_UNORM,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;width, height,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tex_usage=PIPE_TEXTURE_USAGE_DISPLAY_TARGET,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;).get_surface()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;zbuf = dev.texture_create(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PIPE_FORMAT_Z16_UNORM,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;width, height,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tex_usage=PIPE_TEXTURE_USAGE_DEPTH_STENCIL,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;).get_surface()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;fb = Framebuffer()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;fb.width = width
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;fb.height = height
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;fb.nr_cbufs = 1
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;fb.set_cbuf(0, cbuf)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;fb.set_zsbuf(zbuf)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ctx.set_framebuffer(fb)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;rgba = FloatArray(4);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;rgba[0] = 0.0
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;rgba[1] = 0.0
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;rgba[2] = 0.0
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;rgba[3] = 0.0
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ctx.clear(PIPE_CLEAR_COLOR | PIPE_CLEAR_DEPTHSTENCIL, rgba, 1.0, 0xff)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# vertex shader
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;vs = Shader('''
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;VERT
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DCL IN[0], POSITION, CONSTANT
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DCL IN[1], COLOR, CONSTANT
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DCL OUT[0], POSITION, CONSTANT
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DCL OUT[1], COLOR, CONSTANT
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0:MOV OUT[0], IN[0]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1:MOV OUT[1], IN[1]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2:END
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;''')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ctx.set_vertex_shader(vs)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;gs = Shader('''
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GEOM
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PROPERTY GS_INPUT_PRIMITIVE TRIANGLES
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PROPERTY GS_OUTPUT_PRIMITIVE TRIANGLE_STRIP
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DCL IN[][0], POSITION, CONSTANT
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DCL IN[][1], COLOR, CONSTANT
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DCL OUT[0], POSITION, CONSTANT
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DCL OUT[1], COLOR, CONSTANT
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0:MOV OUT[0], IN[0][0]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1:MOV OUT[1], IN[0][1]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2:EMIT_VERTEX
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3:MOV OUT[0], IN[1][0]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;4:MOV OUT[1], IN[1][1]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5:EMIT_VERTEX
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;6:MOV OUT[0], IN[2][0]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;7:MOV OUT[1], IN[2][1]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;8:EMIT_VERTEX
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;9:END_PRIMITIVE
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;10:END
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;''')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ctx.set_geometry_shader(gs)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# fragment shader
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;fs = Shader('''
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FRAG
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DCL IN[0], COLOR, LINEAR
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DCL OUT[0], COLOR, CONSTANT
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0:MOV OUT[0], IN[0]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1:END
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;''')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ctx.set_fragment_shader(fs)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;nverts = 3
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;nattrs = 2
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts = FloatArray(nverts * nattrs * 4)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[ 0] = &amp;nbsp; 0.0 # x1
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[ 1] = &amp;nbsp; 0.8 # y1
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[ 2] = &amp;nbsp; 0.2 # z1
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[ 3] = &amp;nbsp; 1.0 # w1
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[ 4] = &amp;nbsp; 1.0 # r1
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[ 5] = &amp;nbsp; 0.0 # g1
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[ 6] = &amp;nbsp; 0.0 # b1
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[ 7] = &amp;nbsp; 1.0 # a1
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[ 8] = &amp;nbsp;-0.8 # x2
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[ 9] = &amp;nbsp;-0.8 # y2
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[10] = &amp;nbsp; 0.5 # z2
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[11] = &amp;nbsp; 1.0 # w2
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[12] = &amp;nbsp; 0.0 # r2
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[13] = &amp;nbsp; 1.0 # g2
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[14] = &amp;nbsp; 0.0 # b2
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[15] = &amp;nbsp; 1.0 # a2
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[16] = &amp;nbsp; 0.8 # x3
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[17] = &amp;nbsp;-0.8 # y3
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[18] = &amp;nbsp; 0.8 # z3
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[19] = &amp;nbsp; 1.0 # w3
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[20] = &amp;nbsp; 0.0 # r3
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[21] = &amp;nbsp; 0.0 # g3
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[22] = &amp;nbsp; 1.0 # b3
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;verts[23] = &amp;nbsp; 1.0 # a3
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ctx.draw_vertices(PIPE_PRIM_TRIANGLES,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;nverts,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;nattrs,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;verts)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ctx.flush()
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;show_image(cbuf)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;#show_image(zbuf)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;#save_image('cbuf.png', cbuf)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;#save_image('zbuf.png', zbuf)
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+def main():
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;dev = Device()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;test(dev)
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+if __name__ == '__main__':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;main()
&lt;br&gt;diff --git a/src/gallium/state_trackers/python/st_device.h b/src/gallium/state_trackers/python/st_device.h
&lt;br&gt;index a246b6a..2a7a323 100644
&lt;br&gt;--- a/src/gallium/state_trackers/python/st_device.h
&lt;br&gt;+++ b/src/gallium/state_trackers/python/st_device.h
&lt;br&gt;@@ -57,6 +57,7 @@ struct st_context {
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; void *vs;
&lt;br&gt;&amp;nbsp; &amp;nbsp; void *fs;
&lt;br&gt;+ &amp;nbsp; void *gs;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct pipe_texture *default_texture;
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct pipe_texture *sampler_textures[PIPE_MAX_SAMPLERS];
&lt;br&gt;diff --git a/src/mesa/state_tracker/st_draw_feedback.c b/src/mesa/state_tracker/st_draw_feedback.c
&lt;br&gt;index d793f82..cfc0caa 100644
&lt;br&gt;--- a/src/mesa/state_tracker/st_draw_feedback.c
&lt;br&gt;+++ b/src/mesa/state_tracker/st_draw_feedback.c
&lt;br&gt;@@ -241,7 +241,8 @@ st_feedback_draw_vbo(GLcontext *ctx,
&lt;br&gt;&amp;nbsp; &amp;nbsp; mapped_constants = pipe_buffer_map(pipe-&amp;gt;screen,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;st-&amp;gt;state.constants[PIPE_SHADER_VERTEX].buffer,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PIPE_BUFFER_USAGE_CPU_READ);
&lt;br&gt;- &amp;nbsp; draw_set_mapped_constant_buffer(st-&amp;gt;draw, mapped_constants,
&lt;br&gt;+ &amp;nbsp; draw_set_mapped_constant_buffer(st-&amp;gt;draw, PIPE_SHADER_VERTEX,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mapped_constants,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; st-&amp;gt;state.constants[PIPE_SHADER_VERTEX].buffer-&amp;gt;size);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-- 
&lt;br&gt;1.6.5.7
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;tt&gt;[0002-tgsi-make-the-tgsi-assembly-parser-report-line-colum.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From da5a9010381c9f064d01a10cc88ae0d274bc300a Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Zack Rusin &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914348&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;zackr@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Tue, 15 Dec 2009 09:26:51 -0500
&lt;br&gt;Subject: [PATCH 02/12] tgsi: make the tgsi assembly parser report line/column on error
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/tgsi/tgsi_text.c | &amp;nbsp; 15 ++++++++++++++-
&lt;br&gt;&amp;nbsp;1 files changed, 14 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/src/gallium/auxiliary/tgsi/tgsi_text.c b/src/gallium/auxiliary/tgsi/tgsi_text.c
&lt;br&gt;index 84e863b..9673686 100644
&lt;br&gt;--- a/src/gallium/auxiliary/tgsi/tgsi_text.c
&lt;br&gt;+++ b/src/gallium/auxiliary/tgsi/tgsi_text.c
&lt;br&gt;@@ -197,7 +197,20 @@ struct translate_ctx
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void report_error( struct translate_ctx *ctx, const char *msg )
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp; debug_printf( &amp;quot;\nError: %s&amp;quot;, msg );
&lt;br&gt;+ &amp;nbsp; int line = 1;
&lt;br&gt;+ &amp;nbsp; int column = 1;
&lt;br&gt;+ &amp;nbsp; const char *itr = ctx-&amp;gt;text;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; while (itr != ctx-&amp;gt;cur) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (*itr == '\n') {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; column = 1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ++line;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;++column;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;++itr;
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; debug_printf( &amp;quot;\nTGSI asm error: %s [%d : %d] \n&amp;quot;, msg, line, column );
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/* Parse shader header.
&lt;br&gt;-- 
&lt;br&gt;1.6.5.7
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;tt&gt;[0004-softpipe-gs-don-t-crash-with-null-shader.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From 9a9b712a7489d91f06d1d82f2b53e9013ba69aee Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Zack Rusin &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914348&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;zackr@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Wed, 23 Dec 2009 12:34:34 -0500
&lt;br&gt;Subject: [PATCH 04/12] softpipe/gs: don't crash with null shader
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;src/gallium/drivers/softpipe/sp_state_fs.c | &amp;nbsp; &amp;nbsp;3 ++-
&lt;br&gt;&amp;nbsp;1 files changed, 2 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/src/gallium/drivers/softpipe/sp_state_fs.c b/src/gallium/drivers/softpipe/sp_state_fs.c
&lt;br&gt;index 22f82b1..b904bde 100644
&lt;br&gt;--- a/src/gallium/drivers/softpipe/sp_state_fs.c
&lt;br&gt;+++ b/src/gallium/drivers/softpipe/sp_state_fs.c
&lt;br&gt;@@ -221,6 +221,7 @@ softpipe_delete_gs_state(struct pipe_context *pipe, void *gs)
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct sp_geometry_shader *state =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(struct sp_geometry_shader *)gs;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; draw_delete_geometry_shader(softpipe-&amp;gt;draw, state-&amp;gt;draw_data);
&lt;br&gt;+ &amp;nbsp; draw_delete_geometry_shader(softpipe-&amp;gt;draw,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (state) ? state-&amp;gt;draw_data : 0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; FREE(state);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;-- 
&lt;br&gt;1.6.5.7
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;tt&gt;[0006-python-gs-fix-the-example.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From 9f6fdd790281a8d24f247ce011cf60837b1f4f18 Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Zack Rusin &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914348&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;zackr@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Wed, 23 Dec 2009 12:40:19 -0500
&lt;br&gt;Subject: [PATCH 06/12] python/gs: fix the example
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;src/gallium/state_trackers/python/samples/gs.py | &amp;nbsp; &amp;nbsp;8 ++++----
&lt;br&gt;&amp;nbsp;1 files changed, 4 insertions(+), 4 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/src/gallium/state_trackers/python/samples/gs.py b/src/gallium/state_trackers/python/samples/gs.py
&lt;br&gt;index f4f083e..1ceead5 100644
&lt;br&gt;--- a/src/gallium/state_trackers/python/samples/gs.py
&lt;br&gt;+++ b/src/gallium/state_trackers/python/samples/gs.py
&lt;br&gt;@@ -180,14 +180,14 @@ def test(dev):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DCL OUT[1], COLOR, CONSTANT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0:MOV OUT[0], IN[0][0]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1:MOV OUT[1], IN[0][1]
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2:EMIT_VERTEX
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2:EMIT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3:MOV OUT[0], IN[1][0]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;4:MOV OUT[1], IN[1][1]
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5:EMIT_VERTEX
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5:EMIT
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;6:MOV OUT[0], IN[2][0]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;7:MOV OUT[1], IN[2][1]
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;8:EMIT_VERTEX
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;9:END_PRIMITIVE
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;8:EMIT
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;9:ENDPRIM
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;10:END
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;''')
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ctx.set_geometry_shader(gs)
&lt;br&gt;-- 
&lt;br&gt;1.6.5.7
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;tt&gt;[0007-tgsi-add-missing-support-for-two-dimensional-arrays-.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From ab800dd005e8f4a0f372462d055c5a526d2d1379 Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Zack Rusin &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914348&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;zackr@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Wed, 23 Dec 2009 12:40:39 -0500
&lt;br&gt;Subject: [PATCH 07/12] tgsi: add missing support for two dimensional arrays in various places
&lt;br&gt;&lt;br&gt;in particular asm text parsing and sanity checking were missing code
&lt;br&gt;to handle multi-dimensional arrays/geometry shaders
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/tgsi/tgsi_dump.c &amp;nbsp; | &amp;nbsp; &amp;nbsp;6 +
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/tgsi/tgsi_sanity.c | &amp;nbsp;284 +++++++++++++++++++------
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/tgsi/tgsi_text.c &amp;nbsp; | &amp;nbsp;351 ++++++++++++++++++++----------
&lt;br&gt;&amp;nbsp;3 files changed, 465 insertions(+), 176 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/src/gallium/auxiliary/tgsi/tgsi_dump.c b/src/gallium/auxiliary/tgsi/tgsi_dump.c
&lt;br&gt;index bb4f564..1f6b1d8 100644
&lt;br&gt;--- a/src/gallium/auxiliary/tgsi/tgsi_dump.c
&lt;br&gt;+++ b/src/gallium/auxiliary/tgsi/tgsi_dump.c
&lt;br&gt;@@ -183,6 +183,12 @@ _dump_register(
&lt;br&gt;&amp;nbsp; &amp;nbsp; int last )
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; ENM( file, file_names );
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; /* all geometry shader inputs are two dimensional */
&lt;br&gt;+ &amp;nbsp; if (file == TGSI_FILE_INPUT &amp;&amp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; ctx-&amp;gt;iter.processor.Processor == TGSI_PROCESSOR_GEOMETRY)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;TXT(&amp;quot;[]&amp;quot;);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; CHR( '[' );
&lt;br&gt;&amp;nbsp; &amp;nbsp; SID( first );
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (first != last) {
&lt;br&gt;diff --git a/src/gallium/auxiliary/tgsi/tgsi_sanity.c b/src/gallium/auxiliary/tgsi/tgsi_sanity.c
&lt;br&gt;index c27579e..5d11c19 100644
&lt;br&gt;--- a/src/gallium/auxiliary/tgsi/tgsi_sanity.c
&lt;br&gt;+++ b/src/gallium/auxiliary/tgsi/tgsi_sanity.c
&lt;br&gt;@@ -26,32 +26,112 @@
&lt;br&gt;&amp;nbsp; **************************************************************************/
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#include &amp;quot;util/u_debug.h&amp;quot;
&lt;br&gt;+#include &amp;quot;util/u_memory.h&amp;quot;
&lt;br&gt;+#include &amp;quot;pipe/p_inlines.h&amp;quot;
&lt;br&gt;+#include &amp;quot;cso_cache/cso_hash.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;tgsi_sanity.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;tgsi_info.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;tgsi_iterate.h&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-typedef uint reg_flag;
&lt;br&gt;-
&lt;br&gt;-#define BITS_IN_REG_FLAG (sizeof( reg_flag ) * 8)
&lt;br&gt;-
&lt;br&gt;-#define MAX_REGISTERS 1024
&lt;br&gt;-#define MAX_REG_FLAGS ((MAX_REGISTERS + BITS_IN_REG_FLAG - 1) / BITS_IN_REG_FLAG)
&lt;br&gt;+typedef struct {
&lt;br&gt;+ &amp;nbsp; uint file : 28;
&lt;br&gt;+ &amp;nbsp; /* max 2 dimensions */
&lt;br&gt;+ &amp;nbsp; uint dimensions : 4;
&lt;br&gt;+ &amp;nbsp; uint indices[2];
&lt;br&gt;+} scan_register;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;struct sanity_check_ctx
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct tgsi_iterate_context iter;
&lt;br&gt;+ &amp;nbsp; struct cso_hash *regs_decl;
&lt;br&gt;+ &amp;nbsp; struct cso_hash *regs_used;
&lt;br&gt;+ &amp;nbsp; struct cso_hash *regs_ind_used;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; reg_flag regs_decl[TGSI_FILE_COUNT][MAX_REG_FLAGS];
&lt;br&gt;- &amp;nbsp; reg_flag regs_used[TGSI_FILE_COUNT][MAX_REG_FLAGS];
&lt;br&gt;- &amp;nbsp; boolean regs_ind_used[TGSI_FILE_COUNT];
&lt;br&gt;&amp;nbsp; &amp;nbsp; uint num_imms;
&lt;br&gt;&amp;nbsp; &amp;nbsp; uint num_instructions;
&lt;br&gt;&amp;nbsp; &amp;nbsp; uint index_of_END;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; uint errors;
&lt;br&gt;&amp;nbsp; &amp;nbsp; uint warnings;
&lt;br&gt;+ &amp;nbsp; uint implied_array_size;
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static INLINE unsigned
&lt;br&gt;+scan_register_key(const scan_register *reg)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; unsigned key = reg-&amp;gt;file;
&lt;br&gt;+ &amp;nbsp; key |= (reg-&amp;gt;indices[0] &amp;lt;&amp;lt; 4);
&lt;br&gt;+ &amp;nbsp; key |= (reg-&amp;gt;indices[1] &amp;lt;&amp;lt; 18);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; return key;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;+fill_scan_register1d(scan_register *reg,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; uint file, uint index)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; reg-&amp;gt;file = file;
&lt;br&gt;+ &amp;nbsp; reg-&amp;gt;dimensions = 1;
&lt;br&gt;+ &amp;nbsp; reg-&amp;gt;indices[0] = index;
&lt;br&gt;+ &amp;nbsp; reg-&amp;gt;indices[1] = 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;+fill_scan_register2d(scan_register *reg,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; uint file, uint index1, uint index2)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; reg-&amp;gt;file = file;
&lt;br&gt;+ &amp;nbsp; reg-&amp;gt;dimensions = 2;
&lt;br&gt;+ &amp;nbsp; reg-&amp;gt;indices[0] = index1;
&lt;br&gt;+ &amp;nbsp; reg-&amp;gt;indices[1] = index2;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;+scan_register_dst(scan_register *reg,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;struct tgsi_full_dst_register *dst)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; fill_scan_register1d(reg,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dst-&amp;gt;Register.File,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dst-&amp;gt;Register.Index);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;+scan_register_src(scan_register *reg,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;struct tgsi_full_src_register *src)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; if (src-&amp;gt;Register.Dimension) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;/*FIXME: right now we don't support indirect
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; * multidimensional addressing */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;debug_assert(!src-&amp;gt;Dimension.Indirect);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;fill_scan_register2d(reg,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; src-&amp;gt;Register.File,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; src-&amp;gt;Register.Index,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; src-&amp;gt;Dimension.Index);
&lt;br&gt;+ &amp;nbsp; } else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;fill_scan_register1d(reg,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; src-&amp;gt;Register.File,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; src-&amp;gt;Register.Index);
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static scan_register *
&lt;br&gt;+create_scan_register_src(struct tgsi_full_src_register *src)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; scan_register *reg = MALLOC(sizeof(scan_register));
&lt;br&gt;+ &amp;nbsp; scan_register_src(reg, src);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; return reg;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static scan_register *
&lt;br&gt;+create_scan_register_dst(struct tgsi_full_dst_register *dst)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; scan_register *reg = MALLOC(sizeof(scan_register));
&lt;br&gt;+ &amp;nbsp; scan_register_dst(reg, dst);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; return reg;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;&amp;nbsp;report_error(
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct sanity_check_ctx *ctx,
&lt;br&gt;@@ -99,12 +179,12 @@ check_file_name(
&lt;br&gt;&amp;nbsp;static boolean
&lt;br&gt;&amp;nbsp;is_register_declared(
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct sanity_check_ctx *ctx,
&lt;br&gt;- &amp;nbsp; uint file,
&lt;br&gt;- &amp;nbsp; int index )
&lt;br&gt;+ &amp;nbsp; const scan_register *reg)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp; assert( index &amp;gt;= 0 &amp;&amp; index &amp;lt; MAX_REGISTERS );
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; return (ctx-&amp;gt;regs_decl[file][index / BITS_IN_REG_FLAG] &amp; (1 &amp;lt;&amp;lt; (index % BITS_IN_REG_FLAG))) ? TRUE : FALSE;
&lt;br&gt;+ &amp;nbsp; void *data = cso_hash_find_data_from_template(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx-&amp;gt;regs_decl, scan_register_key(reg),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;(void*)reg, sizeof(scan_register));
&lt;br&gt;+ &amp;nbsp; return &amp;nbsp;data ? TRUE : FALSE;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static boolean
&lt;br&gt;@@ -112,23 +192,37 @@ is_any_register_declared(
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct sanity_check_ctx *ctx,
&lt;br&gt;&amp;nbsp; &amp;nbsp; uint file )
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp; uint i;
&lt;br&gt;+ &amp;nbsp; struct cso_hash_iter iter =
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;cso_hash_first_node(ctx-&amp;gt;regs_decl);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; for (i = 0; i &amp;lt; MAX_REG_FLAGS; i++)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (ctx-&amp;gt;regs_decl[file][i])
&lt;br&gt;+ &amp;nbsp; while (cso_hash_iter_is_null(iter)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;scan_register *reg = (scan_register *)cso_hash_iter_data(iter);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (reg-&amp;gt;file == file)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return TRUE;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;iter = cso_hash_iter_next(iter);
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; return FALSE;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static boolean
&lt;br&gt;&amp;nbsp;is_register_used(
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct sanity_check_ctx *ctx,
&lt;br&gt;- &amp;nbsp; uint file,
&lt;br&gt;- &amp;nbsp; int index )
&lt;br&gt;+ &amp;nbsp; scan_register *reg)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp; assert( index &amp;lt; MAX_REGISTERS );
&lt;br&gt;+ &amp;nbsp; void *data = cso_hash_find_data_from_template(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx-&amp;gt;regs_used, scan_register_key(reg),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;reg, sizeof(scan_register));
&lt;br&gt;+ &amp;nbsp; return &amp;nbsp;data ? TRUE : FALSE;
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; return (ctx-&amp;gt;regs_used[file][index / BITS_IN_REG_FLAG] &amp; (1 &amp;lt;&amp;lt; (index % BITS_IN_REG_FLAG))) ? TRUE : FALSE;
&lt;br&gt;+
&lt;br&gt;+static boolean
&lt;br&gt;+is_ind_register_used(
&lt;br&gt;+ &amp;nbsp; struct sanity_check_ctx *ctx,
&lt;br&gt;+ &amp;nbsp; scan_register *reg)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; return cso_hash_contains(ctx-&amp;gt;regs_ind_used, reg-&amp;gt;file);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static const char *file_names[TGSI_FILE_COUNT] =
&lt;br&gt;@@ -148,31 +242,40 @@ static const char *file_names[TGSI_FILE_COUNT] =
&lt;br&gt;&amp;nbsp;static boolean
&lt;br&gt;&amp;nbsp;check_register_usage(
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct sanity_check_ctx *ctx,
&lt;br&gt;- &amp;nbsp; uint file,
&lt;br&gt;- &amp;nbsp; int index,
&lt;br&gt;+ &amp;nbsp; scan_register *reg,
&lt;br&gt;&amp;nbsp; &amp;nbsp; const char *name,
&lt;br&gt;&amp;nbsp; &amp;nbsp; boolean indirect_access )
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp; if (!check_file_name( ctx, file ))
&lt;br&gt;+ &amp;nbsp; if (!check_file_name( ctx, reg-&amp;gt;file )) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;free(reg);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (indirect_access) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Note that 'index' is an offset relative to the value of the
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; * address register. &amp;nbsp;No range checking done here.
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!is_any_register_declared( ctx, file ))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; report_error( ctx, &amp;quot;%s: Undeclared %s register&amp;quot;, file_names[file], name );
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx-&amp;gt;regs_ind_used[file] = TRUE;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; * address register. &amp;nbsp;No range checking done here.*/
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;reg-&amp;gt;indices[0] = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;reg-&amp;gt;indices[1] = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!is_any_register_declared( ctx, reg-&amp;gt;file ))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; report_error( ctx, &amp;quot;%s: Undeclared %s register&amp;quot;, file_names[reg-&amp;gt;file], name );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!is_ind_register_used(ctx, reg))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cso_hash_insert(ctx-&amp;gt;regs_ind_used, reg-&amp;gt;file, reg);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; free(reg);
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (index &amp;lt; 0 || index &amp;gt;= MAX_REGISTERS) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; report_error( ctx, &amp;quot;%s[%d]: Invalid %s index&amp;quot;, file_names[file], index, name );
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return FALSE;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!is_register_declared( ctx, file, index ))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; report_error( ctx, &amp;quot;%s[%d]: Undeclared %s register&amp;quot;, file_names[file], index, name );
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx-&amp;gt;regs_used[file][index / BITS_IN_REG_FLAG] |= (1 &amp;lt;&amp;lt; (index % BITS_IN_REG_FLAG));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!is_register_declared( ctx, reg )) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (reg-&amp;gt;dimensions == 2)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;report_error( ctx, &amp;quot;%s[%d][%d]: Undeclared %s register&amp;quot;, file_names[reg-&amp;gt;file],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reg-&amp;gt;indices[0], reg-&amp;gt;indices[1], name );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;report_error( ctx, &amp;quot;%s[%d]: Undeclared %s register&amp;quot;, file_names[reg-&amp;gt;file],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reg-&amp;gt;indices[0], name );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!is_register_used( ctx, reg ))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cso_hash_insert(ctx-&amp;gt;regs_used, scan_register_key(reg), reg);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; free(reg);
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; return TRUE;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -210,33 +313,33 @@ iter_instruction(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* Mark the registers as used.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;nbsp; &amp;nbsp; for (i = 0; i &amp;lt; inst-&amp;gt;Instruction.NumDstRegs; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;scan_register *reg = create_scan_register_dst(&amp;inst-&amp;gt;Dst[i]);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;check_register_usage(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ctx,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; inst-&amp;gt;Dst[i].Register.File,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; inst-&amp;gt;Dst[i].Register.Index,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; reg,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;destination&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FALSE );
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; for (i = 0; i &amp;lt; inst-&amp;gt;Instruction.NumSrcRegs; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;scan_register *reg = create_scan_register_src(&amp;inst-&amp;gt;Src[i]);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;check_register_usage(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ctx,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; inst-&amp;gt;Src[i].Register.File,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; inst-&amp;gt;Src[i].Register.Index,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; reg,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;source&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (boolean)inst-&amp;gt;Src[i].Register.Indirect );
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (inst-&amp;gt;Src[i].Register.Indirect) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; uint file;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int index;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; scan_register *ind_reg = MALLOC(sizeof(scan_register));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; file = inst-&amp;gt;Src[i].Indirect.File;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; index = inst-&amp;gt;Src[i].Indirect.Index;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fill_scan_register1d(ind_reg,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;inst-&amp;gt;Src[i].Indirect.File,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;inst-&amp;gt;Src[i].Indirect.Index);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; check_register_usage(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;file,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;index,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reg,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;indirect&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FALSE );
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!(file == TGSI_FILE_ADDRESS || file == TGSI_FILE_LOOP) || index != 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!(reg-&amp;gt;file == TGSI_FILE_ADDRESS || reg-&amp;gt;file == TGSI_FILE_LOOP) ||
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; reg-&amp;gt;indices[0] != 0) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;report_warning(ctx, &amp;quot;Indirect register neither ADDR[0] nor LOOP[0]&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -266,6 +369,19 @@ iter_instruction(
&lt;br&gt;&amp;nbsp; &amp;nbsp; return TRUE;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static void
&lt;br&gt;+check_and_declare(struct sanity_check_ctx *ctx,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;scan_register *reg)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; if (is_register_declared( ctx, reg))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;report_error( ctx, &amp;quot;%s[%u]: The same register declared more than once&amp;quot;,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;file_names[reg-&amp;gt;file], reg-&amp;gt;indices[0] );
&lt;br&gt;+ &amp;nbsp; cso_hash_insert(ctx-&amp;gt;regs_decl,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; scan_register_key(reg),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; reg);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;static boolean
&lt;br&gt;&amp;nbsp;iter_declaration(
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct tgsi_iterate_context *iter,
&lt;br&gt;@@ -287,9 +403,21 @@ iter_declaration(
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (!check_file_name( ctx, file ))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return TRUE;
&lt;br&gt;&amp;nbsp; &amp;nbsp; for (i = decl-&amp;gt;Range.First; i &amp;lt;= decl-&amp;gt;Range.Last; i++) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (is_register_declared( ctx, file, i ))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; report_error( ctx, &amp;quot;%s[%u]: The same register declared more than once&amp;quot;, file_names[file], i );
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx-&amp;gt;regs_decl[file][i / BITS_IN_REG_FLAG] |= (1 &amp;lt;&amp;lt; (i % BITS_IN_REG_FLAG));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;/* declared TGSI_FILE_INPUT's for geometry processor
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; * have an implied second dimension */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (file == TGSI_FILE_INPUT &amp;&amp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx-&amp;gt;iter.processor.Processor == TGSI_PROCESSOR_GEOMETRY) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; uint vert;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (vert = 0; vert &amp;lt; ctx-&amp;gt;implied_array_size; ++vert) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;scan_register *reg = MALLOC(sizeof(scan_register));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fill_scan_register2d(reg, file, vert, i);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;check_and_declare(ctx, reg);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; scan_register *reg = MALLOC(sizeof(scan_register));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fill_scan_register1d(reg, file, i);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; check_and_declare(ctx, reg);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; return TRUE;
&lt;br&gt;@@ -301,8 +429,7 @@ iter_immediate(
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct tgsi_full_immediate *imm )
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct sanity_check_ctx *ctx = (struct sanity_check_ctx *) iter;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; assert( ctx-&amp;gt;num_imms &amp;lt; MAX_REGISTERS );
&lt;br&gt;+ &amp;nbsp; scan_register *reg;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* No immediates allowed after the first instruction.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;@@ -311,7 +438,9 @@ iter_immediate(
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* Mark the register as declared.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;- &amp;nbsp; ctx-&amp;gt;regs_decl[TGSI_FILE_IMMEDIATE][ctx-&amp;gt;num_imms / BITS_IN_REG_FLAG] |= (1 &amp;lt;&amp;lt; (ctx-&amp;gt;num_imms % BITS_IN_REG_FLAG));
&lt;br&gt;+ &amp;nbsp; reg = MALLOC(sizeof(scan_register));
&lt;br&gt;+ &amp;nbsp; fill_scan_register1d(reg, TGSI_FILE_IMMEDIATE, ctx-&amp;gt;num_imms);
&lt;br&gt;+ &amp;nbsp; cso_hash_insert(ctx-&amp;gt;regs_decl, scan_register_key(reg), reg);
&lt;br&gt;&amp;nbsp; &amp;nbsp; ctx-&amp;gt;num_imms++;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* Check data type validity.
&lt;br&gt;@@ -330,8 +459,13 @@ iter_property(
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct tgsi_iterate_context *iter,
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct tgsi_full_property *prop )
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp; /*struct sanity_check_ctx *ctx = (struct sanity_check_ctx *) iter;*/
&lt;br&gt;+ &amp;nbsp; struct sanity_check_ctx *ctx = (struct sanity_check_ctx *) iter;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; if (iter-&amp;gt;processor.Processor == TGSI_PROCESSOR_GEOMETRY &amp;&amp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; prop-&amp;gt;Property.PropertyName == TGSI_PROPERTY_GS_INPUT_PRIM) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx-&amp;gt;implied_array_size =
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pipe_vertices_per_primitive(prop-&amp;gt;u[0].Data);
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; return TRUE;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -340,7 +474,6 @@ epilog(
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct tgsi_iterate_context *iter )
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct sanity_check_ctx *ctx = (struct sanity_check_ctx *) iter;
&lt;br&gt;- &amp;nbsp; uint file;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* There must be an END instruction somewhere.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;@@ -350,13 +483,17 @@ epilog(
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* Check if all declared registers were used.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;- &amp;nbsp; for (file = TGSI_FILE_NULL; file &amp;lt; TGSI_FILE_COUNT; file++) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;uint i;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;for (i = 0; i &amp;lt; MAX_REGISTERS; i++) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (is_register_declared( ctx, file, i ) &amp;&amp; !is_register_used( ctx, file, i ) &amp;&amp; !ctx-&amp;gt;regs_ind_used[file]) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;report_warning( ctx, &amp;quot;%s[%u]: Register never used&amp;quot;, file_names[file], i );
&lt;br&gt;+ &amp;nbsp; {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;struct cso_hash_iter iter =
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cso_hash_first_node(ctx-&amp;gt;regs_decl);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;while (cso_hash_iter_is_null(iter)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; scan_register *reg = (scan_register *)cso_hash_iter_data(iter);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!is_register_used(ctx, reg) &amp;&amp; !is_ind_register_used(ctx, reg)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;report_warning( ctx, &amp;quot;%s[%u]: Register never used&amp;quot;,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;file_names[reg-&amp;gt;file], reg-&amp;gt;indices[0] );
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; iter = cso_hash_iter_next(iter);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -368,6 +505,18 @@ epilog(
&lt;br&gt;&amp;nbsp; &amp;nbsp; return TRUE;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static void
&lt;br&gt;+regs_hash_destroy(struct cso_hash *hash)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; struct cso_hash_iter iter = cso_hash_first_node(hash);
&lt;br&gt;+ &amp;nbsp; while (!cso_hash_iter_is_null(iter)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;scan_register *reg = (scan_register *)cso_hash_iter_data(iter);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;iter = cso_hash_erase(hash, iter);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;free(reg);
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; cso_hash_delete(hash);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;boolean
&lt;br&gt;&amp;nbsp;tgsi_sanity_check(
&lt;br&gt;&amp;nbsp; &amp;nbsp; const struct tgsi_token *tokens )
&lt;br&gt;@@ -381,18 +530,23 @@ tgsi_sanity_check(
&lt;br&gt;&amp;nbsp; &amp;nbsp; ctx.iter.iterate_property = iter_property;
&lt;br&gt;&amp;nbsp; &amp;nbsp; ctx.iter.epilog = epilog;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; memset( ctx.regs_decl, 0, sizeof( ctx.regs_decl ) );
&lt;br&gt;- &amp;nbsp; memset( ctx.regs_used, 0, sizeof( ctx.regs_used ) );
&lt;br&gt;- &amp;nbsp; memset( ctx.regs_ind_used, 0, sizeof( ctx.regs_ind_used ) );
&lt;br&gt;+ &amp;nbsp; ctx.regs_decl = cso_hash_create();
&lt;br&gt;+ &amp;nbsp; ctx.regs_used = cso_hash_create();
&lt;br&gt;+ &amp;nbsp; ctx.regs_ind_used = cso_hash_create();
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; ctx.num_imms = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; ctx.num_instructions = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; ctx.index_of_END = ~0;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; ctx.errors = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; ctx.warnings = 0;
&lt;br&gt;+ &amp;nbsp; ctx.implied_array_size = 0;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (!tgsi_iterate_shader( tokens, &amp;ctx.iter ))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; regs_hash_destroy(ctx.regs_decl);
&lt;br&gt;+ &amp;nbsp; regs_hash_destroy(ctx.regs_used);
&lt;br&gt;+ &amp;nbsp; regs_hash_destroy(ctx.regs_ind_used);
&lt;br&gt;&amp;nbsp; &amp;nbsp; return ctx.errors == 0;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;diff --git a/src/gallium/auxiliary/tgsi/tgsi_text.c b/src/gallium/auxiliary/tgsi/tgsi_text.c
&lt;br&gt;index 9673686..80d3a1e 100644
&lt;br&gt;--- a/src/gallium/auxiliary/tgsi/tgsi_text.c
&lt;br&gt;+++ b/src/gallium/auxiliary/tgsi/tgsi_text.c
&lt;br&gt;@@ -28,6 +28,7 @@
&lt;br&gt;&amp;nbsp;#include &amp;quot;util/u_debug.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;util/u_memory.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;pipe/p_defines.h&amp;quot;
&lt;br&gt;+#include &amp;quot;pipe/p_inlines.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;tgsi_text.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;tgsi_build.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;tgsi_info.h&amp;quot;
&lt;br&gt;@@ -193,6 +194,8 @@ struct translate_ctx
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct tgsi_token *tokens_cur;
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct tgsi_token *tokens_end;
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct tgsi_header *header;
&lt;br&gt;+ &amp;nbsp; unsigned processor : 4;
&lt;br&gt;+ &amp;nbsp; int implied_array_size : 5;
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void report_error( struct translate_ctx *ctx, const char *msg )
&lt;br&gt;@@ -242,6 +245,7 @@ static boolean parse_header( struct translate_ctx *ctx )
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (ctx-&amp;gt;tokens_cur &amp;gt;= ctx-&amp;gt;tokens_end)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;&amp;nbsp; &amp;nbsp; *(struct tgsi_processor *) ctx-&amp;gt;tokens_cur++ = tgsi_build_processor( processor, ctx-&amp;gt;header );
&lt;br&gt;+ &amp;nbsp; ctx-&amp;gt;processor = processor;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; return TRUE;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -338,92 +342,36 @@ parse_opt_writemask(
&lt;br&gt;&amp;nbsp; &amp;nbsp; return TRUE;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-/* &amp;lt;register_file_bracket&amp;gt; ::= &amp;lt;file&amp;gt; `['
&lt;br&gt;- */
&lt;br&gt;&amp;nbsp;static boolean
&lt;br&gt;-parse_register_file_bracket(
&lt;br&gt;- &amp;nbsp; struct translate_ctx *ctx,
&lt;br&gt;- &amp;nbsp; uint *file )
&lt;br&gt;-{
&lt;br&gt;- &amp;nbsp; if (!parse_file( &amp;ctx-&amp;gt;cur, file )) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;report_error( ctx, &amp;quot;Unknown register file&amp;quot; );
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;- &amp;nbsp; }
&lt;br&gt;- &amp;nbsp; eat_opt_white( &amp;ctx-&amp;gt;cur );
&lt;br&gt;- &amp;nbsp; if (*ctx-&amp;gt;cur != '[') {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;report_error( ctx, &amp;quot;Expected `['&amp;quot; );
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;- &amp;nbsp; }
&lt;br&gt;- &amp;nbsp; ctx-&amp;gt;cur++;
&lt;br&gt;- &amp;nbsp; return TRUE;
&lt;br&gt;-}
&lt;br&gt;+parse_register_dst( struct translate_ctx *ctx,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uint *file,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int *index );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-/* &amp;lt;register_file_bracket_index&amp;gt; ::= &amp;lt;register_file_bracket&amp;gt; &amp;lt;uint&amp;gt;
&lt;br&gt;- */
&lt;br&gt;-static boolean
&lt;br&gt;-parse_register_file_bracket_index(
&lt;br&gt;- &amp;nbsp; struct translate_ctx *ctx,
&lt;br&gt;- &amp;nbsp; uint *file,
&lt;br&gt;- &amp;nbsp; int *index )
&lt;br&gt;-{
&lt;br&gt;- &amp;nbsp; uint uindex;
&lt;br&gt;+struct parsed_src_bracket {
&lt;br&gt;+ &amp;nbsp; int index;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; if (!parse_register_file_bracket( ctx, file ))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;- &amp;nbsp; eat_opt_white( &amp;ctx-&amp;gt;cur );
&lt;br&gt;- &amp;nbsp; if (!parse_uint( &amp;ctx-&amp;gt;cur, &amp;uindex )) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;report_error( ctx, &amp;quot;Expected literal unsigned integer&amp;quot; );
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;- &amp;nbsp; }
&lt;br&gt;- &amp;nbsp; *index = (int) uindex;
&lt;br&gt;- &amp;nbsp; return TRUE;
&lt;br&gt;-}
&lt;br&gt;+ &amp;nbsp; uint ind_file;
&lt;br&gt;+ &amp;nbsp; int ind_index;
&lt;br&gt;+ &amp;nbsp; uint ind_comp;
&lt;br&gt;+};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-/* Parse destination register operand.
&lt;br&gt;- * &amp;nbsp; &amp;nbsp;&amp;lt;register_dst&amp;gt; ::= &amp;lt;register_file_bracket_index&amp;gt; `]'
&lt;br&gt;- */
&lt;br&gt;-static boolean
&lt;br&gt;-parse_register_dst(
&lt;br&gt;- &amp;nbsp; struct translate_ctx *ctx,
&lt;br&gt;- &amp;nbsp; uint *file,
&lt;br&gt;- &amp;nbsp; int *index )
&lt;br&gt;-{
&lt;br&gt;- &amp;nbsp; if (!parse_register_file_bracket_index( ctx, file, index ))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;- &amp;nbsp; eat_opt_white( &amp;ctx-&amp;gt;cur );
&lt;br&gt;- &amp;nbsp; if (*ctx-&amp;gt;cur != ']') {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;report_error( ctx, &amp;quot;Expected `]'&amp;quot; );
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;- &amp;nbsp; }
&lt;br&gt;- &amp;nbsp; ctx-&amp;gt;cur++;
&lt;br&gt;- &amp;nbsp; return TRUE;
&lt;br&gt;-}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-/* Parse source register operand.
&lt;br&gt;- * &amp;nbsp; &amp;nbsp;&amp;lt;register_src&amp;gt; ::= &amp;lt;register_file_bracket_index&amp;gt; `]' |
&lt;br&gt;- * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;register_file_bracket&amp;gt; &amp;lt;register_dst&amp;gt; [`.' (`x' | `y' | `z' | `w')] `]' |
&lt;br&gt;- * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;register_file_bracket&amp;gt; &amp;lt;register_dst&amp;gt; [`.' (`x' | `y' | `z' | `w')] `+' &amp;lt;uint&amp;gt; `]' |
&lt;br&gt;- * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;register_file_bracket&amp;gt; &amp;lt;register_dst&amp;gt; [`.' (`x' | `y' | `z' | `w')] `-' &amp;lt;uint&amp;gt; `]'
&lt;br&gt;- */
&lt;br&gt;&amp;nbsp;static boolean
&lt;br&gt;-parse_register_src(
&lt;br&gt;+parse_register_src_bracket(
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct translate_ctx *ctx,
&lt;br&gt;- &amp;nbsp; uint *file,
&lt;br&gt;- &amp;nbsp; int *index,
&lt;br&gt;- &amp;nbsp; uint *ind_file,
&lt;br&gt;- &amp;nbsp; int *ind_index,
&lt;br&gt;- &amp;nbsp; uint *ind_comp)
&lt;br&gt;+ &amp;nbsp; struct parsed_src_bracket *brackets)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; const char *cur;
&lt;br&gt;&amp;nbsp; &amp;nbsp; uint uindex;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; *ind_comp = TGSI_SWIZZLE_X;
&lt;br&gt;- &amp;nbsp; if (!parse_register_file_bracket( ctx, file ))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;+ &amp;nbsp; memset(brackets, 0, sizeof(struct parsed_src_bracket));
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; eat_opt_white( &amp;ctx-&amp;gt;cur );
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; cur = ctx-&amp;gt;cur;
&lt;br&gt;- &amp;nbsp; if (parse_file( &amp;cur, ind_file )) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!parse_register_dst( ctx, ind_file, ind_index ))
&lt;br&gt;+ &amp;nbsp; if (parse_file( &amp;cur, &amp;brackets-&amp;gt;ind_file )) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!parse_register_dst( ctx, &amp;brackets-&amp;gt;ind_file,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;brackets-&amp;gt;ind_index ))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return FALSE;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;eat_opt_white( &amp;ctx-&amp;gt;cur );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -433,16 +381,16 @@ parse_register_src(
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; switch (uprcase(*ctx-&amp;gt;cur)) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 'X':
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*ind_comp = TGSI_SWIZZLE_X;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;brackets-&amp;gt;ind_comp = TGSI_SWIZZLE_X;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 'Y':
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*ind_comp = TGSI_SWIZZLE_Y;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;brackets-&amp;gt;ind_comp = TGSI_SWIZZLE_Y;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 'Z':
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*ind_comp = TGSI_SWIZZLE_Z;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;brackets-&amp;gt;ind_comp = TGSI_SWIZZLE_Z;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case 'W':
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*ind_comp = TGSI_SWIZZLE_W;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;brackets-&amp;gt;ind_comp = TGSI_SWIZZLE_W;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; default:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;report_error(ctx, &amp;quot;Expected indirect register swizzle component `x', `y', `z' or `w'&amp;quot;);
&lt;br&gt;@@ -463,12 +411,12 @@ parse_register_src(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (negate)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*index = -(int) uindex;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;brackets-&amp;gt;index = -(int) uindex;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*index = (int) uindex;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;brackets-&amp;gt;index = (int) uindex;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *index = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; brackets-&amp;gt;index = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; else {
&lt;br&gt;@@ -476,9 +424,9 @@ parse_register_src(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; report_error( ctx, &amp;quot;Expected literal unsigned integer&amp;quot; );
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return FALSE;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;*index = (int) uindex;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;*ind_file = TGSI_FILE_NULL;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;*ind_index = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;brackets-&amp;gt;index = (int) uindex;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;brackets-&amp;gt;ind_file = TGSI_FILE_NULL;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;brackets-&amp;gt;ind_index = 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; eat_opt_white( &amp;ctx-&amp;gt;cur );
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (*ctx-&amp;gt;cur != ']') {
&lt;br&gt;@@ -489,20 +437,123 @@ parse_register_src(
&lt;br&gt;&amp;nbsp; &amp;nbsp; return TRUE;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-/* Parse register declaration.
&lt;br&gt;- * &amp;nbsp; &amp;nbsp;&amp;lt;register_dcl&amp;gt; ::= &amp;lt;register_file_bracket_index&amp;gt; `]' |
&lt;br&gt;- * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;register_file_bracket_index&amp;gt; `..' &amp;lt;index&amp;gt; `]'
&lt;br&gt;+static boolean
&lt;br&gt;+parse_opt_register_src_bracket(
&lt;br&gt;+ &amp;nbsp; struct translate_ctx *ctx,
&lt;br&gt;+ &amp;nbsp; struct parsed_src_bracket *brackets,
&lt;br&gt;+ &amp;nbsp; int *parsed_brackets)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; const char *cur = ctx-&amp;gt;cur;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; *parsed_brackets = 0;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; eat_opt_white( &amp;cur );
&lt;br&gt;+ &amp;nbsp; if (cur[0] == '[') {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;++cur;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx-&amp;gt;cur = cur;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!parse_register_src_bracket(ctx, brackets))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return FALSE;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;*parsed_brackets = 1;
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; return TRUE;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+/* &amp;lt;register_file_bracket&amp;gt; ::= &amp;lt;file&amp;gt; `['
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;static boolean
&lt;br&gt;-parse_register_dcl(
&lt;br&gt;+parse_register_file_bracket(
&lt;br&gt;+ &amp;nbsp; struct translate_ctx *ctx,
&lt;br&gt;+ &amp;nbsp; uint *file )
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; if (!parse_file( &amp;ctx-&amp;gt;cur, file )) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;report_error( ctx, &amp;quot;Unknown register file&amp;quot; );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; eat_opt_white( &amp;ctx-&amp;gt;cur );
&lt;br&gt;+ &amp;nbsp; if (*ctx-&amp;gt;cur != '[') {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;report_error( ctx, &amp;quot;Expected `['&amp;quot; );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; ctx-&amp;gt;cur++;
&lt;br&gt;+ &amp;nbsp; return TRUE;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+/* &amp;lt;register_file_bracket_index&amp;gt; ::= &amp;lt;register_file_bracket&amp;gt; &amp;lt;uint&amp;gt;
&lt;br&gt;+ */
&lt;br&gt;+static boolean
&lt;br&gt;+parse_register_file_bracket_index(
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct translate_ctx *ctx,
&lt;br&gt;&amp;nbsp; &amp;nbsp; uint *file,
&lt;br&gt;- &amp;nbsp; int *first,
&lt;br&gt;- &amp;nbsp; int *last )
&lt;br&gt;+ &amp;nbsp; int *index )
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp; if (!parse_register_file_bracket_index( ctx, file, first ))
&lt;br&gt;+ &amp;nbsp; uint uindex;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; if (!parse_register_file_bracket( ctx, file ))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;&amp;nbsp; &amp;nbsp; eat_opt_white( &amp;ctx-&amp;gt;cur );
&lt;br&gt;+ &amp;nbsp; if (!parse_uint( &amp;ctx-&amp;gt;cur, &amp;uindex )) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;report_error( ctx, &amp;quot;Expected literal unsigned integer&amp;quot; );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; *index = (int) uindex;
&lt;br&gt;+ &amp;nbsp; return TRUE;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+/* Parse source register operand.
&lt;br&gt;+ * &amp;nbsp; &amp;nbsp;&amp;lt;register_src&amp;gt; ::= &amp;lt;register_file_bracket_index&amp;gt; `]' |
&lt;br&gt;+ * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;register_file_bracket&amp;gt; &amp;lt;register_dst&amp;gt; [`.' (`x' | `y' | `z' | `w')] `]' |
&lt;br&gt;+ * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;register_file_bracket&amp;gt; &amp;lt;register_dst&amp;gt; [`.' (`x' | `y' | `z' | `w')] `+' &amp;lt;uint&amp;gt; `]' |
&lt;br&gt;+ * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;register_file_bracket&amp;gt; &amp;lt;register_dst&amp;gt; [`.' (`x' | `y' | `z' | `w')] `-' &amp;lt;uint&amp;gt; `]'
&lt;br&gt;+ */
&lt;br&gt;+static boolean
&lt;br&gt;+parse_register_src(
&lt;br&gt;+ &amp;nbsp; struct translate_ctx *ctx,
&lt;br&gt;+ &amp;nbsp; uint *file,
&lt;br&gt;+ &amp;nbsp; struct parsed_src_bracket *brackets)
&lt;br&gt;+{
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; brackets-&amp;gt;ind_comp = TGSI_SWIZZLE_X;
&lt;br&gt;+ &amp;nbsp; if (!parse_register_file_bracket( ctx, file ))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;+ &amp;nbsp; if (!parse_register_src_bracket( ctx, brackets ))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; return FALSE;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; return TRUE;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+struct parsed_dcl_bracket {
&lt;br&gt;+ &amp;nbsp; uint first;
&lt;br&gt;+ &amp;nbsp; uint last;
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+static boolean
&lt;br&gt;+parse_register_dcl_bracket(
&lt;br&gt;+ &amp;nbsp; struct translate_ctx *ctx,
&lt;br&gt;+ &amp;nbsp; struct parsed_dcl_bracket *bracket)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; uint uindex;
&lt;br&gt;+ &amp;nbsp; memset(bracket, 0, sizeof(struct parsed_dcl_bracket));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; eat_opt_white( &amp;ctx-&amp;gt;cur );
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; if (!parse_uint( &amp;ctx-&amp;gt;cur, &amp;uindex )) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;/* it can be an empty bracket [] which means its range
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; * is from 0 to some implied size */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (ctx-&amp;gt;cur[0] == ']' &amp;&amp; ctx-&amp;gt;implied_array_size != 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bracket-&amp;gt;first = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bracket-&amp;gt;last = ctx-&amp;gt;implied_array_size - 1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; goto cleanup;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;report_error( ctx, &amp;quot;Expected literal unsigned integer&amp;quot; );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; bracket-&amp;gt;first = (int) uindex;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; eat_opt_white( &amp;ctx-&amp;gt;cur );
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (ctx-&amp;gt;cur[0] == '.' &amp;&amp; ctx-&amp;gt;cur[1] == '.') {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uint uindex;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -512,12 +563,14 @@ parse_register_dcl(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; report_error( ctx, &amp;quot;Expected literal integer&amp;quot; );
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return FALSE;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;*last = (int) uindex;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;bracket-&amp;gt;last = (int) uindex;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;eat_opt_white( &amp;ctx-&amp;gt;cur );
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;*last = *first;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;bracket-&amp;gt;last = bracket-&amp;gt;first;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;+
&lt;br&gt;+cleanup:
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (*ctx-&amp;gt;cur != ']') {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;report_error( ctx, &amp;quot;Expected `]' or `..'&amp;quot; );
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;@@ -526,6 +579,70 @@ parse_register_dcl(
&lt;br&gt;&amp;nbsp; &amp;nbsp; return TRUE;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+/* Parse register declaration.
&lt;br&gt;+ * &amp;nbsp; &amp;nbsp;&amp;lt;register_dcl&amp;gt; ::= &amp;lt;register_file_bracket_index&amp;gt; `]' |
&lt;br&gt;+ * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;register_file_bracket_index&amp;gt; `..' &amp;lt;index&amp;gt; `]'
&lt;br&gt;+ */
&lt;br&gt;+static boolean
&lt;br&gt;+parse_register_dcl(
&lt;br&gt;+ &amp;nbsp; struct translate_ctx *ctx,
&lt;br&gt;+ &amp;nbsp; uint *file,
&lt;br&gt;+ &amp;nbsp; struct parsed_dcl_bracket *brackets,
&lt;br&gt;+ &amp;nbsp; int *num_brackets)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; const char *cur;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; *num_brackets = 0;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; if (!parse_register_file_bracket( ctx, file ))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;+ &amp;nbsp; if (!parse_register_dcl_bracket( ctx, &amp;brackets[0] ))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; *num_brackets = 1;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; cur = ctx-&amp;gt;cur;
&lt;br&gt;+ &amp;nbsp; eat_opt_white( &amp;cur );
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; if (cur[0] == '[') {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;++cur;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx-&amp;gt;cur = cur;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!parse_register_dcl_bracket( ctx, &amp;brackets[1] ))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return FALSE;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;/* for geometry shader we don't really care about
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; * the first brackets it's always the size of the
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; * input primitive. so we want to declare just
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; * the index relevant to the semantics which is in
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; * the second bracket */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (ctx-&amp;gt;processor == TGSI_PROCESSOR_GEOMETRY) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; brackets[0] = brackets[1];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;*num_brackets = 2;
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; return TRUE;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+/* Parse destination register operand.
&lt;br&gt;+ * &amp;nbsp; &amp;nbsp;&amp;lt;register_dst&amp;gt; ::= &amp;lt;register_file_bracket_index&amp;gt; `]'
&lt;br&gt;+ */
&lt;br&gt;+static boolean
&lt;br&gt;+parse_register_dst(
&lt;br&gt;+ &amp;nbsp; struct translate_ctx *ctx,
&lt;br&gt;+ &amp;nbsp; uint *file,
&lt;br&gt;+ &amp;nbsp; int *index )
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; if (!parse_register_file_bracket_index( ctx, file, index ))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;+ &amp;nbsp; eat_opt_white( &amp;ctx-&amp;gt;cur );
&lt;br&gt;+ &amp;nbsp; if (*ctx-&amp;gt;cur != ']') {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;report_error( ctx, &amp;quot;Expected `]'&amp;quot; );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; ctx-&amp;gt;cur++;
&lt;br&gt;+ &amp;nbsp; return TRUE;
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static boolean
&lt;br&gt;&amp;nbsp;parse_dst_operand(
&lt;br&gt;@@ -595,37 +712,44 @@ parse_src_operand(
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct tgsi_full_src_register *src )
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; uint file;
&lt;br&gt;- &amp;nbsp; int index;
&lt;br&gt;- &amp;nbsp; uint ind_file;
&lt;br&gt;- &amp;nbsp; int ind_index;
&lt;br&gt;- &amp;nbsp; uint ind_comp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; uint swizzle[4];
&lt;br&gt;&amp;nbsp; &amp;nbsp; boolean parsed_swizzle;
&lt;br&gt;+ &amp;nbsp; struct parsed_src_bracket bracket[2];
&lt;br&gt;+ &amp;nbsp; int parsed_opt_brackets;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (*ctx-&amp;gt;cur == '-') {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx-&amp;gt;cur++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;eat_opt_white( &amp;ctx-&amp;gt;cur );
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Register.Negate = 1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;- &amp;nbsp; 
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (*ctx-&amp;gt;cur == '|') {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx-&amp;gt;cur++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;eat_opt_white( &amp;ctx-&amp;gt;cur );
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Register.Absolute = 1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; if (!parse_register_src(ctx, &amp;file, &amp;index, &amp;ind_file, &amp;ind_index, &amp;ind_comp))
&lt;br&gt;+ &amp;nbsp; if (!parse_register_src(ctx, &amp;file, &amp;bracket[0]))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;+ &amp;nbsp; if (!parse_opt_register_src_bracket(ctx, &amp;bracket[1], &amp;parsed_opt_brackets))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; src-&amp;gt;Register.File = file;
&lt;br&gt;- &amp;nbsp; src-&amp;gt;Register.Index = index;
&lt;br&gt;- &amp;nbsp; if (ind_file != TGSI_FILE_NULL) {
&lt;br&gt;+ &amp;nbsp; src-&amp;gt;Register.Index = bracket[0].index;
&lt;br&gt;+ &amp;nbsp; if (bracket[0].ind_file != TGSI_FILE_NULL) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Register.Indirect = 1;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Indirect.File = ind_file;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Indirect.Index = ind_index;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Indirect.SwizzleX = ind_comp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Indirect.SwizzleY = ind_comp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Indirect.SwizzleZ = ind_comp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Indirect.SwizzleW = ind_comp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Indirect.File = bracket[0].ind_file;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Indirect.Index = bracket[0].ind_index;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Indirect.SwizzleX = bracket[0].ind_comp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Indirect.SwizzleY = bracket[0].ind_comp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Indirect.SwizzleZ = bracket[0].ind_comp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Indirect.SwizzleW = bracket[0].ind_comp;
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; if (parsed_opt_brackets) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Register.Dimension = 1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Dimension.Indirect = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Dimension.Dimension = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Dimension.Index = bracket[1].index;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* Parse optional swizzle.
&lt;br&gt;@@ -820,8 +944,8 @@ static boolean parse_declaration( struct translate_ctx *ctx )
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct tgsi_full_declaration decl;
&lt;br&gt;&amp;nbsp; &amp;nbsp; uint file;
&lt;br&gt;- &amp;nbsp; int first;
&lt;br&gt;- &amp;nbsp; int last;
&lt;br&gt;+ &amp;nbsp; struct parsed_dcl_bracket brackets[2];
&lt;br&gt;+ &amp;nbsp; int num_brackets;
&lt;br&gt;&amp;nbsp; &amp;nbsp; uint writemask;
&lt;br&gt;&amp;nbsp; &amp;nbsp; const char *cur;
&lt;br&gt;&amp;nbsp; &amp;nbsp; uint advance;
&lt;br&gt;@@ -833,7 +957,7 @@ static boolean parse_declaration( struct translate_ctx *ctx )
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;report_error( ctx, &amp;quot;Syntax error&amp;quot; );
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;- &amp;nbsp; if (!parse_register_dcl( ctx, &amp;file, &amp;first, &amp;last ))
&lt;br&gt;+ &amp;nbsp; if (!parse_register_dcl( ctx, &amp;file, brackets, &amp;num_brackets))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (!parse_opt_writemask( ctx, &amp;writemask ))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return FALSE;
&lt;br&gt;@@ -841,8 +965,8 @@ static boolean parse_declaration( struct translate_ctx *ctx )
&lt;br&gt;&amp;nbsp; &amp;nbsp; decl = tgsi_default_full_declaration();
&lt;br&gt;&amp;nbsp; &amp;nbsp; decl.Declaration.File = file;
&lt;br&gt;&amp;nbsp; &amp;nbsp; decl.Declaration.UsageMask = writemask;
&lt;br&gt;- &amp;nbsp; decl.Range.First = first;
&lt;br&gt;- &amp;nbsp; decl.Range.Last = last;
&lt;br&gt;+ &amp;nbsp; decl.Range.First = brackets[0].first;
&lt;br&gt;+ &amp;nbsp; decl.Range.Last = brackets[0].last;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; cur = ctx-&amp;gt;cur;
&lt;br&gt;&amp;nbsp; &amp;nbsp; eat_opt_white( &amp;cur );
&lt;br&gt;@@ -1059,6 +1183,11 @@ static boolean parse_property( struct translate_ctx *ctx )
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; report_error( ctx, &amp;quot;Unknown primitive name as property!&amp;quot; );
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return FALSE;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (property_name == TGSI_PROPERTY_GS_INPUT_PRIM &amp;&amp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx-&amp;gt;processor == TGSI_PROCESSOR_GEOMETRY) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ctx-&amp;gt;implied_array_size =
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pipe_vertices_per_primitive(values[0]);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; default:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!parse_uint(&amp;ctx-&amp;gt;cur, &amp;values[0] )) {
&lt;br&gt;-- 
&lt;br&gt;1.6.5.7
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;tt&gt;[0005-gallium-add-an-inline-that-returns-number-of-vertice.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From 2b83aff8e805ac2bd8ba50660b54091288971e5c Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Zack Rusin &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914348&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;zackr@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Wed, 23 Dec 2009 12:39:21 -0500
&lt;br&gt;Subject: [PATCH 05/12] gallium: add an inline that returns number of vertices per primitive
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;src/gallium/include/pipe/p_inlines.h | &amp;nbsp; 32 ++++++++++++++++++++++++++++++++
&lt;br&gt;&amp;nbsp;1 files changed, 32 insertions(+), 0 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/src/gallium/include/pipe/p_inlines.h b/src/gallium/include/pipe/p_inlines.h
&lt;br&gt;index 5fbd62a..95ec55d 100644
&lt;br&gt;--- a/src/gallium/include/pipe/p_inlines.h
&lt;br&gt;+++ b/src/gallium/include/pipe/p_inlines.h
&lt;br&gt;@@ -192,6 +192,38 @@ pipe_transfer_buffer_flags( struct pipe_transfer *transf )
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static INLINE unsigned
&lt;br&gt;+pipe_vertices_per_primitive(int primitive)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; switch(primitive) {
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_POINTS:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return 1;
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_LINES:
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_LINE_LOOP:
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_LINE_STRIP:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return 2;
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_TRIANGLES:
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_TRIANGLE_STRIP:
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_TRIANGLE_FAN:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return 3;
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_LINES_ADJACENCY:
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_LINE_STRIP_ADJACENCY:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return 4;
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_TRIANGLES_ADJACENCY:
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return 6;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; /* following primitives should never be used
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;* with geometry shaders */
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_POLYGON:
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_QUADS:
&lt;br&gt;+ &amp;nbsp; case PIPE_PRIM_QUAD_STRIP:
&lt;br&gt;+ &amp;nbsp; default:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;debug_printf(&amp;quot;Unrecognized geometry shader primitive&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return 3;
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;#ifdef __cplusplus
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;#endif
&lt;br&gt;-- 
&lt;br&gt;1.6.5.7
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;tt&gt;[0008-softpipe-make-it-possible-to-dump-geometry-shader-fr.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From b545d1eded8ba05a0bd058a40081950b20cc28d1 Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Zack Rusin &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914348&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;zackr@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Wed, 23 Dec 2009 13:30:12 -0500
&lt;br&gt;Subject: [PATCH 08/12] softpipe: make it possible to dump geometry shader from the softpipe
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;src/gallium/drivers/softpipe/sp_context.c &amp;nbsp;| &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;src/gallium/drivers/softpipe/sp_context.h &amp;nbsp;| &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;src/gallium/drivers/softpipe/sp_state_fs.c | &amp;nbsp; &amp;nbsp;4 ++++
&lt;br&gt;&amp;nbsp;3 files changed, 6 insertions(+), 0 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/src/gallium/drivers/softpipe/sp_context.c b/src/gallium/drivers/softpipe/sp_context.c
&lt;br&gt;index 0c890cb..82173a3 100644
&lt;br&gt;--- a/src/gallium/drivers/softpipe/sp_context.c
&lt;br&gt;+++ b/src/gallium/drivers/softpipe/sp_context.c
&lt;br&gt;@@ -191,6 +191,7 @@ softpipe_create( struct pipe_screen *screen )
&lt;br&gt;&amp;nbsp;#endif
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; softpipe-&amp;gt;dump_fs = debug_get_bool_option( &amp;quot;GALLIUM_DUMP_FS&amp;quot;, FALSE );
&lt;br&gt;+ &amp;nbsp; softpipe-&amp;gt;dump_gs = debug_get_bool_option( &amp;quot;SOFTPIPE_DUMP_GS&amp;quot;, FALSE );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; softpipe-&amp;gt;pipe.winsys = screen-&amp;gt;winsys;
&lt;br&gt;&amp;nbsp; &amp;nbsp; softpipe-&amp;gt;pipe.screen = screen;
&lt;br&gt;diff --git a/src/gallium/drivers/softpipe/sp_context.h b/src/gallium/drivers/softpipe/sp_context.h
&lt;br&gt;index 159547e..6a89bd4 100644
&lt;br&gt;--- a/src/gallium/drivers/softpipe/sp_context.h
&lt;br&gt;+++ b/src/gallium/drivers/softpipe/sp_context.h
&lt;br&gt;@@ -148,6 +148,7 @@ struct softpipe_context {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; unsigned use_sse : 1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; unsigned dump_fs : 1;
&lt;br&gt;+ &amp;nbsp; unsigned dump_gs : 1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; unsigned no_rast : 1;
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/src/gallium/drivers/softpipe/sp_state_fs.c b/src/gallium/drivers/softpipe/sp_state_fs.c
&lt;br&gt;index b904bde..acec62d 100644
&lt;br&gt;--- a/src/gallium/drivers/softpipe/sp_state_fs.c
&lt;br&gt;+++ b/src/gallium/drivers/softpipe/sp_state_fs.c
&lt;br&gt;@@ -177,6 +177,10 @@ softpipe_create_gs_state(struct pipe_context *pipe,
&lt;br&gt;&amp;nbsp; &amp;nbsp; if (state == NULL )
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;goto fail;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; /* debug */
&lt;br&gt;+ &amp;nbsp; if (softpipe-&amp;gt;dump_gs)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;tgsi_dump(templ-&amp;gt;tokens, 0);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; /* copy shader tokens, the ones passed in will go away.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;nbsp; &amp;nbsp; state-&amp;gt;shader.tokens = tgsi_dup_tokens(templ-&amp;gt;tokens);
&lt;br&gt;-- 
&lt;br&gt;1.6.5.7
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;tt&gt;[0009-python-fix-python-state-tracker-after-some-latest-ch.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From 76b3f69fd5d25d22483e8461e79b0f40796fe6fa Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Zack Rusin &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914348&amp;i=8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;zackr@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Wed, 23 Dec 2009 13:43:30 -0500
&lt;br&gt;Subject: [PATCH 09/12] python: fix python state tracker after some latest changes
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;src/gallium/state_trackers/python/gallium.i &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;src/gallium/state_trackers/python/p_texture.i | &amp;nbsp; &amp;nbsp;8 ++++----
&lt;br&gt;&amp;nbsp;2 files changed, 5 insertions(+), 4 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/src/gallium/state_trackers/python/gallium.i b/src/gallium/state_trackers/python/gallium.i
&lt;br&gt;index 8e323f4..96b13c2 100644
&lt;br&gt;--- a/src/gallium/state_trackers/python/gallium.i
&lt;br&gt;+++ b/src/gallium/state_trackers/python/gallium.i
&lt;br&gt;@@ -46,6 +46,7 @@
&lt;br&gt;&amp;nbsp;#include &amp;quot;util/u_draw_quad.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;util/u_tile.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;util/u_math.h&amp;quot;
&lt;br&gt;+#include &amp;quot;util/u_format.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;util/u_memory.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;tgsi/tgsi_text.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;tgsi/tgsi_dump.h&amp;quot;
&lt;br&gt;diff --git a/src/gallium/state_trackers/python/p_texture.i b/src/gallium/state_trackers/python/p_texture.i
&lt;br&gt;index 1de7f86..761587d 100644
&lt;br&gt;--- a/src/gallium/state_trackers/python/p_texture.i
&lt;br&gt;+++ b/src/gallium/state_trackers/python/p_texture.i
&lt;br&gt;@@ -132,8 +132,8 @@ struct st_surface
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;struct pipe_transfer *transfer;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned stride;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;stride = pf_get_stride(texture-&amp;gt;format, w);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;*LENGTH = pf_get_nblocksy(texture-&amp;gt;format, h) * stride;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;stride = util_format_get_stride(texture-&amp;gt;format, w);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;*LENGTH = util_format_get_nblocksy(texture-&amp;gt;format, h) * stride;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*STRING = (char *) malloc(*LENGTH);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!*STRING)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return;
&lt;br&gt;@@ -159,9 +159,9 @@ struct st_surface
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;struct pipe_transfer *transfer;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(stride == 0)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; stride = pf_get_stride(texture-&amp;gt;format, w);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; stride = util_format_get_stride(texture-&amp;gt;format, w);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if(LENGTH &amp;lt; pf_get_nblocksy(texture-&amp;gt;format, h) * stride)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if(LENGTH &amp;lt; util_format_get_nblocksy(texture-&amp;gt;format, h) * stride)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SWIG_exception(SWIG_ValueError, &amp;quot;offset must be smaller than buffer size&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;transfer = screen-&amp;gt;get_tex_transfer(screen,
&lt;br&gt;-- 
&lt;br&gt;1.6.5.7
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;tt&gt;[0010-tgsi-fix-property-parsing-building.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From 6df70e18ff045062dac25ffaa1f8788365ba117d Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Zack Rusin &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914348&amp;i=9&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;zackr@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Wed, 23 Dec 2009 14:39:16 -0500
&lt;br&gt;Subject: [PATCH 10/12] tgsi: fix property parsing/building
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/tgsi/tgsi_build.c | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/tgsi/tgsi_text.c &amp;nbsp;| &amp;nbsp; 10 ++++++----
&lt;br&gt;&amp;nbsp;2 files changed, 7 insertions(+), 5 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/src/gallium/auxiliary/tgsi/tgsi_build.c b/src/gallium/auxiliary/tgsi/tgsi_build.c
&lt;br&gt;index 92903fe..de9cbc8 100644
&lt;br&gt;--- a/src/gallium/auxiliary/tgsi/tgsi_build.c
&lt;br&gt;+++ b/src/gallium/auxiliary/tgsi/tgsi_build.c
&lt;br&gt;@@ -1025,7 +1025,7 @@ tgsi_build_full_property(
&lt;br&gt;&amp;nbsp; &amp;nbsp; size++;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; *property = tgsi_build_property(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;TGSI_PROPERTY_GS_INPUT_PRIM,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;full_prop-&amp;gt;Property.PropertyName,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;header );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; assert( full_prop-&amp;gt;Property.NrTokens &amp;lt;= 8 + 1 );
&lt;br&gt;diff --git a/src/gallium/auxiliary/tgsi/tgsi_text.c b/src/gallium/auxiliary/tgsi/tgsi_text.c
&lt;br&gt;index 80d3a1e..ca247a1 100644
&lt;br&gt;--- a/src/gallium/auxiliary/tgsi/tgsi_text.c
&lt;br&gt;+++ b/src/gallium/auxiliary/tgsi/tgsi_text.c
&lt;br&gt;@@ -62,18 +62,20 @@ static boolean uprcase( char c )
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/*
&lt;br&gt;- * Ignore case of str1 and assume str2 is already uppercase.
&lt;br&gt;+ * Ignore case of str1 and assume str1 is already uppercase.
&lt;br&gt;&amp;nbsp; * Return TRUE iff str1 and str2 are equal.
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;static int
&lt;br&gt;&amp;nbsp;streq_nocase_uprcase(const char *str1,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *str2)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp; while (*str1 &amp;&amp; uprcase(*str1) == *str2) {
&lt;br&gt;+ &amp;nbsp; while (*str1 &amp;&amp; *str2) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (*str1 != uprcase(*str2))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return FALSE;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;str1++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;str2++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;- &amp;nbsp; return *str1 == *str2;
&lt;br&gt;+ &amp;nbsp; return TRUE;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static boolean str_match_no_case( const char **pcur, const char *str )
&lt;br&gt;@@ -1166,7 +1168,7 @@ static boolean parse_property( struct translate_ctx *ctx )
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; for (property_name = 0; property_name &amp;lt; TGSI_PROPERTY_COUNT;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;++property_name) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (streq_nocase_uprcase(id, property_names[property_name])) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (streq_nocase_uprcase(property_names[property_name], id)) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;-- 
&lt;br&gt;1.6.5.7
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;tt&gt;[0011-tgsi-dump-the-indices-correctly-when-dealing-with-2d.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From 44b94c491c62ab868df5748bc3a2df9f3f04f81f Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Zack Rusin &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914348&amp;i=10&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;zackr@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Wed, 23 Dec 2009 15:41:47 -0500
&lt;br&gt;Subject: [PATCH 11/12] tgsi: dump the indices correctly when dealing with 2d arrays
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/tgsi/tgsi_dump.c | &amp;nbsp; 70 +++++++++++++++++++++++---------
&lt;br&gt;&amp;nbsp;1 files changed, 50 insertions(+), 20 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/src/gallium/auxiliary/tgsi/tgsi_dump.c b/src/gallium/auxiliary/tgsi/tgsi_dump.c
&lt;br&gt;index 1f6b1d8..5bfe019 100644
&lt;br&gt;--- a/src/gallium/auxiliary/tgsi/tgsi_dump.c
&lt;br&gt;+++ b/src/gallium/auxiliary/tgsi/tgsi_dump.c
&lt;br&gt;@@ -176,7 +176,7 @@ static const char *primitive_names[] =
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;-_dump_register(
&lt;br&gt;+_dump_register_decl(
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct dump_ctx *ctx,
&lt;br&gt;&amp;nbsp; &amp;nbsp; uint file,
&lt;br&gt;&amp;nbsp; &amp;nbsp; int first,
&lt;br&gt;@@ -199,6 +199,52 @@ _dump_register(
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;+_dump_register_dst(
&lt;br&gt;+ &amp;nbsp; struct dump_ctx *ctx,
&lt;br&gt;+ &amp;nbsp; uint file,
&lt;br&gt;+ &amp;nbsp; int index)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; ENM( file, file_names );
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; CHR( '[' );
&lt;br&gt;+ &amp;nbsp; SID( index );
&lt;br&gt;+ &amp;nbsp; CHR( ']' );
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;+_dump_register_src(
&lt;br&gt;+ &amp;nbsp; struct dump_ctx *ctx,
&lt;br&gt;+ &amp;nbsp; const struct tgsi_full_src_register *src )
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; if (src-&amp;gt;Register.Indirect) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ENM( src-&amp;gt;Register.File, file_names );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;CHR( '[' );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ENM( src-&amp;gt;Indirect.File, file_names );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;CHR( '[' );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;SID( src-&amp;gt;Indirect.Index );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;TXT( &amp;quot;].&amp;quot; );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ENM( src-&amp;gt;Indirect.SwizzleX, swizzle_names );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (src-&amp;gt;Register.Index != 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (src-&amp;gt;Register.Index &amp;gt; 0)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CHR( '+' );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SID( src-&amp;gt;Register.Index );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;CHR( ']' );
&lt;br&gt;+ &amp;nbsp; } else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ENM( src-&amp;gt;Register.File, file_names );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;CHR( '[' );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;SID( src-&amp;gt;Register.Index );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;CHR( ']' );
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; if (src-&amp;gt;Register.Dimension) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;CHR( '[' );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;SID( src-&amp;gt;Dimension.Index );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;CHR( ']' );
&lt;br&gt;+ &amp;nbsp; }
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;&amp;nbsp;_dump_register_ind(
&lt;br&gt;&amp;nbsp; &amp;nbsp; struct dump_ctx *ctx,
&lt;br&gt;&amp;nbsp; &amp;nbsp; uint file,
&lt;br&gt;@@ -252,7 +298,7 @@ iter_declaration(
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; TXT( &amp;quot;DCL &amp;quot; );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; _dump_register(
&lt;br&gt;+ &amp;nbsp; _dump_register_decl(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;decl-&amp;gt;Declaration.File,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;decl-&amp;gt;Range.First,
&lt;br&gt;@@ -443,10 +489,9 @@ iter_instruction(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dst-&amp;gt;Indirect.SwizzleX );
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _dump_register(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _dump_register_dst(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dst-&amp;gt;Register.File,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dst-&amp;gt;Register.Index,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dst-&amp;gt;Register.Index );
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_dump_writemask( ctx, dst-&amp;gt;Register.WriteMask );
&lt;br&gt;@@ -466,22 +511,7 @@ iter_instruction(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (src-&amp;gt;Register.Absolute)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CHR( '|' );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (src-&amp;gt;Register.Indirect) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _dump_register_ind(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Register.File,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Register.Index,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Indirect.File,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Indirect.Index,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Indirect.SwizzleX );
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _dump_register(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Register.File,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Register.Index,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Register.Index );
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_dump_register_src(ctx, src);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (src-&amp;gt;Register.SwizzleX != TGSI_SWIZZLE_X ||
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src-&amp;gt;Register.SwizzleY != TGSI_SWIZZLE_Y ||
&lt;br&gt;-- 
&lt;br&gt;1.6.5.7
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;tt&gt;[0012-draw-tgsi-fix-geometry-shader-input-output-swizzling.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From 180ce736f28e4dca79b9cc96b725d0360dd77fc0 Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Zack Rusin &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914348&amp;i=11&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;zackr@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Thu, 24 Dec 2009 08:15:29 -0500
&lt;br&gt;Subject: [PATCH 12/12] draw/tgsi: fix geometry shader input/output swizzling
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/draw/draw_gs.c &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;src/gallium/auxiliary/tgsi/tgsi_exec.c | &amp;nbsp; 10 +++++++++-
&lt;br&gt;&amp;nbsp;2 files changed, 10 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/src/gallium/auxiliary/draw/draw_gs.c b/src/gallium/auxiliary/draw/draw_gs.c
&lt;br&gt;index 1154228..0a742cb 100644
&lt;br&gt;--- a/src/gallium/auxiliary/draw/draw_gs.c
&lt;br&gt;+++ b/src/gallium/auxiliary/draw/draw_gs.c
&lt;br&gt;@@ -210,6 +210,7 @@ static void draw_fetch_geometry_input(struct draw_geometry_shader *shader,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const float (*input)[4];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; input = (const float (*)[4])(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(const char *)prim_ptr + (k * input_vertex_stride));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; vidx = k * TGSI_EXEC_MAX_INPUT_ATTRIBS + slot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; debug_printf(&amp;quot;\t%d)(%d) Input vert:\n&amp;quot;, vidx, k);
&lt;br&gt;&amp;nbsp;#if 1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assert(!util_is_inf_or_nan(input[vs_slot][0]));
&lt;br&gt;diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c b/src/gallium/auxiliary/tgsi/tgsi_exec.c
&lt;br&gt;index e2f2878..ba89f2f 100644
&lt;br&gt;--- a/src/gallium/auxiliary/tgsi/tgsi_exec.c
&lt;br&gt;+++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c
&lt;br&gt;@@ -292,6 +292,14 @@ tgsi_exec_machine_bind_shader(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * sizeof(struct tgsi_full_declaration));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;maxDeclarations += 10;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (parse.FullToken.FullDeclaration.Declaration.File == TGSI_FILE_OUTPUT) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned reg;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (reg = parse.FullToken.FullDeclaration.Range.First;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; reg &amp;lt;= parse.FullToken.FullDeclaration.Range.Last;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ++reg) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ++mach-&amp;gt;NumOutputs;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; memcpy(declarations + numDeclarations,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;parse.FullToken.FullDeclaration,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sizeof(declarations[0]));
&lt;br&gt;@@ -1471,7 +1479,7 @@ store_dest(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dst = &amp;mach-&amp;gt;Outputs[offset + index].xyzw[chan_index];
&lt;br&gt;&amp;nbsp;#if 0
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (TGSI_PROCESSOR_GEOMETRY == mach-&amp;gt;Processor) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stderr, &amp;quot;STORING OUT[%d] mask(%d), = (&amp;quot;, index, execmask);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stderr, &amp;quot;STORING OUT[%d] mask(%d), = (&amp;quot;, offset + index, execmask);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (i = 0; i &amp;lt; QUAD_SIZE; i++)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (execmask &amp; (1 &amp;lt;&amp;lt; i))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fprintf(stderr, &amp;quot;%f, &amp;quot;, chan-&amp;gt;f[i]);
&lt;br&gt;-- 
&lt;br&gt;1.6.5.7
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;&lt;br /&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26914348&amp;i=12&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/geometry-shading-patches-tp26914348p26914348.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26913598</id>
	<title>Re: [PATCH] Fix missing sl_pp_* and sl_cl_* symbols in	all the dri drivers.</title>
	<published>2009-12-24T04:48:18Z</published>
	<updated>2009-12-24T04:48:18Z</updated>
	<author>
		<name>Brian Paul-3</name>
	</author>
	<content type="html">&lt;div class='shrinkable-quote'&gt;&amp;gt; On Wed, Dec 23, 2009 at 4:58 PM, Robert Noland &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26913598&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;rnoland@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt; On Wed, 2009-12-23 at 16:49 -0700, Brian Paul wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; OK, here's a patch for bin/mklib which should help on FreeBSD. &amp;nbsp;It
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; also puts some common code into new subroutines.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Let me know if this does the trick.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Missing attachment? &amp;nbsp;Or did I miss a commit?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Hmm, trying the attachment again.
&lt;/div&gt;&lt;br&gt;OK, trying yet again. &amp;nbsp;Something's goofy with my gmail.
&lt;br&gt;&lt;br&gt;-Brian
&lt;br&gt;&lt;br /&gt; &lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;&lt;br /&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26913598&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;0001-mklib-expand-.a-into-.o-files-on-FreeBSD-put-commo.patch&lt;/strong&gt; (5K) &lt;a href=&quot;http://old.nabble.com/attachment/26913598/0/0001-mklib-expand-.a-into-.o-files-on-FreeBSD-put-commo.patch&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--Fix-missing-sl_pp_*-and-sl_cl_*-symbols-in-all-the-dri-drivers.-tp26883557p26913598.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26913079</id>
	<title>[Bug 25588] [Segmentation fault] vbo_get_minmax_index at vbo/vbo_exec_array.c:81</title>
	<published>2009-12-24T03:36:03Z</published>
	<updated>2009-12-24T03:36:03Z</updated>
	<author>
		<name>Bugzilla from bugzilla-daemon@freedesktop.org</name>
	</author>
	<content type="html">&lt;a href=&quot;http://bugs.freedesktop.org/show_bug.cgi?id=25588&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugs.freedesktop.org/show_bug.cgi?id=25588&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;--- Comment #3 from Fabio Pedretti &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26913079&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;fabio.ped@...&lt;/a&gt;&amp;gt; &amp;nbsp;2009-12-24 03:36:03 PST ---
&lt;br&gt;Ian, any news on this?
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Configure bugmail: &lt;a href=&quot;http://bugs.freedesktop.org/userprefs.cgi?tab=email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugs.freedesktop.org/userprefs.cgi?tab=email&lt;/a&gt;&lt;br&gt;------- You are receiving this mail because: -------
&lt;br&gt;You are the assignee for the bug.
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26913079&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-Bug-25588--New%3A--Segmentation-fault--vbo_get_minmax_index-at-vbo-vbo_exec_array.c%3A81-tp26746355p26913079.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26912037</id>
	<title>[Bug 25631] glNewList segfaults</title>
	<published>2009-12-24T02:03:12Z</published>
	<updated>2009-12-24T02:03:12Z</updated>
	<author>
		<name>Bugzilla from bugzilla-daemon@freedesktop.org</name>
	</author>
	<content type="html">&lt;a href=&quot;http://bugs.freedesktop.org/show_bug.cgi?id=25631&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugs.freedesktop.org/show_bug.cgi?id=25631&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;--- Comment #11 from aze489 &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26912037&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aze489@...&lt;/a&gt;&amp;gt; &amp;nbsp;2009-12-24 02:03:12 PST ---
&lt;br&gt;I found out using strace that /dev/dri/card0 was not accessible...
&lt;br&gt;I don't really understand where this problem come from since i specified &amp;quot;Mode
&lt;br&gt;0666&amp;quot; in my xorg.conf's DRI section...
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Configure bugmail: &lt;a href=&quot;http://bugs.freedesktop.org/userprefs.cgi?tab=email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugs.freedesktop.org/userprefs.cgi?tab=email&lt;/a&gt;&lt;br&gt;------- You are receiving this mail because: -------
&lt;br&gt;You are the assignee for the bug.
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26912037&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-Bug-25631--New%3A-glNewList-segfaults-tp26774037p26912037.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26910172</id>
	<title>Re: [PATCH] Fix missing sl_pp_* and sl_cl_* symbols in all the dri drivers.</title>
	<published>2009-12-23T19:18:36Z</published>
	<updated>2009-12-23T19:18:36Z</updated>
	<author>
		<name>Brian Paul-4</name>
	</author>
	<content type="html">On Wed, Dec 23, 2009 at 4:58 PM, Robert Noland &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26910172&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;rnoland@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; On Wed, 2009-12-23 at 16:49 -0700, Brian Paul wrote:
&lt;br&gt;&amp;gt;&amp;gt; OK, here's a patch for bin/mklib which should help on FreeBSD.  It
&lt;br&gt;&amp;gt;&amp;gt; also puts some common code into new subroutines.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Let me know if this does the trick.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Missing attachment?  Or did I miss a commit?
&lt;br&gt;&lt;br&gt;Hmm, trying the attachment again.
&lt;br&gt;&lt;br&gt;-Brian
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26910172&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--Fix-missing-sl_pp_*-and-sl_cl_*-symbols-in-all-the-dri-drivers.-tp26883557p26910172.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26910094</id>
	<title>Re: [PATCH] Disable EGL if building static libraries.</title>
	<published>2009-12-23T18:45:36Z</published>
	<updated>2009-12-23T18:45:36Z</updated>
	<author>
		<name>Matthew W. S. Bell-2</name>
	</author>
	<content type="html">On Wed, 2009-12-23 at 10:56 +0800, Chia-I Wu wrote:
&lt;div class='shrinkable-quote'&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Mon, Dec 21, 2009 at 6:09 AM, Matthew W. S. Bell
&lt;br&gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26910094&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;matthew@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt; On Sat, 2009-12-19 at 12:09 -0800, Dan Nicholson wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; This seems fine (except for the gratuitous newline introduced), but
&lt;br&gt;&amp;gt; I
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; think someone submitted a patch the other day that makes the egl
&lt;br&gt;&amp;gt; build
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; work static. Can you show where the build fails without this patch?
&lt;br&gt;&amp;gt; &amp;gt; It fails when it tries to build libEGL.so for target library in
&lt;br&gt;&amp;gt; &amp;gt; src/egl/main/Makefile with static (non-PIC) code. Can you find the
&lt;br&gt;&amp;gt; patch
&lt;br&gt;&amp;gt; &amp;gt; so I can see if it fixes the problem?
&lt;br&gt;&amp;gt; I don't recall such patch. &amp;nbsp;Does the attached one help?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; It cleans up the build rule a little and should fix the issue.
&lt;/div&gt;&lt;/div&gt;Tested-by: Matthew W.S. Bell &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26910094&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;matthew@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br /&gt; &lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;&lt;br /&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26910094&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;signature.asc&lt;/strong&gt; (501 bytes) &lt;a href=&quot;http://old.nabble.com/attachment/26910094/0/signature.asc&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--Disable-EGL-if-building-static-libraries.-tp26857520p26910094.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26909001</id>
	<title>Re: [PATCH] Fix missing sl_pp_* and sl_cl_* symbols in all the dri drivers.</title>
	<published>2009-12-23T15:58:32Z</published>
	<updated>2009-12-23T15:58:32Z</updated>
	<author>
		<name>Robert Noland-4</name>
	</author>
	<content type="html">On Wed, 2009-12-23 at 16:49 -0700, Brian Paul wrote:
&lt;br&gt;&amp;gt; OK, here's a patch for bin/mklib which should help on FreeBSD. &amp;nbsp;It
&lt;br&gt;&amp;gt; also puts some common code into new subroutines.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Let me know if this does the trick.
&lt;br&gt;&lt;br&gt;Missing attachment? &amp;nbsp;Or did I miss a commit?
&lt;br&gt;&lt;br&gt;robert.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Robert Noland &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26909001&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;rnoland@...&lt;/a&gt;&amp;gt;
&lt;br&gt;2Hip Networks
&lt;br&gt;&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26909001&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--Fix-missing-sl_pp_*-and-sl_cl_*-symbols-in-all-the-dri-drivers.-tp26883557p26909001.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26908951</id>
	<title>Re: [PATCH] Fix missing sl_pp_* and sl_cl_* symbols in all the dri drivers.</title>
	<published>2009-12-23T15:49:49Z</published>
	<updated>2009-12-23T15:49:49Z</updated>
	<author>
		<name>Brian Paul-4</name>
	</author>
	<content type="html">On Wed, Dec 23, 2009 at 12:28 PM, Brian Paul &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26908951&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;brian.e.paul@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Wed, Dec 23, 2009 at 11:57 AM, Adam K Kirchhoff &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26908951&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;adamk@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt; Brian Paul wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; On Mon, Dec 21, 2009 at 8:09 PM, Robert Noland &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26908951&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;rnoland@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Signed-off-by: Robert Noland &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26908951&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;rnoland@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;  src/mesa/drivers/dri/Makefile.template |    5 ++++-
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;  1 files changed, 4 insertions(+), 1 deletions(-)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; diff --git a/src/mesa/drivers/dri/Makefile.template
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; b/src/mesa/drivers/dri/Makefile.template
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; index 39d25ce..39a23b7 100644
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; --- a/src/mesa/drivers/dri/Makefile.template
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +++ b/src/mesa/drivers/dri/Makefile.template
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; @@ -2,6 +2,9 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;  MESA_MODULES = $(TOP)/src/mesa/libmesa.a
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +GLSL_MODULES = $(TOP)/src/glsl/cl/libglslcl.a \
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +              $(TOP)/src/glsl/pp/libglslpp.a
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;  COMMON_GALLIUM_SOURCES = \
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;        ../common/utils.c \
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;        ../common/vblank.c \
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; @@ -71,7 +74,7 @@ $(LIBNAME): $(OBJECTS) $(MESA_MODULES) $(EXTRA_MODULES)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; $(WINOBJ) Makefile \
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;               $(TOP)/src/mesa/drivers/dri/Makefile.template
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;       $(MKLIB) -o $@ -noprefix -linker '$(CC)' -ldflags '$(LDFLAGS)' \
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;               $(OBJECTS) $(MESA_MODULES) $(EXTRA_MODULES) $(WINOBJ) \
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; -               $(DRI_LIB_DEPS)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; +               $(GLSL_MODULES) $(DRI_LIB_DEPS)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;  $(TOP)/$(LIB_DIR)/$(LIBNAME): $(LIBNAME)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; This patch shouldn't be needed.  The libglslcl.a and libglslpp.a
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; archives get included in the libmesa.a archive already.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Things run OK here as-is.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; -
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Without this patch, r600_dri.so gives an undefined symbol for
&lt;br&gt;&amp;gt;&amp;gt; 'sl_pp_context_create' on FreeBSD 9.0-CURRENT amd64 and i386.  With this
&lt;br&gt;&amp;gt;&amp;gt; patch, it works fine.  Perhaps that patch shouldn't be  needed, but it
&lt;br&gt;&amp;gt;&amp;gt; certain is needed here :-)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; It looks like the freebsd case in bin/mklib doesn't handle &amp;quot;unrolling&amp;quot;
&lt;br&gt;&amp;gt; of .a archives into constituent .o files like the Linux code does.
&lt;br&gt;&amp;gt; That's probably the root issue.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I'm also tempted to move the src/glsl/* files down into
&lt;br&gt;&amp;gt; src/mesa/shader/slang/ to simplify the building process.  I think
&lt;br&gt;&amp;gt; Michal's intention was for the GLSL compiler to live in a separate
&lt;br&gt;&amp;gt; place from the rest of Mesa to stress modularity but it's caused
&lt;br&gt;&amp;gt; trouble elsewhere.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I'll try to look into that when I have a little time, maybe tonight or tomorrow.
&lt;/div&gt;&lt;br&gt;OK, here's a patch for bin/mklib which should help on FreeBSD. &amp;nbsp;It
&lt;br&gt;also puts some common code into new subroutines.
&lt;br&gt;&lt;br&gt;Let me know if this does the trick.
&lt;br&gt;&lt;br&gt;-Brian
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26908951&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--Fix-missing-sl_pp_*-and-sl_cl_*-symbols-in-all-the-dri-drivers.-tp26883557p26908951.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26907236</id>
	<title>[PATCH] RFC: ABI cleanup for libGL.</title>
	<published>2009-12-23T12:49:27Z</published>
	<updated>2009-12-23T12:49:27Z</updated>
	<author>
		<name>tom fogal-3</name>
	</author>
	<content type="html">Hi all,
&lt;br&gt;&lt;br&gt;I'd like to trim down the libGL ABI. &amp;nbsp;Appended is the start of an
&lt;br&gt;approach that is going to work, and I just need to put in the time to
&lt;br&gt;complete everything. &amp;nbsp;It will certainly break things if applied as-is,
&lt;br&gt;so please don't apply ;)
&lt;br&gt;&lt;br&gt;Thoughts?
&lt;br&gt;&lt;br&gt;-tom
&lt;br&gt;&lt;br&gt;-----
&lt;br&gt;&lt;br&gt;This adds some shell to generate a GL export map. &amp;nbsp;The map is then
&lt;br&gt;used during library creation time to trim down the list of symbols
&lt;br&gt;that are exported from libGL.so.
&lt;br&gt;&lt;br&gt;The gl.exports[.darwin] files are generated automatically by
&lt;br&gt;gen_exports.sh. &amp;nbsp;I have chosen to add them to version control so
&lt;br&gt;that we can also add symlinks in src/mesa/drivers/x11 to these,
&lt;br&gt;thereby avoiding any kind of bootstrap issue. &amp;nbsp;Another alternative
&lt;br&gt;is to conditionally pass -export to mklib, based on whether these
&lt;br&gt;export maps exist, but I dislike that.
&lt;br&gt;&lt;br&gt;I'm finding glX_API.xml is incomplete. &amp;nbsp;My guess is that the
&lt;br&gt;corresponding gl_API.xml is out of date as well. &amp;nbsp;I haven't even
&lt;br&gt;started thinking about WGL yet. &amp;nbsp;At this point, I'm down to a
&lt;br&gt;mechanical stage of simply fixing up these inputs, and I'd like to
&lt;br&gt;get some feedback that this is `good stuff' before going too far
&lt;br&gt;down the path.
&lt;br&gt;&lt;br&gt;Comments appreciated.
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;src/mesa/drivers/x11/Makefile &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;3 +-
&lt;br&gt;&amp;nbsp;src/mesa/drivers/x11/gl.exports &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;src/mesa/drivers/x11/gl.exports.darwin | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;src/mesa/glapi/gen_exports.sh &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 29 +
&lt;br&gt;&amp;nbsp;src/mesa/glapi/gl.exports &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 2200 ++++++++++++++++++++++++++++++++
&lt;br&gt;&amp;nbsp;src/mesa/glapi/gl.exports.darwin &amp;nbsp; &amp;nbsp; &amp;nbsp; | 1100 ++++++++++++++++
&lt;br&gt;&amp;nbsp;src/mesa/glapi/glX_API.xml &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp;151 +++
&lt;br&gt;&amp;nbsp;7 files changed, 3484 insertions(+), 1 deletions(-)
&lt;br&gt;&amp;nbsp;create mode 120000 src/mesa/drivers/x11/gl.exports
&lt;br&gt;&amp;nbsp;create mode 120000 src/mesa/drivers/x11/gl.exports.darwin
&lt;br&gt;&amp;nbsp;create mode 100644 src/mesa/glapi/gen_exports.sh
&lt;br&gt;&amp;nbsp;create mode 100644 src/mesa/glapi/gl.exports
&lt;br&gt;&amp;nbsp;create mode 100644 src/mesa/glapi/gl.exports.darwin
&lt;br&gt;&lt;br&gt;diff --git a/src/mesa/drivers/x11/Makefile b/src/mesa/drivers/x11/Makefile
&lt;br&gt;index 5e427d2..041d1c4 100644
&lt;br&gt;--- a/src/mesa/drivers/x11/Makefile
&lt;br&gt;+++ b/src/mesa/drivers/x11/Makefile
&lt;br&gt;@@ -56,9 +56,10 @@ default: $(TOP)/$(LIB_DIR)/$(GL_LIB_NAME)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;$(TOP)/$(LIB_DIR)/$(GL_LIB_NAME): $(OBJECTS) $(CORE_MESA)
&lt;br&gt;-	@ $(MKLIB) -o $(GL_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
&lt;br&gt;+	 $(MKLIB) -o $(GL_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
&lt;br&gt;&amp;nbsp;		-major $(GL_MAJOR) -minor $(GL_MINOR) -patch $(GL_TINY) \
&lt;br&gt;&amp;nbsp;		-install $(TOP)/$(LIB_DIR) $(MKLIB_OPTIONS) \
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;-exports gl.exports \
&lt;br&gt;&amp;nbsp;		-id $(INSTALL_LIB_DIR)/lib$(GL_LIB).$(GL_MAJOR).dylib \
&lt;br&gt;&amp;nbsp;		$(GL_LIB_DEPS) $(OBJECTS) $(CORE_MESA)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/src/mesa/drivers/x11/gl.exports b/src/mesa/drivers/x11/gl.exports
&lt;br&gt;new file mode 120000
&lt;br&gt;index 0000000..f39f9bb
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/src/mesa/drivers/x11/gl.exports
&lt;br&gt;@@ -0,0 +1 @@
&lt;br&gt;+../../glapi/gl.exports
&lt;br&gt;\ No newline at end of file
&lt;br&gt;diff --git a/src/mesa/drivers/x11/gl.exports.darwin b/src/mesa/drivers/x11/gl.exports.darwin
&lt;br&gt;new file mode 120000
&lt;br&gt;index 0000000..7ae3a99
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/src/mesa/drivers/x11/gl.exports.darwin
&lt;br&gt;@@ -0,0 +1 @@
&lt;br&gt;+../../glapi/gl.exports.darwin
&lt;br&gt;\ No newline at end of file
&lt;br&gt;diff --git a/src/mesa/glapi/gen_exports.sh b/src/mesa/glapi/gen_exports.sh
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..ae97629
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/src/mesa/glapi/gen_exports.sh
&lt;br&gt;@@ -0,0 +1,29 @@
&lt;br&gt;+#!/bin/sh
&lt;br&gt;+
&lt;br&gt;+# Get all of the GL functions from glapitemp.h
&lt;br&gt;+ent=$(grep &amp;quot;TABLE_ENTRY(&amp;quot; glapitemp.h | sort | uniq | cut -d \( -f 2)
&lt;br&gt;+apitemp=$(mktemp)
&lt;br&gt;+for e in ${ent} ; do
&lt;br&gt;+ &amp;nbsp;echo &amp;quot;${e}&amp;quot; &amp;gt;&amp;gt; ${apitemp}
&lt;br&gt;+done
&lt;br&gt;+# The -v &amp;quot;_&amp;quot; gets rid of dispatch stubs.
&lt;br&gt;+entries=$(cat ${apitemp} | cut -d \) -f 1 | grep -v &amp;quot;_&amp;quot;)
&lt;br&gt;+rm -f gl.exports gl.exports.darwin
&lt;br&gt;+for fqn in ${entries} ; do
&lt;br&gt;+ &amp;nbsp;echo &amp;quot;gl${fqn}&amp;quot; &amp;gt;&amp;gt; gl.exports
&lt;br&gt;+ &amp;nbsp;echo &amp;quot;mgl${fqn}&amp;quot; &amp;gt;&amp;gt; gl.exports
&lt;br&gt;+ &amp;nbsp;echo &amp;quot;*gl${fqn}&amp;quot; &amp;gt;&amp;gt; gl.exports.darwin
&lt;br&gt;+done
&lt;br&gt;+# Now grab all the glX functions from the glX XML.
&lt;br&gt;+for fqn in $(grep &amp;quot;function name&amp;quot; glX_API.xml | cut -d \&amp;quot; -f 2 | sort) ; do
&lt;br&gt;+ &amp;nbsp;echo &amp;quot;glX${fqn}&amp;quot; &amp;gt;&amp;gt; gl.exports
&lt;br&gt;+ &amp;nbsp;echo &amp;quot;mglX${fqn}&amp;quot; &amp;gt;&amp;gt; gl.exports
&lt;br&gt;+ &amp;nbsp;echo &amp;quot;*glX${fqn}&amp;quot; &amp;gt;&amp;gt; gl.exports.darwin
&lt;br&gt;+done
&lt;br&gt;+# Finally, do some cleanup and manually add some symbols that don't seem to
&lt;br&gt;+# appear anywhere else.
&lt;br&gt;+for f in glXGetProcAddress glXGetProcAddressARB ; do
&lt;br&gt;+ &amp;nbsp;echo &amp;quot;${f}&amp;quot; &amp;gt;&amp;gt; gl.exports
&lt;br&gt;+ &amp;nbsp;echo &amp;quot;m${f}&amp;quot; &amp;gt;&amp;gt; gl.exports
&lt;br&gt;+ &amp;nbsp;echo &amp;quot;*${f}&amp;quot; &amp;gt;&amp;gt; gl.exports.darwin
&lt;br&gt;+done
&lt;br&gt;diff --git a/src/mesa/glapi/gl.exports b/src/mesa/glapi/gl.exports
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..ac1a7a4
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/src/mesa/glapi/gl.exports
&lt;br&gt;@@ -0,0 +1,2200 @@
&lt;br&gt;+glAccum
&lt;br&gt;+mglAccum
&lt;br&gt;+glActiveTexture
&lt;br&gt;+mglActiveTexture
&lt;br&gt;+glActiveTextureARB
&lt;br&gt;+mglActiveTextureARB
&lt;br&gt;+glAlphaFragmentOp1ATI
&lt;br&gt;+mglAlphaFragmentOp1ATI
&lt;br&gt;+glAlphaFragmentOp2ATI
&lt;br&gt;+mglAlphaFragmentOp2ATI
&lt;br&gt;+glAlphaFragmentOp3ATI
&lt;br&gt;+mglAlphaFragmentOp3ATI
&lt;br&gt;+glAlphaFunc
&lt;br&gt;+mglAlphaFunc
&lt;br&gt;+glAreProgramsResidentNV
&lt;br&gt;+mglAreProgramsResidentNV
&lt;br&gt;+glAreTexturesResident
&lt;br&gt;+mglAreTexturesResident
&lt;br&gt;+glAreTexturesResidentEXT
&lt;br&gt;+mglAreTexturesResidentEXT
&lt;br&gt;+glArrayElement
&lt;br&gt;+mglArrayElement
&lt;br&gt;+glArrayElementEXT
&lt;br&gt;+mglArrayElementEXT
&lt;br&gt;+glAttachObjectARB
&lt;br&gt;+mglAttachObjectARB
&lt;br&gt;+glAttachShader
&lt;br&gt;+mglAttachShader
&lt;br&gt;+glBegin
&lt;br&gt;+mglBegin
&lt;br&gt;+glBeginFragmentShaderATI
&lt;br&gt;+mglBeginFragmentShaderATI
&lt;br&gt;+glBeginQuery
&lt;br&gt;+mglBeginQuery
&lt;br&gt;+glBeginQueryARB
&lt;br&gt;+mglBeginQueryARB
&lt;br&gt;+glBindAttribLocation
&lt;br&gt;+mglBindAttribLocation
&lt;br&gt;+glBindAttribLocationARB
&lt;br&gt;+mglBindAttribLocationARB
&lt;br&gt;+glBindBuffer
&lt;br&gt;+mglBindBuffer
&lt;br&gt;+glBindBufferARB
&lt;br&gt;+mglBindBufferARB
&lt;br&gt;+glBindFragmentShaderATI
&lt;br&gt;+mglBindFragmentShaderATI
&lt;br&gt;+glBindFramebuffer
&lt;br&gt;+mglBindFramebuffer
&lt;br&gt;+glBindFramebufferEXT
&lt;br&gt;+mglBindFramebufferEXT
&lt;br&gt;+glBindProgramARB
&lt;br&gt;+mglBindProgramARB
&lt;br&gt;+glBindProgramNV
&lt;br&gt;+mglBindProgramNV
&lt;br&gt;+glBindRenderbuffer
&lt;br&gt;+mglBindRenderbuffer
&lt;br&gt;+glBindRenderbufferEXT
&lt;br&gt;+mglBindRenderbufferEXT
&lt;br&gt;+glBindTexture
&lt;br&gt;+mglBindTexture
&lt;br&gt;+glBindTextureEXT
&lt;br&gt;+mglBindTextureEXT
&lt;br&gt;+glBindVertexArray
&lt;br&gt;+mglBindVertexArray
&lt;br&gt;+glBitmap
&lt;br&gt;+mglBitmap
&lt;br&gt;+glBlendColor
&lt;br&gt;+mglBlendColor
&lt;br&gt;+glBlendColorEXT
&lt;br&gt;+mglBlendColorEXT
&lt;br&gt;+glBlendEquation
&lt;br&gt;+mglBlendEquation
&lt;br&gt;+glBlendEquationEXT
&lt;br&gt;+mglBlendEquationEXT
&lt;br&gt;+glBlendEquationSeparate
&lt;br&gt;+mglBlendEquationSeparate
&lt;br&gt;+glBlendFunc
&lt;br&gt;+mglBlendFunc
&lt;br&gt;+glBlendFuncSeparate
&lt;br&gt;+mglBlendFuncSeparate
&lt;br&gt;+glBlendFuncSeparateEXT
&lt;br&gt;+mglBlendFuncSeparateEXT
&lt;br&gt;+glBlitFramebuffer
&lt;br&gt;+mglBlitFramebuffer
&lt;br&gt;+glBufferData
&lt;br&gt;+mglBufferData
&lt;br&gt;+glBufferDataARB
&lt;br&gt;+mglBufferDataARB
&lt;br&gt;+glBufferSubData
&lt;br&gt;+mglBufferSubData
&lt;br&gt;+glBufferSubDataARB
&lt;br&gt;+mglBufferSubDataARB
&lt;br&gt;+glCallList
&lt;br&gt;+mglCallList
&lt;br&gt;+glCallLists
&lt;br&gt;+mglCallLists
&lt;br&gt;+glCheckFramebufferStatus
&lt;br&gt;+mglCheckFramebufferStatus
&lt;br&gt;+glCheckFramebufferStatusEXT
&lt;br&gt;+mglCheckFramebufferStatusEXT
&lt;br&gt;+glClear
&lt;br&gt;+mglClear
&lt;br&gt;+glClearAccum
&lt;br&gt;+mglClearAccum
&lt;br&gt;+glClearColor
&lt;br&gt;+mglClearColor
&lt;br&gt;+glClearDepth
&lt;br&gt;+mglClearDepth
&lt;br&gt;+glClearIndex
&lt;br&gt;+mglClearIndex
&lt;br&gt;+glClearStencil
&lt;br&gt;+mglClearStencil
&lt;br&gt;+glClientActiveTexture
&lt;br&gt;+mglClientActiveTexture
&lt;br&gt;+glClientActiveTextureARB
&lt;br&gt;+mglClientActiveTextureARB
&lt;br&gt;+glClientWaitSync
&lt;br&gt;+mglClientWaitSync
&lt;br&gt;+glClipPlane
&lt;br&gt;+mglClipPlane
&lt;br&gt;+glColor3b
&lt;br&gt;+mglColor3b
&lt;br&gt;+glColor3bv
&lt;br&gt;+mglColor3bv
&lt;br&gt;+glColor3d
&lt;br&gt;+mglColor3d
&lt;br&gt;+glColor3dv
&lt;br&gt;+mglColor3dv
&lt;br&gt;+glColor3f
&lt;br&gt;+mglColor3f
&lt;br&gt;+glColor3fv
&lt;br&gt;+mglColor3fv
&lt;br&gt;+glColor3i
&lt;br&gt;+mglColor3i
&lt;br&gt;+glColor3iv
&lt;br&gt;+mglColor3iv
&lt;br&gt;+glColor3s
&lt;br&gt;+mglColor3s
&lt;br&gt;+glColor3sv
&lt;br&gt;+mglColor3sv
&lt;br&gt;+glColor3ub
&lt;br&gt;+mglColor3ub
&lt;br&gt;+glColor3ubv
&lt;br&gt;+mglColor3ubv
&lt;br&gt;+glColor3ui
&lt;br&gt;+mglColor3ui
&lt;br&gt;+glColor3uiv
&lt;br&gt;+mglColor3uiv
&lt;br&gt;+glColor3us
&lt;br&gt;+mglColor3us
&lt;br&gt;+glColor3usv
&lt;br&gt;+mglColor3usv
&lt;br&gt;+glColor4b
&lt;br&gt;+mglColor4b
&lt;br&gt;+glColor4bv
&lt;br&gt;+mglColor4bv
&lt;br&gt;+glColor4d
&lt;br&gt;+mglColor4d
&lt;br&gt;+glColor4dv
&lt;br&gt;+mglColor4dv
&lt;br&gt;+glColor4f
&lt;br&gt;+mglColor4f
&lt;br&gt;+glColor4fv
&lt;br&gt;+mglColor4fv
&lt;br&gt;+glColor4i
&lt;br&gt;+mglColor4i
&lt;br&gt;+glColor4iv
&lt;br&gt;+mglColor4iv
&lt;br&gt;+glColor4s
&lt;br&gt;+mglColor4s
&lt;br&gt;+glColor4sv
&lt;br&gt;+mglColor4sv
&lt;br&gt;+glColor4ub
&lt;br&gt;+mglColor4ub
&lt;br&gt;+glColor4ubv
&lt;br&gt;+mglColor4ubv
&lt;br&gt;+glColor4ui
&lt;br&gt;+mglColor4ui
&lt;br&gt;+glColor4uiv
&lt;br&gt;+mglColor4uiv
&lt;br&gt;+glColor4us
&lt;br&gt;+mglColor4us
&lt;br&gt;+glColor4usv
&lt;br&gt;+mglColor4usv
&lt;br&gt;+glColorFragmentOp1ATI
&lt;br&gt;+mglColorFragmentOp1ATI
&lt;br&gt;+glColorFragmentOp2ATI
&lt;br&gt;+mglColorFragmentOp2ATI
&lt;br&gt;+glColorFragmentOp3ATI
&lt;br&gt;+mglColorFragmentOp3ATI
&lt;br&gt;+glColorMask
&lt;br&gt;+mglColorMask
&lt;br&gt;+glColorMaterial
&lt;br&gt;+mglColorMaterial
&lt;br&gt;+glColorPointer
&lt;br&gt;+mglColorPointer
&lt;br&gt;+glColorPointerEXT
&lt;br&gt;+mglColorPointerEXT
&lt;br&gt;+glColorSubTable
&lt;br&gt;+mglColorSubTable
&lt;br&gt;+glColorTable
&lt;br&gt;+mglColorTable
&lt;br&gt;+glColorTableEXT
&lt;br&gt;+mglColorTableEXT
&lt;br&gt;+glColorTableParameterfv
&lt;br&gt;+mglColorTableParameterfv
&lt;br&gt;+glColorTableParameteriv
&lt;br&gt;+mglColorTableParameteriv
&lt;br&gt;+glCombinerInputNV
&lt;br&gt;+mglCombinerInputNV
&lt;br&gt;+glCombinerOutputNV
&lt;br&gt;+mglCombinerOutputNV
&lt;br&gt;+glCombinerParameterfNV
&lt;br&gt;+mglCombinerParameterfNV
&lt;br&gt;+glCombinerParameterfvNV
&lt;br&gt;+mglCombinerParameterfvNV
&lt;br&gt;+glCombinerParameteriNV
&lt;br&gt;+mglCombinerParameteriNV
&lt;br&gt;+glCombinerParameterivNV
&lt;br&gt;+mglCombinerParameterivNV
&lt;br&gt;+glCompileShader
&lt;br&gt;+mglCompileShader
&lt;br&gt;+glCompileShaderARB
&lt;br&gt;+mglCompileShaderARB
&lt;br&gt;+glCompressedTexImage1D
&lt;br&gt;+mglCompressedTexImage1D
&lt;br&gt;+glCompressedTexImage1DARB
&lt;br&gt;+mglCompressedTexImage1DARB
&lt;br&gt;+glCompressedTexImage2D
&lt;br&gt;+mglCompressedTexImage2D
&lt;br&gt;+glCompressedTexImage2DARB
&lt;br&gt;+mglCompressedTexImage2DARB
&lt;br&gt;+glCompressedTexImage3D
&lt;br&gt;+mglCompressedTexImage3D
&lt;br&gt;+glCompressedTexImage3DARB
&lt;br&gt;+mglCompressedTexImage3DARB
&lt;br&gt;+glCompressedTexSubImage1D
&lt;br&gt;+mglCompressedTexSubImage1D
&lt;br&gt;+glCompressedTexSubImage1DARB
&lt;br&gt;+mglCompressedTexSubImage1DARB
&lt;br&gt;+glCompressedTexSubImage2D
&lt;br&gt;+mglCompressedTexSubImage2D
&lt;br&gt;+glCompressedTexSubImage2DARB
&lt;br&gt;+mglCompressedTexSubImage2DARB
&lt;br&gt;+glCompressedTexSubImage3D
&lt;br&gt;+mglCompressedTexSubImage3D
&lt;br&gt;+glCompressedTexSubImage3DARB
&lt;br&gt;+mglCompressedTexSubImage3DARB
&lt;br&gt;+glConvolutionFilter1D
&lt;br&gt;+mglConvolutionFilter1D
&lt;br&gt;+glConvolutionFilter2D
&lt;br&gt;+mglConvolutionFilter2D
&lt;br&gt;+glConvolutionParameterf
&lt;br&gt;+mglConvolutionParameterf
&lt;br&gt;+glConvolutionParameterfv
&lt;br&gt;+mglConvolutionParameterfv
&lt;br&gt;+glConvolutionParameteri
&lt;br&gt;+mglConvolutionParameteri
&lt;br&gt;+glConvolutionParameteriv
&lt;br&gt;+mglConvolutionParameteriv
&lt;br&gt;+glCopyBufferSubData
&lt;br&gt;+mglCopyBufferSubData
&lt;br&gt;+glCopyColorSubTable
&lt;br&gt;+mglCopyColorSubTable
&lt;br&gt;+glCopyColorTable
&lt;br&gt;+mglCopyColorTable
&lt;br&gt;+glCopyConvolutionFilter1D
&lt;br&gt;+mglCopyConvolutionFilter1D
&lt;br&gt;+glCopyConvolutionFilter2D
&lt;br&gt;+mglCopyConvolutionFilter2D
&lt;br&gt;+glCopyPixels
&lt;br&gt;+mglCopyPixels
&lt;br&gt;+glCopyTexImage1D
&lt;br&gt;+mglCopyTexImage1D
&lt;br&gt;+glCopyTexImage1DEXT
&lt;br&gt;+mglCopyTexImage1DEXT
&lt;br&gt;+glCopyTexImage2D
&lt;br&gt;+mglCopyTexImage2D
&lt;br&gt;+glCopyTexImage2DEXT
&lt;br&gt;+mglCopyTexImage2DEXT
&lt;br&gt;+glCopyTexSubImage1D
&lt;br&gt;+mglCopyTexSubImage1D
&lt;br&gt;+glCopyTexSubImage1DEXT
&lt;br&gt;+mglCopyTexSubImage1DEXT
&lt;br&gt;+glCopyTexSubImage2D
&lt;br&gt;+mglCopyTexSubImage2D
&lt;br&gt;+glCopyTexSubImage2DEXT
&lt;br&gt;+mglCopyTexSubImage2DEXT
&lt;br&gt;+glCopyTexSubImage3D
&lt;br&gt;+mglCopyTexSubImage3D
&lt;br&gt;+glCopyTexSubImage3DEXT
&lt;br&gt;+mglCopyTexSubImage3DEXT
&lt;br&gt;+glCreateProgram
&lt;br&gt;+mglCreateProgram
&lt;br&gt;+glCreateProgramObjectARB
&lt;br&gt;+mglCreateProgramObjectARB
&lt;br&gt;+glCreateShader
&lt;br&gt;+mglCreateShader
&lt;br&gt;+glCreateShaderObjectARB
&lt;br&gt;+mglCreateShaderObjectARB
&lt;br&gt;+glCullFace
&lt;br&gt;+mglCullFace
&lt;br&gt;+glDeleteBuffers
&lt;br&gt;+mglDeleteBuffers
&lt;br&gt;+glDeleteBuffersARB
&lt;br&gt;+mglDeleteBuffersARB
&lt;br&gt;+glDeleteFragmentShaderATI
&lt;br&gt;+mglDeleteFragmentShaderATI
&lt;br&gt;+glDeleteFramebuffers
&lt;br&gt;+mglDeleteFramebuffers
&lt;br&gt;+glDeleteFramebuffersEXT
&lt;br&gt;+mglDeleteFramebuffersEXT
&lt;br&gt;+glDeleteLists
&lt;br&gt;+mglDeleteLists
&lt;br&gt;+glDeleteObjectARB
&lt;br&gt;+mglDeleteObjectARB
&lt;br&gt;+glDeleteProgram
&lt;br&gt;+mglDeleteProgram
&lt;br&gt;+glDeleteProgramsARB
&lt;br&gt;+mglDeleteProgramsARB
&lt;br&gt;+glDeleteProgramsNV
&lt;br&gt;+mglDeleteProgramsNV
&lt;br&gt;+glDeleteQueries
&lt;br&gt;+mglDeleteQueries
&lt;br&gt;+glDeleteQueriesARB
&lt;br&gt;+mglDeleteQueriesARB
&lt;br&gt;+glDeleteRenderbuffers
&lt;br&gt;+mglDeleteRenderbuffers
&lt;br&gt;+glDeleteRenderbuffersEXT
&lt;br&gt;+mglDeleteRenderbuffersEXT
&lt;br&gt;+glDeleteShader
&lt;br&gt;+mglDeleteShader
&lt;br&gt;+glDeleteSync
&lt;br&gt;+mglDeleteSync
&lt;br&gt;+glDeleteTextures
&lt;br&gt;+mglDeleteTextures
&lt;br&gt;+glDeleteTexturesEXT
&lt;br&gt;+mglDeleteTexturesEXT
&lt;br&gt;+glDeleteVertexArrays
&lt;br&gt;+mglDeleteVertexArrays
&lt;br&gt;+glDepthFunc
&lt;br&gt;+mglDepthFunc
&lt;br&gt;+glDepthMask
&lt;br&gt;+mglDepthMask
&lt;br&gt;+glDepthRange
&lt;br&gt;+mglDepthRange
&lt;br&gt;+glDetachObjectARB
&lt;br&gt;+mglDetachObjectARB
&lt;br&gt;+glDetachShader
&lt;br&gt;+mglDetachShader
&lt;br&gt;+glDisable
&lt;br&gt;+mglDisable
&lt;br&gt;+glDisableClientState
&lt;br&gt;+mglDisableClientState
&lt;br&gt;+glDisableVertexAttribArray
&lt;br&gt;+mglDisableVertexAttribArray
&lt;br&gt;+glDisableVertexAttribArrayARB
&lt;br&gt;+mglDisableVertexAttribArrayARB
&lt;br&gt;+glDrawArrays
&lt;br&gt;+mglDrawArrays
&lt;br&gt;+glDrawArraysEXT
&lt;br&gt;+mglDrawArraysEXT
&lt;br&gt;+glDrawBuffer
&lt;br&gt;+mglDrawBuffer
&lt;br&gt;+glDrawBuffers
&lt;br&gt;+mglDrawBuffers
&lt;br&gt;+glDrawBuffersARB
&lt;br&gt;+mglDrawBuffersARB
&lt;br&gt;+glDrawBuffersATI
&lt;br&gt;+mglDrawBuffersATI
&lt;br&gt;+glDrawElements
&lt;br&gt;+mglDrawElements
&lt;br&gt;+glDrawElementsBaseVertex
&lt;br&gt;+mglDrawElementsBaseVertex
&lt;br&gt;+glDrawPixels
&lt;br&gt;+mglDrawPixels
&lt;br&gt;+glDrawRangeElements
&lt;br&gt;+mglDrawRangeElements
&lt;br&gt;+glDrawRangeElementsBaseVertex
&lt;br&gt;+mglDrawRangeElementsBaseVertex
&lt;br&gt;+glDrawRangeElementsEXT
&lt;br&gt;+mglDrawRangeElementsEXT
&lt;br&gt;+glEdgeFlag
&lt;br&gt;+mglEdgeFlag
&lt;br&gt;+glEdgeFlagPointer
&lt;br&gt;+mglEdgeFlagPointer
&lt;br&gt;+glEdgeFlagPointerEXT
&lt;br&gt;+mglEdgeFlagPointerEXT
&lt;br&gt;+glEdgeFlagv
&lt;br&gt;+mglEdgeFlagv
&lt;br&gt;+glEnable
&lt;br&gt;+mglEnable
&lt;br&gt;+glEnableClientState
&lt;br&gt;+mglEnableClientState
&lt;br&gt;+glEnableVertexAttribArray
&lt;br&gt;+mglEnableVertexAttribArray
&lt;br&gt;+glEnableVertexAttribArrayARB
&lt;br&gt;+mglEnableVertexAttribArrayARB
&lt;br&gt;+glEnd
&lt;br&gt;+mglEnd
&lt;br&gt;+glEndFragmentShaderATI
&lt;br&gt;+mglEndFragmentShaderATI
&lt;br&gt;+glEndList
&lt;br&gt;+mglEndList
&lt;br&gt;+glEndQuery
&lt;br&gt;+mglEndQuery
&lt;br&gt;+glEndQueryARB
&lt;br&gt;+mglEndQueryARB
&lt;br&gt;+glEvalCoord1d
&lt;br&gt;+mglEvalCoord1d
&lt;br&gt;+glEvalCoord1dv
&lt;br&gt;+mglEvalCoord1dv
&lt;br&gt;+glEvalCoord1f
&lt;br&gt;+mglEvalCoord1f
&lt;br&gt;+glEvalCoord1fv
&lt;br&gt;+mglEvalCoord1fv
&lt;br&gt;+glEvalCoord2d
&lt;br&gt;+mglEvalCoord2d
&lt;br&gt;+glEvalCoord2dv
&lt;br&gt;+mglEvalCoord2dv
&lt;br&gt;+glEvalCoord2f
&lt;br&gt;+mglEvalCoord2f
&lt;br&gt;+glEvalCoord2fv
&lt;br&gt;+mglEvalCoord2fv
&lt;br&gt;+glEvalMesh1
&lt;br&gt;+mglEvalMesh1
&lt;br&gt;+glEvalMesh2
&lt;br&gt;+mglEvalMesh2
&lt;br&gt;+glEvalPoint1
&lt;br&gt;+mglEvalPoint1
&lt;br&gt;+glEvalPoint2
&lt;br&gt;+mglEvalPoint2
&lt;br&gt;+glExecuteProgramNV
&lt;br&gt;+mglExecuteProgramNV
&lt;br&gt;+glFeedbackBuffer
&lt;br&gt;+mglFeedbackBuffer
&lt;br&gt;+glFenceSync
&lt;br&gt;+mglFenceSync
&lt;br&gt;+glFinalCombinerInputNV
&lt;br&gt;+mglFinalCombinerInputNV
&lt;br&gt;+glFinish
&lt;br&gt;+mglFinish
&lt;br&gt;+glFlush
&lt;br&gt;+mglFlush
&lt;br&gt;+glFlushMappedBufferRange
&lt;br&gt;+mglFlushMappedBufferRange
&lt;br&gt;+glFlushVertexArrayRangeNV
&lt;br&gt;+mglFlushVertexArrayRangeNV
&lt;br&gt;+glFogCoordd
&lt;br&gt;+mglFogCoordd
&lt;br&gt;+glFogCoorddEXT
&lt;br&gt;+mglFogCoorddEXT
&lt;br&gt;+glFogCoorddv
&lt;br&gt;+mglFogCoorddv
&lt;br&gt;+glFogCoorddvEXT
&lt;br&gt;+mglFogCoorddvEXT
&lt;br&gt;+glFogCoordf
&lt;br&gt;+mglFogCoordf
&lt;br&gt;+glFogCoordfEXT
&lt;br&gt;+mglFogCoordfEXT
&lt;br&gt;+glFogCoordfv
&lt;br&gt;+mglFogCoordfv
&lt;br&gt;+glFogCoordfvEXT
&lt;br&gt;+mglFogCoordfvEXT
&lt;br&gt;+glFogCoordPointer
&lt;br&gt;+mglFogCoordPointer
&lt;br&gt;+glFogCoordPointerEXT
&lt;br&gt;+mglFogCoordPointerEXT
&lt;br&gt;+glFogf
&lt;br&gt;+mglFogf
&lt;br&gt;+glFogfv
&lt;br&gt;+mglFogfv
&lt;br&gt;+glFogi
&lt;br&gt;+mglFogi
&lt;br&gt;+glFogiv
&lt;br&gt;+mglFogiv
&lt;br&gt;+glFramebufferRenderbuffer
&lt;br&gt;+mglFramebufferRenderbuffer
&lt;br&gt;+glFramebufferRenderbufferEXT
&lt;br&gt;+mglFramebufferRenderbufferEXT
&lt;br&gt;+glFramebufferTexture1D
&lt;br&gt;+mglFramebufferTexture1D
&lt;br&gt;+glFramebufferTexture1DEXT
&lt;br&gt;+mglFramebufferTexture1DEXT
&lt;br&gt;+glFramebufferTexture2D
&lt;br&gt;+mglFramebufferTexture2D
&lt;br&gt;+glFramebufferTexture2DEXT
&lt;br&gt;+mglFramebufferTexture2DEXT
&lt;br&gt;+glFramebufferTexture3D
&lt;br&gt;+mglFramebufferTexture3D
&lt;br&gt;+glFramebufferTexture3DEXT
&lt;br&gt;+mglFramebufferTexture3DEXT
&lt;br&gt;+glFramebufferTextureLayer
&lt;br&gt;+mglFramebufferTextureLayer
&lt;br&gt;+glFramebufferTextureLayerEXT
&lt;br&gt;+mglFramebufferTextureLayerEXT
&lt;br&gt;+glFrontFace
&lt;br&gt;+mglFrontFace
&lt;br&gt;+glFrustum
&lt;br&gt;+mglFrustum
&lt;br&gt;+glGenBuffers
&lt;br&gt;+mglGenBuffers
&lt;br&gt;+glGenBuffersARB
&lt;br&gt;+mglGenBuffersARB
&lt;br&gt;+glGenerateMipmap
&lt;br&gt;+mglGenerateMipmap
&lt;br&gt;+glGenerateMipmapEXT
&lt;br&gt;+mglGenerateMipmapEXT
&lt;br&gt;+glGenFragmentShadersATI
&lt;br&gt;+mglGenFragmentShadersATI
&lt;br&gt;+glGenFramebuffers
&lt;br&gt;+mglGenFramebuffers
&lt;br&gt;+glGenFramebuffersEXT
&lt;br&gt;+mglGenFramebuffersEXT
&lt;br&gt;+glGenLists
&lt;br&gt;+mglGenLists
&lt;br&gt;+glGenProgramsARB
&lt;br&gt;+mglGenProgramsARB
&lt;br&gt;+glGenProgramsNV
&lt;br&gt;+mglGenProgramsNV
&lt;br&gt;+glGenQueries
&lt;br&gt;+mglGenQueries
&lt;br&gt;+glGenQueriesARB
&lt;br&gt;+mglGenQueriesARB
&lt;br&gt;+glGenRenderbuffers
&lt;br&gt;+mglGenRenderbuffers
&lt;br&gt;+glGenRenderbuffersEXT
&lt;br&gt;+mglGenRenderbuffersEXT
&lt;br&gt;+glGenTextures
&lt;br&gt;+mglGenTextures
&lt;br&gt;+glGenTexturesEXT
&lt;br&gt;+mglGenTexturesEXT
&lt;br&gt;+glGenVertexArrays
&lt;br&gt;+mglGenVertexArrays
&lt;br&gt;+glGetActiveAttrib
&lt;br&gt;+mglGetActiveAttrib
&lt;br&gt;+glGetActiveAttribARB
&lt;br&gt;+mglGetActiveAttribARB
&lt;br&gt;+glGetActiveUniform
&lt;br&gt;+mglGetActiveUniform
&lt;br&gt;+glGetActiveUniformARB
&lt;br&gt;+mglGetActiveUniformARB
&lt;br&gt;+glGetAttachedObjectsARB
&lt;br&gt;+mglGetAttachedObjectsARB
&lt;br&gt;+glGetAttachedShaders
&lt;br&gt;+mglGetAttachedShaders
&lt;br&gt;+glGetAttribLocation
&lt;br&gt;+mglGetAttribLocation
&lt;br&gt;+glGetAttribLocationARB
&lt;br&gt;+mglGetAttribLocationARB
&lt;br&gt;+glGetBooleanv
&lt;br&gt;+mglGetBooleanv
&lt;br&gt;+glGetBufferParameteriv
&lt;br&gt;+mglGetBufferParameteriv
&lt;br&gt;+glGetBufferParameterivARB
&lt;br&gt;+mglGetBufferParameterivARB
&lt;br&gt;+glGetBufferPointerv
&lt;br&gt;+mglGetBufferPointerv
&lt;br&gt;+glGetBufferPointervARB
&lt;br&gt;+mglGetBufferPointervARB
&lt;br&gt;+glGetBufferSubData
&lt;br&gt;+mglGetBufferSubData
&lt;br&gt;+glGetBufferSubDataARB
&lt;br&gt;+mglGetBufferSubDataARB
&lt;br&gt;+glGetClipPlane
&lt;br&gt;+mglGetClipPlane
&lt;br&gt;+glGetColorTable
&lt;br&gt;+mglGetColorTable
&lt;br&gt;+glGetColorTableEXT
&lt;br&gt;+mglGetColorTableEXT
&lt;br&gt;+glGetColorTableParameterfv
&lt;br&gt;+mglGetColorTableParameterfv
&lt;br&gt;+glGetColorTableParameterfvEXT
&lt;br&gt;+mglGetColorTableParameterfvEXT
&lt;br&gt;+glGetColorTableParameteriv
&lt;br&gt;+mglGetColorTableParameteriv
&lt;br&gt;+glGetColorTableParameterivEXT
&lt;br&gt;+mglGetColorTableParameterivEXT
&lt;br&gt;+glGetCombinerInputParameterfvNV
&lt;br&gt;+mglGetCombinerInputParameterfvNV
&lt;br&gt;+glGetCombinerInputParameterivNV
&lt;br&gt;+mglGetCombinerInputParameterivNV
&lt;br&gt;+glGetCombinerOutputParameterfvNV
&lt;br&gt;+mglGetCombinerOutputParameterfvNV
&lt;br&gt;+glGetCombinerOutputParameterivNV
&lt;br&gt;+mglGetCombinerOutputParameterivNV
&lt;br&gt;+glGetCompressedTexImage
&lt;br&gt;+mglGetCompressedTexImage
&lt;br&gt;+glGetCompressedTexImageARB
&lt;br&gt;+mglGetCompressedTexImageARB
&lt;br&gt;+glGetConvolutionFilter
&lt;br&gt;+mglGetConvolutionFilter
&lt;br&gt;+glGetConvolutionParameterfv
&lt;br&gt;+mglGetConvolutionParameterfv
&lt;br&gt;+glGetConvolutionParameteriv
&lt;br&gt;+mglGetConvolutionParameteriv
&lt;br&gt;+glGetDoublev
&lt;br&gt;+mglGetDoublev
&lt;br&gt;+glGetError
&lt;br&gt;+mglGetError
&lt;br&gt;+glGetFinalCombinerInputParameterfvNV
&lt;br&gt;+mglGetFinalCombinerInputParameterfvNV
&lt;br&gt;+glGetFinalCombinerInputParameterivNV
&lt;br&gt;+mglGetFinalCombinerInputParameterivNV
&lt;br&gt;+glGetFloatv
&lt;br&gt;+mglGetFloatv
&lt;br&gt;+glGetFramebufferAttachmentParameteriv
&lt;br&gt;+mglGetFramebufferAttachmentParameteriv
&lt;br&gt;+glGetFramebufferAttachmentParameterivEXT
&lt;br&gt;+mglGetFramebufferAttachmentParameterivEXT
&lt;br&gt;+glGetHandleARB
&lt;br&gt;+mglGetHandleARB
&lt;br&gt;+glGetHistogram
&lt;br&gt;+mglGetHistogram
&lt;br&gt;+glGetHistogramParameterfv
&lt;br&gt;+mglGetHistogramParameterfv
&lt;br&gt;+glGetHistogramParameteriv
&lt;br&gt;+mglGetHistogramParameteriv
&lt;br&gt;+glGetInfoLogARB
&lt;br&gt;+mglGetInfoLogARB
&lt;br&gt;+glGetInteger64v
&lt;br&gt;+mglGetInteger64v
&lt;br&gt;+glGetIntegerv
&lt;br&gt;+mglGetIntegerv
&lt;br&gt;+glGetLightfv
&lt;br&gt;+mglGetLightfv
&lt;br&gt;+glGetLightiv
&lt;br&gt;+mglGetLightiv
&lt;br&gt;+glGetMapdv
&lt;br&gt;+mglGetMapdv
&lt;br&gt;+glGetMapfv
&lt;br&gt;+mglGetMapfv
&lt;br&gt;+glGetMapiv
&lt;br&gt;+mglGetMapiv
&lt;br&gt;+glGetMaterialfv
&lt;br&gt;+mglGetMaterialfv
&lt;br&gt;+glGetMaterialiv
&lt;br&gt;+mglGetMaterialiv
&lt;br&gt;+glGetMinmax
&lt;br&gt;+mglGetMinmax
&lt;br&gt;+glGetMinmaxParameterfv
&lt;br&gt;+mglGetMinmaxParameterfv
&lt;br&gt;+glGetMinmaxParameteriv
&lt;br&gt;+mglGetMinmaxParameteriv
&lt;br&gt;+glGetObjectParameterfvARB
&lt;br&gt;+mglGetObjectParameterfvARB
&lt;br&gt;+glGetObjectParameterivARB
&lt;br&gt;+mglGetObjectParameterivARB
&lt;br&gt;+glGetPixelMapfv
&lt;br&gt;+mglGetPixelMapfv
&lt;br&gt;+glGetPixelMapuiv
&lt;br&gt;+mglGetPixelMapuiv
&lt;br&gt;+glGetPixelMapusv
&lt;br&gt;+mglGetPixelMapusv
&lt;br&gt;+glGetPointerv
&lt;br&gt;+mglGetPointerv
&lt;br&gt;+glGetPointervEXT
&lt;br&gt;+mglGetPointervEXT
&lt;br&gt;+glGetPolygonStipple
&lt;br&gt;+mglGetPolygonStipple
&lt;br&gt;+glGetProgramEnvParameterdvARB
&lt;br&gt;+mglGetProgramEnvParameterdvARB
&lt;br&gt;+glGetProgramEnvParameterfvARB
&lt;br&gt;+mglGetProgramEnvParameterfvARB
&lt;br&gt;+glGetProgramInfoLog
&lt;br&gt;+mglGetProgramInfoLog
&lt;br&gt;+glGetProgramiv
&lt;br&gt;+mglGetProgramiv
&lt;br&gt;+glGetProgramivARB
&lt;br&gt;+mglGetProgramivARB
&lt;br&gt;+glGetProgramivNV
&lt;br&gt;+mglGetProgramivNV
&lt;br&gt;+glGetProgramLocalParameterdvARB
&lt;br&gt;+mglGetProgramLocalParameterdvARB
&lt;br&gt;+glGetProgramLocalParameterfvARB
&lt;br&gt;+mglGetProgramLocalParameterfvARB
&lt;br&gt;+glGetProgramNamedParameterdvNV
&lt;br&gt;+mglGetProgramNamedParameterdvNV
&lt;br&gt;+glGetProgramNamedParameterfvNV
&lt;br&gt;+mglGetProgramNamedParameterfvNV
&lt;br&gt;+glGetProgramParameterdvNV
&lt;br&gt;+mglGetProgramParameterdvNV
&lt;br&gt;+glGetProgramParameterfvNV
&lt;br&gt;+mglGetProgramParameterfvNV
&lt;br&gt;+glGetProgramStringARB
&lt;br&gt;+mglGetProgramStringARB
&lt;br&gt;+glGetProgramStringNV
&lt;br&gt;+mglGetProgramStringNV
&lt;br&gt;+glGetQueryiv
&lt;br&gt;+mglGetQueryiv
&lt;br&gt;+glGetQueryivARB
&lt;br&gt;+mglGetQueryivARB
&lt;br&gt;+glGetQueryObjectiv
&lt;br&gt;+mglGetQueryObjectiv
&lt;br&gt;+glGetQueryObjectivARB
&lt;br&gt;+mglGetQueryObjectivARB
&lt;br&gt;+glGetQueryObjectuiv
&lt;br&gt;+mglGetQueryObjectuiv
&lt;br&gt;+glGetQueryObjectuivARB
&lt;br&gt;+mglGetQueryObjectuivARB
&lt;br&gt;+glGetRenderbufferParameteriv
&lt;br&gt;+mglGetRenderbufferParameteriv
&lt;br&gt;+glGetRenderbufferParameterivEXT
&lt;br&gt;+mglGetRenderbufferParameterivEXT
&lt;br&gt;+glGetSeparableFilter
&lt;br&gt;+mglGetSeparableFilter
&lt;br&gt;+glGetShaderInfoLog
&lt;br&gt;+mglGetShaderInfoLog
&lt;br&gt;+glGetShaderiv
&lt;br&gt;+mglGetShaderiv
&lt;br&gt;+glGetShaderSource
&lt;br&gt;+mglGetShaderSource
&lt;br&gt;+glGetShaderSourceARB
&lt;br&gt;+mglGetShaderSourceARB
&lt;br&gt;+glGetString
&lt;br&gt;+mglGetString
&lt;br&gt;+glGetSynciv
&lt;br&gt;+mglGetSynciv
&lt;br&gt;+glGetTexBumpParameterfvATI
&lt;br&gt;+mglGetTexBumpParameterfvATI
&lt;br&gt;+glGetTexBumpParameterivATI
&lt;br&gt;+mglGetTexBumpParameterivATI
&lt;br&gt;+glGetTexEnvfv
&lt;br&gt;+mglGetTexEnvfv
&lt;br&gt;+glGetTexEnviv
&lt;br&gt;+mglGetTexEnviv
&lt;br&gt;+glGetTexGendv
&lt;br&gt;+mglGetTexGendv
&lt;br&gt;+glGetTexGenfv
&lt;br&gt;+mglGetTexGenfv
&lt;br&gt;+glGetTexGeniv
&lt;br&gt;+mglGetTexGeniv
&lt;br&gt;+glGetTexImage
&lt;br&gt;+mglGetTexImage
&lt;br&gt;+glGetTexLevelParameterfv
&lt;br&gt;+mglGetTexLevelParameterfv
&lt;br&gt;+glGetTexLevelParameteriv
&lt;br&gt;+mglGetTexLevelParameteriv
&lt;br&gt;+glGetTexParameterfv
&lt;br&gt;+mglGetTexParameterfv
&lt;br&gt;+glGetTexParameteriv
&lt;br&gt;+mglGetTexParameteriv
&lt;br&gt;+glGetTrackMatrixivNV
&lt;br&gt;+mglGetTrackMatrixivNV
&lt;br&gt;+glGetUniformfv
&lt;br&gt;+mglGetUniformfv
&lt;br&gt;+glGetUniformfvARB
&lt;br&gt;+mglGetUniformfvARB
&lt;br&gt;+glGetUniformiv
&lt;br&gt;+mglGetUniformiv
&lt;br&gt;+glGetUniformivARB
&lt;br&gt;+mglGetUniformivARB
&lt;br&gt;+glGetUniformLocation
&lt;br&gt;+mglGetUniformLocation
&lt;br&gt;+glGetUniformLocationARB
&lt;br&gt;+mglGetUniformLocationARB
&lt;br&gt;+glGetVertexAttribdv
&lt;br&gt;+mglGetVertexAttribdv
&lt;br&gt;+glGetVertexAttribdvARB
&lt;br&gt;+mglGetVertexAttribdvARB
&lt;br&gt;+glGetVertexAttribdvNV
&lt;br&gt;+mglGetVertexAttribdvNV
&lt;br&gt;+glGetVertexAttribfv
&lt;br&gt;+mglGetVertexAttribfv
&lt;br&gt;+glGetVertexAttribfvARB
&lt;br&gt;+mglGetVertexAttribfvARB
&lt;br&gt;+glGetVertexAttribfvNV
&lt;br&gt;+mglGetVertexAttribfvNV
&lt;br&gt;+glGetVertexAttribiv
&lt;br&gt;+mglGetVertexAttribiv
&lt;br&gt;+glGetVertexAttribivARB
&lt;br&gt;+mglGetVertexAttribivARB
&lt;br&gt;+glGetVertexAttribivNV
&lt;br&gt;+mglGetVertexAttribivNV
&lt;br&gt;+glGetVertexAttribPointerv
&lt;br&gt;+mglGetVertexAttribPointerv
&lt;br&gt;+glGetVertexAttribPointervARB
&lt;br&gt;+mglGetVertexAttribPointervARB
&lt;br&gt;+glGetVertexAttribPointervNV
&lt;br&gt;+mglGetVertexAttribPointervNV
&lt;br&gt;+glHint
&lt;br&gt;+mglHint
&lt;br&gt;+glHistogram
&lt;br&gt;+mglHistogram
&lt;br&gt;+glIndexd
&lt;br&gt;+mglIndexd
&lt;br&gt;+glIndexdv
&lt;br&gt;+mglIndexdv
&lt;br&gt;+glIndexf
&lt;br&gt;+mglIndexf
&lt;br&gt;+glIndexfv
&lt;br&gt;+mglIndexfv
&lt;br&gt;+glIndexi
&lt;br&gt;+mglIndexi
&lt;br&gt;+glIndexiv
&lt;br&gt;+mglIndexiv
&lt;br&gt;+glIndexMask
&lt;br&gt;+mglIndexMask
&lt;br&gt;+glIndexPointer
&lt;br&gt;+mglIndexPointer
&lt;br&gt;+glIndexPointerEXT
&lt;br&gt;+mglIndexPointerEXT
&lt;br&gt;+glIndexs
&lt;br&gt;+mglIndexs
&lt;br&gt;+glIndexsv
&lt;br&gt;+mglIndexsv
&lt;br&gt;+glIndexub
&lt;br&gt;+mglIndexub
&lt;br&gt;+glIndexubv
&lt;br&gt;+mglIndexubv
&lt;br&gt;+glInitNames
&lt;br&gt;+mglInitNames
&lt;br&gt;+glInterleavedArrays
&lt;br&gt;+mglInterleavedArrays
&lt;br&gt;+glIsBuffer
&lt;br&gt;+mglIsBuffer
&lt;br&gt;+glIsBufferARB
&lt;br&gt;+mglIsBufferARB
&lt;br&gt;+glIsEnabled
&lt;br&gt;+mglIsEnabled
&lt;br&gt;+glIsFramebuffer
&lt;br&gt;+mglIsFramebuffer
&lt;br&gt;+glIsFramebufferEXT
&lt;br&gt;+mglIsFramebufferEXT
&lt;br&gt;+glIsList
&lt;br&gt;+mglIsList
&lt;br&gt;+glIsProgram
&lt;br&gt;+mglIsProgram
&lt;br&gt;+glIsProgramARB
&lt;br&gt;+mglIsProgramARB
&lt;br&gt;+glIsProgramNV
&lt;br&gt;+mglIsProgramNV
&lt;br&gt;+glIsQuery
&lt;br&gt;+mglIsQuery
&lt;br&gt;+glIsQueryARB
&lt;br&gt;+mglIsQueryARB
&lt;br&gt;+glIsRenderbuffer
&lt;br&gt;+mglIsRenderbuffer
&lt;br&gt;+glIsRenderbufferEXT
&lt;br&gt;+mglIsRenderbufferEXT
&lt;br&gt;+glIsShader
&lt;br&gt;+mglIsShader
&lt;br&gt;+glIsSync
&lt;br&gt;+mglIsSync
&lt;br&gt;+glIsTexture
&lt;br&gt;+mglIsTexture
&lt;br&gt;+glIsTextureEXT
&lt;br&gt;+mglIsTextureEXT
&lt;br&gt;+glIsVertexArray
&lt;br&gt;+mglIsVertexArray
&lt;br&gt;+glLightf
&lt;br&gt;+mglLightf
&lt;br&gt;+glLightfv
&lt;br&gt;+mglLightfv
&lt;br&gt;+glLighti
&lt;br&gt;+mglLighti
&lt;br&gt;+glLightiv
&lt;br&gt;+mglLightiv
&lt;br&gt;+glLightModelf
&lt;br&gt;+mglLightModelf
&lt;br&gt;+glLightModelfv
&lt;br&gt;+mglLightModelfv
&lt;br&gt;+glLightModeli
&lt;br&gt;+mglLightModeli
&lt;br&gt;+glLightModeliv
&lt;br&gt;+mglLightModeliv
&lt;br&gt;+glLineStipple
&lt;br&gt;+mglLineStipple
&lt;br&gt;+glLineWidth
&lt;br&gt;+mglLineWidth
&lt;br&gt;+glLinkProgram
&lt;br&gt;+mglLinkProgram
&lt;br&gt;+glLinkProgramARB
&lt;br&gt;+mglLinkProgramARB
&lt;br&gt;+glListBase
&lt;br&gt;+mglListBase
&lt;br&gt;+glLoadIdentity
&lt;br&gt;+mglLoadIdentity
&lt;br&gt;+glLoadMatrixd
&lt;br&gt;+mglLoadMatrixd
&lt;br&gt;+glLoadMatrixf
&lt;br&gt;+mglLoadMatrixf
&lt;br&gt;+glLoadName
&lt;br&gt;+mglLoadName
&lt;br&gt;+glLoadProgramNV
&lt;br&gt;+mglLoadProgramNV
&lt;br&gt;+glLoadTransposeMatrixd
&lt;br&gt;+mglLoadTransposeMatrixd
&lt;br&gt;+glLoadTransposeMatrixdARB
&lt;br&gt;+mglLoadTransposeMatrixdARB
&lt;br&gt;+glLoadTransposeMatrixf
&lt;br&gt;+mglLoadTransposeMatrixf
&lt;br&gt;+glLoadTransposeMatrixfARB
&lt;br&gt;+mglLoadTransposeMatrixfARB
&lt;br&gt;+glLockArraysEXT
&lt;br&gt;+mglLockArraysEXT
&lt;br&gt;+glLogicOp
&lt;br&gt;+mglLogicOp
&lt;br&gt;+glMap1d
&lt;br&gt;+mglMap1d
&lt;br&gt;+glMap1f
&lt;br&gt;+mglMap1f
&lt;br&gt;+glMap2d
&lt;br&gt;+mglMap2d
&lt;br&gt;+glMap2f
&lt;br&gt;+mglMap2f
&lt;br&gt;+glMapBuffer
&lt;br&gt;+mglMapBuffer
&lt;br&gt;+glMapBufferARB
&lt;br&gt;+mglMapBufferARB
&lt;br&gt;+glMapBufferRange
&lt;br&gt;+mglMapBufferRange
&lt;br&gt;+glMapGrid1d
&lt;br&gt;+mglMapGrid1d
&lt;br&gt;+glMapGrid1f
&lt;br&gt;+mglMapGrid1f
&lt;br&gt;+glMapGrid2d
&lt;br&gt;+mglMapGrid2d
&lt;br&gt;+glMapGrid2f
&lt;br&gt;+mglMapGrid2f
&lt;br&gt;+glMaterialf
&lt;br&gt;+mglMaterialf
&lt;br&gt;+glMaterialfv
&lt;br&gt;+mglMaterialfv
&lt;br&gt;+glMateriali
&lt;br&gt;+mglMateriali
&lt;br&gt;+glMaterialiv
&lt;br&gt;+mglMaterialiv
&lt;br&gt;+glMatrixMode
&lt;br&gt;+mglMatrixMode
&lt;br&gt;+glMinmax
&lt;br&gt;+mglMinmax
&lt;br&gt;+glMultiDrawArrays
&lt;br&gt;+mglMultiDrawArrays
&lt;br&gt;+glMultiDrawArraysEXT
&lt;br&gt;+mglMultiDrawArraysEXT
&lt;br&gt;+glMultiDrawElements
&lt;br&gt;+mglMultiDrawElements
&lt;br&gt;+glMultiDrawElementsBaseVertex
&lt;br&gt;+mglMultiDrawElementsBaseVertex
&lt;br&gt;+glMultiDrawElementsEXT
&lt;br&gt;+mglMultiDrawElementsEXT
&lt;br&gt;+glMultiTexCoord1d
&lt;br&gt;+mglMultiTexCoord1d
&lt;br&gt;+glMultiTexCoord1dARB
&lt;br&gt;+mglMultiTexCoord1dARB
&lt;br&gt;+glMultiTexCoord1dv
&lt;br&gt;+mglMultiTexCoord1dv
&lt;br&gt;+glMultiTexCoord1dvARB
&lt;br&gt;+mglMultiTexCoord1dvARB
&lt;br&gt;+glMultiTexCoord1f
&lt;br&gt;+mglMultiTexCoord1f
&lt;br&gt;+glMultiTexCoord1fARB
&lt;br&gt;+mglMultiTexCoord1fARB
&lt;br&gt;+glMultiTexCoord1fv
&lt;br&gt;+mglMultiTexCoord1fv
&lt;br&gt;+glMultiTexCoord1fvARB
&lt;br&gt;+mglMultiTexCoord1fvARB
&lt;br&gt;+glMultiTexCoord1i
&lt;br&gt;+mglMultiTexCoord1i
&lt;br&gt;+glMultiTexCoord1iARB
&lt;br&gt;+mglMultiTexCoord1iARB
&lt;br&gt;+glMultiTexCoord1iv
&lt;br&gt;+mglMultiTexCoord1iv
&lt;br&gt;+glMultiTexCoord1ivARB
&lt;br&gt;+mglMultiTexCoord1ivARB
&lt;br&gt;+glMultiTexCoord1s
&lt;br&gt;+mglMultiTexCoord1s
&lt;br&gt;+glMultiTexCoord1sARB
&lt;br&gt;+mglMultiTexCoord1sARB
&lt;br&gt;+glMultiTexCoord1sv
&lt;br&gt;+mglMultiTexCoord1sv
&lt;br&gt;+glMultiTexCoord1svARB
&lt;br&gt;+mglMultiTexCoord1svARB
&lt;br&gt;+glMultiTexCoord2d
&lt;br&gt;+mglMultiTexCoord2d
&lt;br&gt;+glMultiTexCoord2dARB
&lt;br&gt;+mglMultiTexCoord2dARB
&lt;br&gt;+glMultiTexCoord2dv
&lt;br&gt;+mglMultiTexCoord2dv
&lt;br&gt;+glMultiTexCoord2dvARB
&lt;br&gt;+mglMultiTexCoord2dvARB
&lt;br&gt;+glMultiTexCoord2f
&lt;br&gt;+mglMultiTexCoord2f
&lt;br&gt;+glMultiTexCoord2fARB
&lt;br&gt;+mglMultiTexCoord2fARB
&lt;br&gt;+glMultiTexCoord2fv
&lt;br&gt;+mglMultiTexCoord2fv
&lt;br&gt;+glMultiTexCoord2fvARB
&lt;br&gt;+mglMultiTexCoord2fvARB
&lt;br&gt;+glMultiTexCoord2i
&lt;br&gt;+mglMultiTexCoord2i
&lt;br&gt;+glMultiTexCoord2iARB
&lt;br&gt;+mglMultiTexCoord2iARB
&lt;br&gt;+glMultiTexCoord2iv
&lt;br&gt;+mglMultiTexCoord2iv
&lt;br&gt;+glMultiTexCoord2ivARB
&lt;br&gt;+mglMultiTexCoord2ivARB
&lt;br&gt;+glMultiTexCoord2s
&lt;br&gt;+mglMultiTexCoord2s
&lt;br&gt;+glMultiTexCoord2sARB
&lt;br&gt;+mglMultiTexCoord2sARB
&lt;br&gt;+glMultiTexCoord2sv
&lt;br&gt;+mglMultiTexCoord2sv
&lt;br&gt;+glMultiTexCoord2svARB
&lt;br&gt;+mglMultiTexCoord2svARB
&lt;br&gt;+glMultiTexCoord3d
&lt;br&gt;+mglMultiTexCoord3d
&lt;br&gt;+glMultiTexCoord3dARB
&lt;br&gt;+mglMultiTexCoord3dARB
&lt;br&gt;+glMultiTexCoord3dv
&lt;br&gt;+mglMultiTexCoord3dv
&lt;br&gt;+glMultiTexCoord3dvARB
&lt;br&gt;+mglMultiTexCoord3dvARB
&lt;br&gt;+glMultiTexCoord3f
&lt;br&gt;+mglMultiTexCoord3f
&lt;br&gt;+glMultiTexCoord3fARB
&lt;br&gt;+mglMultiTexCoord3fARB
&lt;br&gt;+glMultiTexCoord3fv
&lt;br&gt;+mglMultiTexCoord3fv
&lt;br&gt;+glMultiTexCoord3fvARB
&lt;br&gt;+mglMultiTexCoord3fvARB
&lt;br&gt;+glMultiTexCoord3i
&lt;br&gt;+mglMultiTexCoord3i
&lt;br&gt;+glMultiTexCoord3iARB
&lt;br&gt;+mglMultiTexCoord3iARB
&lt;br&gt;+glMultiTexCoord3iv
&lt;br&gt;+mglMultiTexCoord3iv
&lt;br&gt;+glMultiTexCoord3ivARB
&lt;br&gt;+mglMultiTexCoord3ivARB
&lt;br&gt;+glMultiTexCoord3s
&lt;br&gt;+mglMultiTexCoord3s
&lt;br&gt;+glMultiTexCoord3sARB
&lt;br&gt;+mglMultiTexCoord3sARB
&lt;br&gt;+glMultiTexCoord3sv
&lt;br&gt;+mglMultiTexCoord3sv
&lt;br&gt;+glMultiTexCoord3svARB
&lt;br&gt;+mglMultiTexCoord3svARB
&lt;br&gt;+glMultiTexCoord4d
&lt;br&gt;+mglMultiTexCoord4d
&lt;br&gt;+glMultiTexCoord4dARB
&lt;br&gt;+mglMultiTexCoord4dARB
&lt;br&gt;+glMultiTexCoord4dv
&lt;br&gt;+mglMultiTexCoord4dv
&lt;br&gt;+glMultiTexCoord4dvARB
&lt;br&gt;+mglMultiTexCoord4dvARB
&lt;br&gt;+glMultiTexCoord4f
&lt;br&gt;+mglMultiTexCoord4f
&lt;br&gt;+glMultiTexCoord4fARB
&lt;br&gt;+mglMultiTexCoord4fARB
&lt;br&gt;+glMultiTexCoord4fv
&lt;br&gt;+mglMultiTexCoord4fv
&lt;br&gt;+glMultiTexCoord4fvARB
&lt;br&gt;+mglMultiTexCoord4fvARB
&lt;br&gt;+glMultiTexCoord4i
&lt;br&gt;+mglMultiTexCoord4i
&lt;br&gt;+glMultiTexCoord4iARB
&lt;br&gt;+mglMultiTexCoord4iARB
&lt;br&gt;+glMultiTexCoord4iv
&lt;br&gt;+mglMultiTexCoord4iv
&lt;br&gt;+glMultiTexCoord4ivARB
&lt;br&gt;+mglMultiTexCoord4ivARB
&lt;br&gt;+glMultiTexCoord4s
&lt;br&gt;+mglMultiTexCoord4s
&lt;br&gt;+glMultiTexCoord4sARB
&lt;br&gt;+mglMultiTexCoord4sARB
&lt;br&gt;+glMultiTexCoord4sv
&lt;br&gt;+mglMultiTexCoord4sv
&lt;br&gt;+glMultiTexCoord4svARB
&lt;br&gt;+mglMultiTexCoord4svARB
&lt;br&gt;+glMultMatrixd
&lt;br&gt;+mglMultMatrixd
&lt;br&gt;+glMultMatrixf
&lt;br&gt;+mglMultMatrixf
&lt;br&gt;+glMultTransposeMatrixd
&lt;br&gt;+mglMultTransposeMatrixd
&lt;br&gt;+glMultTransposeMatrixdARB
&lt;br&gt;+mglMultTransposeMatrixdARB
&lt;br&gt;+glMultTransposeMatrixf
&lt;br&gt;+mglMultTransposeMatrixf
&lt;br&gt;+glMultTransposeMatrixfARB
&lt;br&gt;+mglMultTransposeMatrixfARB
&lt;br&gt;+glNewList
&lt;br&gt;+mglNewList
&lt;br&gt;+glNormal3b
&lt;br&gt;+mglNormal3b
&lt;br&gt;+glNormal3bv
&lt;br&gt;+mglNormal3bv
&lt;br&gt;+glNormal3d
&lt;br&gt;+mglNormal3d
&lt;br&gt;+glNormal3dv
&lt;br&gt;+mglNormal3dv
&lt;br&gt;+glNormal3f
&lt;br&gt;+mglNormal3f
&lt;br&gt;+glNormal3fv
&lt;br&gt;+mglNormal3fv
&lt;br&gt;+glNormal3i
&lt;br&gt;+mglNormal3i
&lt;br&gt;+glNormal3iv
&lt;br&gt;+mglNormal3iv
&lt;br&gt;+glNormal3s
&lt;br&gt;+mglNormal3s
&lt;br&gt;+glNormal3sv
&lt;br&gt;+mglNormal3sv
&lt;br&gt;+glNormalPointer
&lt;br&gt;+mglNormalPointer
&lt;br&gt;+glNormalPointerEXT
&lt;br&gt;+mglNormalPointerEXT
&lt;br&gt;+glOrtho
&lt;br&gt;+mglOrtho
&lt;br&gt;+glPassTexCoordATI
&lt;br&gt;+mglPassTexCoordATI
&lt;br&gt;+glPassThrough
&lt;br&gt;+mglPassThrough
&lt;br&gt;+glPixelMapfv
&lt;br&gt;+mglPixelMapfv
&lt;br&gt;+glPixelMapuiv
&lt;br&gt;+mglPixelMapuiv
&lt;br&gt;+glPixelMapusv
&lt;br&gt;+mglPixelMapusv
&lt;br&gt;+glPixelStoref
&lt;br&gt;+mglPixelStoref
&lt;br&gt;+glPixelStorei
&lt;br&gt;+mglPixelStorei
&lt;br&gt;+glPixelTransferf
&lt;br&gt;+mglPixelTransferf
&lt;br&gt;+glPixelTransferi
&lt;br&gt;+mglPixelTransferi
&lt;br&gt;+glPixelZoom
&lt;br&gt;+mglPixelZoom
&lt;br&gt;+glPointParameterf
&lt;br&gt;+mglPointParameterf
&lt;br&gt;+glPointParameterfARB
&lt;br&gt;+mglPointParameterfARB
&lt;br&gt;+glPointParameterfEXT
&lt;br&gt;+mglPointParameterfEXT
&lt;br&gt;+glPointParameterfv
&lt;br&gt;+mglPointParameterfv
&lt;br&gt;+glPointParameterfvARB
&lt;br&gt;+mglPointParameterfvARB
&lt;br&gt;+glPointParameterfvEXT
&lt;br&gt;+mglPointParameterfvEXT
&lt;br&gt;+glPointParameteri
&lt;br&gt;+mglPointParameteri
&lt;br&gt;+glPointParameteriNV
&lt;br&gt;+mglPointParameteriNV
&lt;br&gt;+glPointParameteriv
&lt;br&gt;+mglPointParameteriv
&lt;br&gt;+glPointParameterivNV
&lt;br&gt;+mglPointParameterivNV
&lt;br&gt;+glPointSize
&lt;br&gt;+mglPointSize
&lt;br&gt;+glPolygonMode
&lt;br&gt;+mglPolygonMode
&lt;br&gt;+glPolygonOffset
&lt;br&gt;+mglPolygonOffset
&lt;br&gt;+glPolygonOffsetEXT
&lt;br&gt;+mglPolygonOffsetEXT
&lt;br&gt;+glPolygonStipple
&lt;br&gt;+mglPolygonStipple
&lt;br&gt;+glPopAttrib
&lt;br&gt;+mglPopAttrib
&lt;br&gt;+glPopClientAttrib
&lt;br&gt;+mglPopClientAttrib
&lt;br&gt;+glPopMatrix
&lt;br&gt;+mglPopMatrix
&lt;br&gt;+glPopName
&lt;br&gt;+mglPopName
&lt;br&gt;+glPrioritizeTextures
&lt;br&gt;+mglPrioritizeTextures
&lt;br&gt;+glPrioritizeTexturesEXT
&lt;br&gt;+mglPrioritizeTexturesEXT
&lt;br&gt;+glProgramEnvParameter4dARB
&lt;br&gt;+mglProgramEnvParameter4dARB
&lt;br&gt;+glProgramEnvParameter4dvARB
&lt;br&gt;+mglProgramEnvParameter4dvARB
&lt;br&gt;+glProgramEnvParameter4fARB
&lt;br&gt;+mglProgramEnvParameter4fARB
&lt;br&gt;+glProgramEnvParameter4fvARB
&lt;br&gt;+mglProgramEnvParameter4fvARB
&lt;br&gt;+glProgramLocalParameter4dARB
&lt;br&gt;+mglProgramLocalParameter4dARB
&lt;br&gt;+glProgramLocalParameter4dvARB
&lt;br&gt;+mglProgramLocalParameter4dvARB
&lt;br&gt;+glProgramLocalParameter4fARB
&lt;br&gt;+mglProgramLocalParameter4fARB
&lt;br&gt;+glProgramLocalParameter4fvARB
&lt;br&gt;+mglProgramLocalParameter4fvARB
&lt;br&gt;+glProgramNamedParameter4dNV
&lt;br&gt;+mglProgramNamedParameter4dNV
&lt;br&gt;+glProgramNamedParameter4dvNV
&lt;br&gt;+mglProgramNamedParameter4dvNV
&lt;br&gt;+glProgramNamedParameter4fNV
&lt;br&gt;+mglProgramNamedParameter4fNV
&lt;br&gt;+glProgramNamedParameter4fvNV
&lt;br&gt;+mglProgramNamedParameter4fvNV
&lt;br&gt;+glProgramParameter4dNV
&lt;br&gt;+mglProgramParameter4dNV
&lt;br&gt;+glProgramParameter4dvNV
&lt;br&gt;+mglProgramParameter4dvNV
&lt;br&gt;+glProgramParameter4fNV
&lt;br&gt;+mglProgramParameter4fNV
&lt;br&gt;+glProgramParameter4fvNV
&lt;br&gt;+mglProgramParameter4fvNV
&lt;br&gt;+glProgramParameters4dvNV
&lt;br&gt;+mglProgramParameters4dvNV
&lt;br&gt;+glProgramParameters4fvNV
&lt;br&gt;+mglProgramParameters4fvNV
&lt;br&gt;+glProgramStringARB
&lt;br&gt;+mglProgramStringARB
&lt;br&gt;+glProvokingVertex
&lt;br&gt;+mglProvokingVertex
&lt;br&gt;+glProvokingVertexEXT
&lt;br&gt;+mglProvokingVertexEXT
&lt;br&gt;+glPushAttrib
&lt;br&gt;+mglPushAttrib
&lt;br&gt;+glPushClientAttrib
&lt;br&gt;+mglPushClientAttrib
&lt;br&gt;+glPushMatrix
&lt;br&gt;+mglPushMatrix
&lt;br&gt;+glPushName
&lt;br&gt;+mglPushName
&lt;br&gt;+glRasterPos2d
&lt;br&gt;+mglRasterPos2d
&lt;br&gt;+glRasterPos2dv
&lt;br&gt;+mglRasterPos2dv
&lt;br&gt;+glRasterPos2f
&lt;br&gt;+mglRasterPos2f
&lt;br&gt;+glRasterPos2fv
&lt;br&gt;+mglRasterPos2fv
&lt;br&gt;+glRasterPos2i
&lt;br&gt;+mglRasterPos2i
&lt;br&gt;+glRasterPos2iv
&lt;br&gt;+mglRasterPos2iv
&lt;br&gt;+glRasterPos2s
&lt;br&gt;+mglRasterPos2s
&lt;br&gt;+glRasterPos2sv
&lt;br&gt;+mglRasterPos2sv
&lt;br&gt;+glRasterPos3d
&lt;br&gt;+mglRasterPos3d
&lt;br&gt;+glRasterPos3dv
&lt;br&gt;+mglRasterPos3dv
&lt;br&gt;+glRasterPos3f
&lt;br&gt;+mglRasterPos3f
&lt;br&gt;+glRasterPos3fv
&lt;br&gt;+mglRasterPos3fv
&lt;br&gt;+glRasterPos3i
&lt;br&gt;+mglRasterPos3i
&lt;br&gt;+glRasterPos3iv
&lt;br&gt;+mglRasterPos3iv
&lt;br&gt;+glRasterPos3s
&lt;br&gt;+mglRasterPos3s
&lt;br&gt;+glRasterPos3sv
&lt;br&gt;+mglRasterPos3sv
&lt;br&gt;+glRasterPos4d
&lt;br&gt;+mglRasterPos4d
&lt;br&gt;+glRasterPos4dv
&lt;br&gt;+mglRasterPos4dv
&lt;br&gt;+glRasterPos4f
&lt;br&gt;+mglRasterPos4f
&lt;br&gt;+glRasterPos4fv
&lt;br&gt;+mglRasterPos4fv
&lt;br&gt;+glRasterPos4i
&lt;br&gt;+mglRasterPos4i
&lt;br&gt;+glRasterPos4iv
&lt;br&gt;+mglRasterPos4iv
&lt;br&gt;+glRasterPos4s
&lt;br&gt;+mglRasterPos4s
&lt;br&gt;+glRasterPos4sv
&lt;br&gt;+mglRasterPos4sv
&lt;br&gt;+glReadBuffer
&lt;br&gt;+mglReadBuffer
&lt;br&gt;+glReadPixels
&lt;br&gt;+mglReadPixels
&lt;br&gt;+glRectd
&lt;br&gt;+mglRectd
&lt;br&gt;+glRectdv
&lt;br&gt;+mglRectdv
&lt;br&gt;+glRectf
&lt;br&gt;+mglRectf
&lt;br&gt;+glRectfv
&lt;br&gt;+mglRectfv
&lt;br&gt;+glRecti
&lt;br&gt;+mglRecti
&lt;br&gt;+glRectiv
&lt;br&gt;+mglRectiv
&lt;br&gt;+glRects
&lt;br&gt;+mglRects
&lt;br&gt;+glRectsv
&lt;br&gt;+mglRectsv
&lt;br&gt;+glRenderbufferStorage
&lt;br&gt;+mglRenderbufferStorage
&lt;br&gt;+glRenderbufferStorageEXT
&lt;br&gt;+mglRenderbufferStorageEXT
&lt;br&gt;+glRenderbufferStorageMultisample
&lt;br&gt;+mglRenderbufferStorageMultisample
&lt;br&gt;+glRenderbufferStorageMultisampleEXT
&lt;br&gt;+mglRenderbufferStorageMultisampleEXT
&lt;br&gt;+glRenderMode
&lt;br&gt;+mglRenderMode
&lt;br&gt;+glRequestResidentProgramsNV
&lt;br&gt;+mglRequestResidentProgramsNV
&lt;br&gt;+glResetHistogram
&lt;br&gt;+mglResetHistogram
&lt;br&gt;+glResetMinmax
&lt;br&gt;+mglResetMinmax
&lt;br&gt;+glResizeBuffersMESA
&lt;br&gt;+mglResizeBuffersMESA
&lt;br&gt;+glRotated
&lt;br&gt;+mglRotated
&lt;br&gt;+glRotatef
&lt;br&gt;+mglRotatef
&lt;br&gt;+glSampleCoverage
&lt;br&gt;+mglSampleCoverage
&lt;br&gt;+glSampleCoverageARB
&lt;br&gt;+mglSampleCoverageARB
&lt;br&gt;+glSampleMapATI
&lt;br&gt;+mglSampleMapATI
&lt;br&gt;+glScaled
&lt;br&gt;+mglScaled
&lt;br&gt;+glScalef
&lt;br&gt;+mglScalef
&lt;br&gt;+glScissor
&lt;br&gt;+mglScissor
&lt;br&gt;+glSecondaryColor3b
&lt;br&gt;+mglSecondaryColor3b
&lt;br&gt;+glSecondaryColor3bEXT
&lt;br&gt;+mglSecondaryColor3bEXT
&lt;br&gt;+glSecondaryColor3bv
&lt;br&gt;+mglSecondaryColor3bv
&lt;br&gt;+glSecondaryColor3bvEXT
&lt;br&gt;+mglSecondaryColor3bvEXT
&lt;br&gt;+glSecondaryColor3d
&lt;br&gt;+mglSecondaryColor3d
&lt;br&gt;+glSecondaryColor3dEXT
&lt;br&gt;+mglSecondaryColor3dEXT
&lt;br&gt;+glSecondaryColor3dv
&lt;br&gt;+mglSecondaryColor3dv
&lt;br&gt;+glSecondaryColor3dvEXT
&lt;br&gt;+mglSecondaryColor3dvEXT
&lt;br&gt;+glSecondaryColor3f
&lt;br&gt;+mglSecondaryColor3f
&lt;br&gt;+glSecondaryColor3fEXT
&lt;br&gt;+mglSecondaryColor3fEXT
&lt;br&gt;+glSecondaryColor3fv
&lt;br&gt;+mglSecondaryColor3fv
&lt;br&gt;+glSecondaryColor3fvEXT
&lt;br&gt;+mglSecondaryColor3fvEXT
&lt;br&gt;+glSecondaryColor3i
&lt;br&gt;+mglSecondaryColor3i
&lt;br&gt;+glSecondaryColor3iEXT
&lt;br&gt;+mglSecondaryColor3iEXT
&lt;br&gt;+glSecondaryColor3iv
&lt;br&gt;+mglSecondaryColor3iv
&lt;br&gt;+glSecondaryColor3ivEXT
&lt;br&gt;+mglSecondaryColor3ivEXT
&lt;br&gt;+glSecondaryColor3s
&lt;br&gt;+mglSecondaryColor3s
&lt;br&gt;+glSecondaryColor3sEXT
&lt;br&gt;+mglSecondaryColor3sEXT
&lt;br&gt;+glSecondaryColor3sv
&lt;br&gt;+mglSecondaryColor3sv
&lt;br&gt;+glSecondaryColor3svEXT
&lt;br&gt;+mglSecondaryColor3svEXT
&lt;br&gt;+glSecondaryColor3ub
&lt;br&gt;+mglSecondaryColor3ub
&lt;br&gt;+glSecondaryColor3ubEXT
&lt;br&gt;+mglSecondaryColor3ubEXT
&lt;br&gt;+glSecondaryColor3ubv
&lt;br&gt;+mglSecondaryColor3ubv
&lt;br&gt;+glSecondaryColor3ubvEXT
&lt;br&gt;+mglSecondaryColor3ubvEXT
&lt;br&gt;+glSecondaryColor3ui
&lt;br&gt;+mglSecondaryColor3ui
&lt;br&gt;+glSecondaryColor3uiEXT
&lt;br&gt;+mglSecondaryColor3uiEXT
&lt;br&gt;+glSecondaryColor3uiv
&lt;br&gt;+mglSecondaryColor3uiv
&lt;br&gt;+glSecondaryColor3uivEXT
&lt;br&gt;+mglSecondaryColor3uivEXT
&lt;br&gt;+glSecondaryColor3us
&lt;br&gt;+mglSecondaryColor3us
&lt;br&gt;+glSecondaryColor3usEXT
&lt;br&gt;+mglSecondaryColor3usEXT
&lt;br&gt;+glSecondaryColor3usv
&lt;br&gt;+mglSecondaryColor3usv
&lt;br&gt;+glSecondaryColor3usvEXT
&lt;br&gt;+mglSecondaryColor3usvEXT
&lt;br&gt;+glSecondaryColorPointer
&lt;br&gt;+mglSecondaryColorPointer
&lt;br&gt;+glSecondaryColorPointerEXT
&lt;br&gt;+mglSecondaryColorPointerEXT
&lt;br&gt;+glSelectBuffer
&lt;br&gt;+mglSelectBuffer
&lt;br&gt;+glSeparableFilter2D
&lt;br&gt;+mglSeparableFilter2D
&lt;br&gt;+glSetFragmentShaderConstantATI
&lt;br&gt;+mglSetFragmentShaderConstantATI
&lt;br&gt;+glShadeModel
&lt;br&gt;+mglShadeModel
&lt;br&gt;+glShaderSource
&lt;br&gt;+mglShaderSource
&lt;br&gt;+glShaderSourceARB
&lt;br&gt;+mglShaderSourceARB
&lt;br&gt;+glStencilFunc
&lt;br&gt;+mglStencilFunc
&lt;br&gt;+glStencilFuncSeparate
&lt;br&gt;+mglStencilFuncSeparate
&lt;br&gt;+glStencilMask
&lt;br&gt;+mglStencilMask
&lt;br&gt;+glStencilMaskSeparate
&lt;br&gt;+mglStencilMaskSeparate
&lt;br&gt;+glStencilOp
&lt;br&gt;+mglStencilOp
&lt;br&gt;+glStencilOpSeparate
&lt;br&gt;+mglStencilOpSeparate
&lt;br&gt;+glTexBumpParameterfvATI
&lt;br&gt;+mglTexBumpParameterfvATI
&lt;br&gt;+glTexBumpParameterivATI
&lt;br&gt;+mglTexBumpParameterivATI
&lt;br&gt;+glTexCoord1d
&lt;br&gt;+mglTexCoord1d
&lt;br&gt;+glTexCoord1dv
&lt;br&gt;+mglTexCoord1dv
&lt;br&gt;+glTexCoord1f
&lt;br&gt;+mglTexCoord1f
&lt;br&gt;+glTexCoord1fv
&lt;br&gt;+mglTexCoord1fv
&lt;br&gt;+glTexCoord1i
&lt;br&gt;+mglTexCoord1i
&lt;br&gt;+glTexCoord1iv
&lt;br&gt;+mglTexCoord1iv
&lt;br&gt;+glTexCoord1s
&lt;br&gt;+mglTexCoord1s
&lt;br&gt;+glTexCoord1sv
&lt;br&gt;+mglTexCoord1sv
&lt;br&gt;+glTexCoord2d
&lt;br&gt;+mglTexCoord2d
&lt;br&gt;+glTexCoord2dv
&lt;br&gt;+mglTexCoord2dv
&lt;br&gt;+glTexCoord2f
&lt;br&gt;+mglTexCoord2f
&lt;br&gt;+glTexCoord2fv
&lt;br&gt;+mglTexCoord2fv
&lt;br&gt;+glTexCoord2i
&lt;br&gt;+mglTexCoord2i
&lt;br&gt;+glTexCoord2iv
&lt;br&gt;+mglTexCoord2iv
&lt;br&gt;+glTexCoord2s
&lt;br&gt;+mglTexCoord2s
&lt;br&gt;+glTexCoord2sv
&lt;br&gt;+mglTexCoord2sv
&lt;br&gt;+glTexCoord3d
&lt;br&gt;+mglTexCoord3d
&lt;br&gt;+glTexCoord3dv
&lt;br&gt;+mglTexCoord3dv
&lt;br&gt;+glTexCoord3f
&lt;br&gt;+mglTexCoord3f
&lt;br&gt;+glTexCoord3fv
&lt;br&gt;+mglTexCoord3fv
&lt;br&gt;+glTexCoord3i
&lt;br&gt;+mglTexCoord3i
&lt;br&gt;+glTexCoord3iv
&lt;br&gt;+mglTexCoord3iv
&lt;br&gt;+glTexCoord3s
&lt;br&gt;+mglTexCoord3s
&lt;br&gt;+glTexCoord3sv
&lt;br&gt;+mglTexCoord3sv
&lt;br&gt;+glTexCoord4d
&lt;br&gt;+mglTexCoord4d
&lt;br&gt;+glTexCoord4dv
&lt;br&gt;+mglTexCoord4dv
&lt;br&gt;+glTexCoord4f
&lt;br&gt;+mglTexCoord4f
&lt;br&gt;+glTexCoord4fv
&lt;br&gt;+mglTexCoord4fv
&lt;br&gt;+glTexCoord4i
&lt;br&gt;+mglTexCoord4i
&lt;br&gt;+glTexCoord4iv
&lt;br&gt;+mglTexCoord4iv
&lt;br&gt;+glTexCoord4s
&lt;br&gt;+mglTexCoord4s
&lt;br&gt;+glTexCoord4sv
&lt;br&gt;+mglTexCoord4sv
&lt;br&gt;+glTexCoordPointer
&lt;br&gt;+mglTexCoordPointer
&lt;br&gt;+glTexCoordPointerEXT
&lt;br&gt;+mglTexCoordPointerEXT
&lt;br&gt;+glTexEnvf
&lt;br&gt;+mglTexEnvf
&lt;br&gt;+glTexEnvfv
&lt;br&gt;+mglTexEnvfv
&lt;br&gt;+glTexEnvi
&lt;br&gt;+mglTexEnvi
&lt;br&gt;+glTexEnviv
&lt;br&gt;+mglTexEnviv
&lt;br&gt;+glTexGend
&lt;br&gt;+mglTexGend
&lt;br&gt;+glTexGendv
&lt;br&gt;+mglTexGendv
&lt;br&gt;+glTexGenf
&lt;br&gt;+mglTexGenf
&lt;br&gt;+glTexGenfv
&lt;br&gt;+mglTexGenfv
&lt;br&gt;+glTexGeni
&lt;br&gt;+mglTexGeni
&lt;br&gt;+glTexGeniv
&lt;br&gt;+mglTexGeniv
&lt;br&gt;+glTexImage1D
&lt;br&gt;+mglTexImage1D
&lt;br&gt;+glTexImage2D
&lt;br&gt;+mglTexImage2D
&lt;br&gt;+glTexImage3D
&lt;br&gt;+mglTexImage3D
&lt;br&gt;+glTexImage3DEXT
&lt;br&gt;+mglTexImage3DEXT
&lt;br&gt;+glTexParameterf
&lt;br&gt;+mglTexParameterf
&lt;br&gt;+glTexParameterfv
&lt;br&gt;+mglTexParameterfv
&lt;br&gt;+glTexParameteri
&lt;br&gt;+mglTexParameteri
&lt;br&gt;+glTexParameteriv
&lt;br&gt;+mglTexParameteriv
&lt;br&gt;+glTexSubImage1D
&lt;br&gt;+mglTexSubImage1D
&lt;br&gt;+glTexSubImage1DEXT
&lt;br&gt;+mglTexSubImage1DEXT
&lt;br&gt;+glTexSubImage2D
&lt;br&gt;+mglTexSubImage2D
&lt;br&gt;+glTexSubImage2DEXT
&lt;br&gt;+mglTexSubImage2DEXT
&lt;br&gt;+glTexSubImage3D
&lt;br&gt;+mglTexSubImage3D
&lt;br&gt;+glTexSubImage3DEXT
&lt;br&gt;+mglTexSubImage3DEXT
&lt;br&gt;+glTrackMatrixNV
&lt;br&gt;+mglTrackMatrixNV
&lt;br&gt;+glTranslated
&lt;br&gt;+mglTranslated
&lt;br&gt;+glTranslatef
&lt;br&gt;+mglTranslatef
&lt;br&gt;+glUniform1f
&lt;br&gt;+mglUniform1f
&lt;br&gt;+glUniform1fARB
&lt;br&gt;+mglUniform1fARB
&lt;br&gt;+glUniform1fv
&lt;br&gt;+mglUniform1fv
&lt;br&gt;+glUniform1fvARB
&lt;br&gt;+mglUniform1fvARB
&lt;br&gt;+glUniform1i
&lt;br&gt;+mglUniform1i
&lt;br&gt;+glUniform1iARB
&lt;br&gt;+mglUniform1iARB
&lt;br&gt;+glUniform1iv
&lt;br&gt;+mglUniform1iv
&lt;br&gt;+glUniform1ivARB
&lt;br&gt;+mglUniform1ivARB
&lt;br&gt;+glUniform2f
&lt;br&gt;+mglUniform2f
&lt;br&gt;+glUniform2fARB
&lt;br&gt;+mglUniform2fARB
&lt;br&gt;+glUniform2fv
&lt;br&gt;+mglUniform2fv
&lt;br&gt;+glUniform2fvARB
&lt;br&gt;+mglUniform2fvARB
&lt;br&gt;+glUniform2i
&lt;br&gt;+mglUniform2i
&lt;br&gt;+glUniform2iARB
&lt;br&gt;+mglUniform2iARB
&lt;br&gt;+glUniform2iv
&lt;br&gt;+mglUniform2iv
&lt;br&gt;+glUniform2ivARB
&lt;br&gt;+mglUniform2ivARB
&lt;br&gt;+glUniform3f
&lt;br&gt;+mglUniform3f
&lt;br&gt;+glUniform3fARB
&lt;br&gt;+mglUniform3fARB
&lt;br&gt;+glUniform3fv
&lt;br&gt;+mglUniform3fv
&lt;br&gt;+glUniform3fvARB
&lt;br&gt;+mglUniform3fvARB
&lt;br&gt;+glUniform3i
&lt;br&gt;+mglUniform3i
&lt;br&gt;+glUniform3iARB
&lt;br&gt;+mglUniform3iARB
&lt;br&gt;+glUniform3iv
&lt;br&gt;+mglUniform3iv
&lt;br&gt;+glUniform3ivARB
&lt;br&gt;+mglUniform3ivARB
&lt;br&gt;+glUniform4f
&lt;br&gt;+mglUniform4f
&lt;br&gt;+glUniform4fARB
&lt;br&gt;+mglUniform4fARB
&lt;br&gt;+glUniform4fv
&lt;br&gt;+mglUniform4fv
&lt;br&gt;+glUniform4fvARB
&lt;br&gt;+mglUniform4fvARB
&lt;br&gt;+glUniform4i
&lt;br&gt;+mglUniform4i
&lt;br&gt;+glUniform4iARB
&lt;br&gt;+mglUniform4iARB
&lt;br&gt;+glUniform4iv
&lt;br&gt;+mglUniform4iv
&lt;br&gt;+glUniform4ivARB
&lt;br&gt;+mglUniform4ivARB
&lt;br&gt;+glUniformMatrix2fv
&lt;br&gt;+mglUniformMatrix2fv
&lt;br&gt;+glUniformMatrix2fvARB
&lt;br&gt;+mglUniformMatrix2fvARB
&lt;br&gt;+glUniformMatrix2x3fv
&lt;br&gt;+mglUniformMatrix2x3fv
&lt;br&gt;+glUniformMatrix2x4fv
&lt;br&gt;+mglUniformMatrix2x4fv
&lt;br&gt;+glUniformMatrix3fv
&lt;br&gt;+mglUniformMatrix3fv
&lt;br&gt;+glUniformMatrix3fvARB
&lt;br&gt;+mglUniformMatrix3fvARB
&lt;br&gt;+glUniformMatrix3x2fv
&lt;br&gt;+mglUniformMatrix3x2fv
&lt;br&gt;+glUniformMatrix3x4fv
&lt;br&gt;+mglUniformMatrix3x4fv
&lt;br&gt;+glUniformMatrix4fv
&lt;br&gt;+mglUniformMatrix4fv
&lt;br&gt;+glUniformMatrix4fvARB
&lt;br&gt;+mglUniformMatrix4fvARB
&lt;br&gt;+glUniformMatrix4x2fv
&lt;br&gt;+mglUniformMatrix4x2fv
&lt;br&gt;+glUniformMatrix4x3fv
&lt;br&gt;+mglUniformMatrix4x3fv
&lt;br&gt;+glUnlockArraysEXT
&lt;br&gt;+mglUnlockArraysEXT
&lt;br&gt;+glUnmapBuffer
&lt;br&gt;+mglUnmapBuffer
&lt;br&gt;+glUnmapBufferARB
&lt;br&gt;+mglUnmapBufferARB
&lt;br&gt;+glUnused
&lt;br&gt;+mglUnused
&lt;br&gt;+glUseProgram
&lt;br&gt;+mglUseProgram
&lt;br&gt;+glUseProgramObjectARB
&lt;br&gt;+mglUseProgramObjectARB
&lt;br&gt;+glValidateProgram
&lt;br&gt;+mglValidateProgram
&lt;br&gt;+glValidateProgramARB
&lt;br&gt;+mglValidateProgramARB
&lt;br&gt;+glVertex2d
&lt;br&gt;+mglVertex2d
&lt;br&gt;+glVertex2dv
&lt;br&gt;+mglVertex2dv
&lt;br&gt;+glVertex2f
&lt;br&gt;+mglVertex2f
&lt;br&gt;+glVertex2fv
&lt;br&gt;+mglVertex2fv
&lt;br&gt;+glVertex2i
&lt;br&gt;+mglVertex2i
&lt;br&gt;+glVertex2iv
&lt;br&gt;+mglVertex2iv
&lt;br&gt;+glVertex2s
&lt;br&gt;+mglVertex2s
&lt;br&gt;+glVertex2sv
&lt;br&gt;+mglVertex2sv
&lt;br&gt;+glVertex3d
&lt;br&gt;+mglVertex3d
&lt;br&gt;+glVertex3dv
&lt;br&gt;+mglVertex3dv
&lt;br&gt;+glVertex3f
&lt;br&gt;+mglVertex3f
&lt;br&gt;+glVertex3fv
&lt;br&gt;+mglVertex3fv
&lt;br&gt;+glVertex3i
&lt;br&gt;+mglVertex3i
&lt;br&gt;+glVertex3iv
&lt;br&gt;+mglVertex3iv
&lt;br&gt;+glVertex3s
&lt;br&gt;+mglVertex3s
&lt;br&gt;+glVertex3sv
&lt;br&gt;+mglVertex3sv
&lt;br&gt;+glVertex4d
&lt;br&gt;+mglVertex4d
&lt;br&gt;+glVertex4dv
&lt;br&gt;+mglVertex4dv
&lt;br&gt;+glVertex4f
&lt;br&gt;+mglVertex4f
&lt;br&gt;+glVertex4fv
&lt;br&gt;+mglVertex4fv
&lt;br&gt;+glVertex4i
&lt;br&gt;+mglVertex4i
&lt;br&gt;+glVertex4iv
&lt;br&gt;+mglVertex4iv
&lt;br&gt;+glVertex4s
&lt;br&gt;+mglVertex4s
&lt;br&gt;+glVertex4sv
&lt;br&gt;+mglVertex4sv
&lt;br&gt;+glVertexArrayRangeNV
&lt;br&gt;+mglVertexArrayRangeNV
&lt;br&gt;+glVertexAttrib1d
&lt;br&gt;+mglVertexAttrib1d
&lt;br&gt;+glVertexAttrib1dARB
&lt;br&gt;+mglVertexAttrib1dARB
&lt;br&gt;+glVertexAttrib1dNV
&lt;br&gt;+mglVertexAttrib1dNV
&lt;br&gt;+glVertexAttrib1dv
&lt;br&gt;+mglVertexAttrib1dv
&lt;br&gt;+glVertexAttrib1dvARB
&lt;br&gt;+mglVertexAttrib1dvARB
&lt;br&gt;+glVertexAttrib1dvNV
&lt;br&gt;+mglVertexAttrib1dvNV
&lt;br&gt;+glVertexAttrib1f
&lt;br&gt;+mglVertexAttrib1f
&lt;br&gt;+glVertexAttrib1fARB
&lt;br&gt;+mglVertexAttrib1fARB
&lt;br&gt;+glVertexAttrib1fNV
&lt;br&gt;+mglVertexAttrib1fNV
&lt;br&gt;+glVertexAttrib1fv
&lt;br&gt;+mglVertexAttrib1fv
&lt;br&gt;+glVertexAttrib1fvARB
&lt;br&gt;+mglVertexAttrib1fvARB
&lt;br&gt;+glVertexAttrib1fvNV
&lt;br&gt;+mglVertexAttrib1fvNV
&lt;br&gt;+glVertexAttrib1s
&lt;br&gt;+mglVertexAttrib1s
&lt;br&gt;+glVertexAttrib1sARB
&lt;br&gt;+mglVertexAttrib1sARB
&lt;br&gt;+glVertexAttrib1sNV
&lt;br&gt;+mglVertexAttrib1sNV
&lt;br&gt;+glVertexAttrib1sv
&lt;br&gt;+mglVertexAttrib1sv
&lt;br&gt;+glVertexAttrib1svARB
&lt;br&gt;+mglVertexAttrib1svARB
&lt;br&gt;+glVertexAttrib1svNV
&lt;br&gt;+mglVertexAttrib1svNV
&lt;br&gt;+glVertexAttrib2d
&lt;br&gt;+mglVertexAttrib2d
&lt;br&gt;+glVertexAttrib2dARB
&lt;br&gt;+mglVertexAttrib2dARB
&lt;br&gt;+glVertexAttrib2dNV
&lt;br&gt;+mglVertexAttrib2dNV
&lt;br&gt;+glVertexAttrib2dv
&lt;br&gt;+mglVertexAttrib2dv
&lt;br&gt;+glVertexAttrib2dvARB
&lt;br&gt;+mglVertexAttrib2dvARB
&lt;br&gt;+glVertexAttrib2dvNV
&lt;br&gt;+mglVertexAttrib2dvNV
&lt;br&gt;+glVertexAttrib2f
&lt;br&gt;+mglVertexAttrib2f
&lt;br&gt;+glVertexAttrib2fARB
&lt;br&gt;+mglVertexAttrib2fARB
&lt;br&gt;+glVertexAttrib2fNV
&lt;br&gt;+mglVertexAttrib2fNV
&lt;br&gt;+glVertexAttrib2fv
&lt;br&gt;+mglVertexAttrib2fv
&lt;br&gt;+glVertexAttrib2fvARB
&lt;br&gt;+mglVertexAttrib2fvARB
&lt;br&gt;+glVertexAttrib2fvNV
&lt;br&gt;+mglVertexAttrib2fvNV
&lt;br&gt;+glVertexAttrib2s
&lt;br&gt;+mglVertexAttrib2s
&lt;br&gt;+glVertexAttrib2sARB
&lt;br&gt;+mglVertexAttrib2sARB
&lt;br&gt;+glVertexAttrib2sNV
&lt;br&gt;+mglVertexAttrib2sNV
&lt;br&gt;+glVertexAttrib2sv
&lt;br&gt;+mglVertexAttrib2sv
&lt;br&gt;+glVertexAttrib2svARB
&lt;br&gt;+mglVertexAttrib2svARB
&lt;br&gt;+glVertexAttrib2svNV
&lt;br&gt;+mglVertexAttrib2svNV
&lt;br&gt;+glVertexAttrib3d
&lt;br&gt;+mglVertexAttrib3d
&lt;br&gt;+glVertexAttrib3dARB
&lt;br&gt;+mglVertexAttrib3dARB
&lt;br&gt;+glVertexAttrib3dNV
&lt;br&gt;+mglVertexAttrib3dNV
&lt;br&gt;+glVertexAttrib3dv
&lt;br&gt;+mglVertexAttrib3dv
&lt;br&gt;+glVertexAttrib3dvARB
&lt;br&gt;+mglVertexAttrib3dvARB
&lt;br&gt;+glVertexAttrib3dvNV
&lt;br&gt;+mglVertexAttrib3dvNV
&lt;br&gt;+glVertexAttrib3f
&lt;br&gt;+mglVertexAttrib3f
&lt;br&gt;+glVertexAttrib3fARB
&lt;br&gt;+mglVertexAttrib3fARB
&lt;br&gt;+glVertexAttrib3fNV
&lt;br&gt;+mglVertexAttrib3fNV
&lt;br&gt;+glVertexAttrib3fv
&lt;br&gt;+mglVertexAttrib3fv
&lt;br&gt;+glVertexAttrib3fvARB
&lt;br&gt;+mglVertexAttrib3fvARB
&lt;br&gt;+glVertexAttrib3fvNV
&lt;br&gt;+mglVertexAttrib3fvNV
&lt;br&gt;+glVertexAttrib3s
&lt;br&gt;+mglVertexAttrib3s
&lt;br&gt;+glVertexAttrib3sARB
&lt;br&gt;+mglVertexAttrib3sARB
&lt;br&gt;+glVertexAttrib3sNV
&lt;br&gt;+mglVertexAttrib3sNV
&lt;br&gt;+glVertexAttrib3sv
&lt;br&gt;+mglVertexAttrib3sv
&lt;br&gt;+glVertexAttrib3svARB
&lt;br&gt;+mglVertexAttrib3svARB
&lt;br&gt;+glVertexAttrib3svNV
&lt;br&gt;+mglVertexAttrib3svNV
&lt;br&gt;+glVertexAttrib4bv
&lt;br&gt;+mglVertexAttrib4bv
&lt;br&gt;+glVertexAttrib4bvARB
&lt;br&gt;+mglVertexAttrib4bvARB
&lt;br&gt;+glVertexAttrib4d
&lt;br&gt;+mglVertexAttrib4d
&lt;br&gt;+glVertexAttrib4dARB
&lt;br&gt;+mglVertexAttrib4dARB
&lt;br&gt;+glVertexAttrib4dNV
&lt;br&gt;+mglVertexAttrib4dNV
&lt;br&gt;+glVertexAttrib4dv
&lt;br&gt;+mglVertexAttrib4dv
&lt;br&gt;+glVertexAttrib4dvARB
&lt;br&gt;+mglVertexAttrib4dvARB
&lt;br&gt;+glVertexAttrib4dvNV
&lt;br&gt;+mglVertexAttrib4dvNV
&lt;br&gt;+glVertexAttrib4f
&lt;br&gt;+mglVertexAttrib4f
&lt;br&gt;+glVertexAttrib4fARB
&lt;br&gt;+mglVertexAttrib4fARB
&lt;br&gt;+glVertexAttrib4fNV
&lt;br&gt;+mglVertexAttrib4fNV
&lt;br&gt;+glVertexAttrib4fv
&lt;br&gt;+mglVertexAttrib4fv
&lt;br&gt;+glVertexAttrib4fvARB
&lt;br&gt;+mglVertexAttrib4fvARB
&lt;br&gt;+glVertexAttrib4fvNV
&lt;br&gt;+mglVertexAttrib4fvNV
&lt;br&gt;+glVertexAttrib4iv
&lt;br&gt;+mglVertexAttrib4iv
&lt;br&gt;+glVertexAttrib4ivARB
&lt;br&gt;+mglVertexAttrib4ivARB
&lt;br&gt;+glVertexAttrib4Nbv
&lt;br&gt;+mglVertexAttrib4Nbv
&lt;br&gt;+glVertexAttrib4NbvARB
&lt;br&gt;+mglVertexAttrib4NbvARB
&lt;br&gt;+glVertexAttrib4Niv
&lt;br&gt;+mglVertexAttrib4Niv
&lt;br&gt;+glVertexAttrib4NivARB
&lt;br&gt;+mglVertexAttrib4NivARB
&lt;br&gt;+glVertexAttrib4Nsv
&lt;br&gt;+mglVertexAttrib4Nsv
&lt;br&gt;+glVertexAttrib4NsvARB
&lt;br&gt;+mglVertexAttrib4NsvARB
&lt;br&gt;+glVertexAttrib4Nub
&lt;br&gt;+mglVertexAttrib4Nub
&lt;br&gt;+glVertexAttrib4NubARB
&lt;br&gt;+mglVertexAttrib4NubARB
&lt;br&gt;+glVertexAttrib4Nubv
&lt;br&gt;+mglVertexAttrib4Nubv
&lt;br&gt;+glVertexAttrib4NubvARB
&lt;br&gt;+mglVertexAttrib4NubvARB
&lt;br&gt;+glVertexAttrib4Nuiv
&lt;br&gt;+mglVertexAttrib4Nuiv
&lt;br&gt;+glVertexAttrib4NuivARB
&lt;br&gt;+mglVertexAttrib4NuivARB
&lt;br&gt;+glVertexAttrib4Nusv
&lt;br&gt;+mglVertexAttrib4Nusv
&lt;br&gt;+glVertexAttrib4NusvARB
&lt;br&gt;+mglVertexAttrib4NusvARB
&lt;br&gt;+glVertexAttrib4s
&lt;br&gt;+mglVertexAttrib4s
&lt;br&gt;+glVertexAttrib4sARB
&lt;br&gt;+mglVertexAttrib4sARB
&lt;br&gt;+glVertexAttrib4sNV
&lt;br&gt;+mglVertexAttrib4sNV
&lt;br&gt;+glVertexAttrib4sv
&lt;br&gt;+mglVertexAttrib4sv
&lt;br&gt;+glVertexAttrib4svARB
&lt;br&gt;+mglVertexAttrib4svARB
&lt;br&gt;+glVertexAttrib4svNV
&lt;br&gt;+mglVertexAttrib4svNV
&lt;br&gt;+glVertexAttrib4ubNV
&lt;br&gt;+mglVertexAttrib4ubNV
&lt;br&gt;+glVertexAttrib4ubv
&lt;br&gt;+mglVertexAttrib4ubv
&lt;br&gt;+glVertexAttrib4ubvARB
&lt;br&gt;+mglVertexAttrib4ubvARB
&lt;br&gt;+glVertexAttrib4ubvNV
&lt;br&gt;+mglVertexAttrib4ubvNV
&lt;br&gt;+glVertexAttrib4uiv
&lt;br&gt;+mglVertexAttrib4uiv
&lt;br&gt;+glVertexAttrib4uivARB
&lt;br&gt;+mglVertexAttrib4uivARB
&lt;br&gt;+glVertexAttrib4usv
&lt;br&gt;+mglVertexAttrib4usv
&lt;br&gt;+glVertexAttrib4usvARB
&lt;br&gt;+mglVertexAttrib4usvARB
&lt;br&gt;+glVertexAttribPointer
&lt;br&gt;+mglVertexAttribPointer
&lt;br&gt;+glVertexAttribPointerARB
&lt;br&gt;+mglVertexAttribPointerARB
&lt;br&gt;+glVertexAttribPointerNV
&lt;br&gt;+mglVertexAttribPointerNV
&lt;br&gt;+glVertexAttribs1dvNV
&lt;br&gt;+mglVertexAttribs1dvNV
&lt;br&gt;+glVertexAttribs1fvNV
&lt;br&gt;+mglVertexAttribs1fvNV
&lt;br&gt;+glVertexAttribs1svNV
&lt;br&gt;+mglVertexAttribs1svNV
&lt;br&gt;+glVertexAttribs2dvNV
&lt;br&gt;+mglVertexAttribs2dvNV
&lt;br&gt;+glVertexAttribs2fvNV
&lt;br&gt;+mglVertexAttribs2fvNV
&lt;br&gt;+glVertexAttribs2svNV
&lt;br&gt;+mglVertexAttribs2svNV
&lt;br&gt;+glVertexAttribs3dvNV
&lt;br&gt;+mglVertexAttribs3dvNV
&lt;br&gt;+glVertexAttribs3fvNV
&lt;br&gt;+mglVertexAttribs3fvNV
&lt;br&gt;+glVertexAttribs3svNV
&lt;br&gt;+mglVertexAttribs3svNV
&lt;br&gt;+glVertexAttribs4dvNV
&lt;br&gt;+mglVertexAttribs4dvNV
&lt;br&gt;+glVertexAttribs4fvNV
&lt;br&gt;+mglVertexAttribs4fvNV
&lt;br&gt;+glVertexAttribs4svNV
&lt;br&gt;+mglVertexAttribs4svNV
&lt;br&gt;+glVertexAttribs4ubvNV
&lt;br&gt;+mglVertexAttribs4ubvNV
&lt;br&gt;+glVertexPointer
&lt;br&gt;+mglVertexPointer
&lt;br&gt;+glVertexPointerEXT
&lt;br&gt;+mglVertexPointerEXT
&lt;br&gt;+glViewport
&lt;br&gt;+mglViewport
&lt;br&gt;+glWaitSync
&lt;br&gt;+mglWaitSync
&lt;br&gt;+glWindowPos2d
&lt;br&gt;+mglWindowPos2d
&lt;br&gt;+glWindowPos2dARB
&lt;br&gt;+mglWindowPos2dARB
&lt;br&gt;+glWindowPos2dMESA
&lt;br&gt;+mglWindowPos2dMESA
&lt;br&gt;+glWindowPos2dv
&lt;br&gt;+mglWindowPos2dv
&lt;br&gt;+glWindowPos2dvARB
&lt;br&gt;+mglWindowPos2dvARB
&lt;br&gt;+glWindowPos2dvMESA
&lt;br&gt;+mglWindowPos2dvMESA
&lt;br&gt;+glWindowPos2f
&lt;br&gt;+mglWindowPos2f
&lt;br&gt;+glWindowPos2fARB
&lt;br&gt;+mglWindowPos2fARB
&lt;br&gt;+glWindowPos2fMESA
&lt;br&gt;+mglWindowPos2fMESA
&lt;br&gt;+glWindowPos2fv
&lt;br&gt;+mglWindowPos2fv
&lt;br&gt;+glWindowPos2fvARB
&lt;br&gt;+mglWindowPos2fvARB
&lt;br&gt;+glWindowPos2fvMESA
&lt;br&gt;+mglWindowPos2fvMESA
&lt;br&gt;+glWindowPos2i
&lt;br&gt;+mglWindowPos2i
&lt;br&gt;+glWindowPos2iARB
&lt;br&gt;+mglWindowPos2iARB
&lt;br&gt;+glWindowPos2iMESA
&lt;br&gt;+mglWindowPos2iMESA
&lt;br&gt;+glWindowPos2iv
&lt;br&gt;+mglWindowPos2iv
&lt;br&gt;+glWindowPos2ivARB
&lt;br&gt;+mglWindowPos2ivARB
&lt;br&gt;+glWindowPos2ivMESA
&lt;br&gt;+mglWindowPos2ivMESA
&lt;br&gt;+glWindowPos2s
&lt;br&gt;+mglWindowPos2s
&lt;br&gt;+glWindowPos2sARB
&lt;br&gt;+mglWindowPos2sARB
&lt;br&gt;+glWindowPos2sMESA
&lt;br&gt;+mglWindowPos2sMESA
&lt;br&gt;+glWindowPos2sv
&lt;br&gt;+mglWindowPos2sv
&lt;br&gt;+glWindowPos2svARB
&lt;br&gt;+mglWindowPos2svARB
&lt;br&gt;+glWindowPos2svMESA
&lt;br&gt;+mglWindowPos2svMESA
&lt;br&gt;+glWindowPos3d
&lt;br&gt;+mglWindowPos3d
&lt;br&gt;+glWindowPos3dARB
&lt;br&gt;+mglWindowPos3dARB
&lt;br&gt;+glWindowPos3dMESA
&lt;br&gt;+mglWindowPos3dMESA
&lt;br&gt;+glWindowPos3dv
&lt;br&gt;+mglWindowPos3dv
&lt;br&gt;+glWindowPos3dvARB
&lt;br&gt;+mglWindowPos3dvARB
&lt;br&gt;+glWindowPos3dvMESA
&lt;br&gt;+mglWindowPos3dvMESA
&lt;br&gt;+glWindowPos3f
&lt;br&gt;+mglWindowPos3f
&lt;br&gt;+glWindowPos3fARB
&lt;br&gt;+mglWindowPos3fARB
&lt;br&gt;+glWindowPos3fMESA
&lt;br&gt;+mglWindowPos3fMESA
&lt;br&gt;+glWindowPos3fv
&lt;br&gt;+mglWindowPos3fv
&lt;br&gt;+glWindowPos3fvARB
&lt;br&gt;+mglWindowPos3fvARB
&lt;br&gt;+glWindowPos3fvMESA
&lt;br&gt;+mglWindowPos3fvMESA
&lt;br&gt;+glWindowPos3i
&lt;br&gt;+mglWindowPos3i
&lt;br&gt;+glWindowPos3iARB
&lt;br&gt;+mglWindowPos3iARB
&lt;br&gt;+glWindowPos3iMESA
&lt;br&gt;+mglWindowPos3iMESA
&lt;br&gt;+glWindowPos3iv
&lt;br&gt;+mglWindowPos3iv
&lt;br&gt;+glWindowPos3ivARB
&lt;br&gt;+mglWindowPos3ivARB
&lt;br&gt;+glWindowPos3ivMESA
&lt;br&gt;+mglWindowPos3ivMESA
&lt;br&gt;+glWindowPos3s
&lt;br&gt;+mglWindowPos3s
&lt;br&gt;+glWindowPos3sARB
&lt;br&gt;+mglWindowPos3sARB
&lt;br&gt;+glWindowPos3sMESA
&lt;br&gt;+mglWindowPos3sMESA
&lt;br&gt;+glWindowPos3sv
&lt;br&gt;+mglWindowPos3sv
&lt;br&gt;+glWindowPos3svARB
&lt;br&gt;+mglWindowPos3svARB
&lt;br&gt;+glWindowPos3svMESA
&lt;br&gt;+mglWindowPos3svMESA
&lt;br&gt;+glWindowPos4dMESA
&lt;br&gt;+mglWindowPos4dMESA
&lt;br&gt;+glWindowPos4dvMESA
&lt;br&gt;+mglWindowPos4dvMESA
&lt;br&gt;+glWindowPos4fMESA
&lt;br&gt;+mglWindowPos4fMESA
&lt;br&gt;+glWindowPos4fvMESA
&lt;br&gt;+mglWindowPos4fvMESA
&lt;br&gt;+glWindowPos4iMESA
&lt;br&gt;+mglWindowPos4iMESA
&lt;br&gt;+glWindowPos4ivMESA
&lt;br&gt;+mglWindowPos4ivMESA
&lt;br&gt;+glWindowPos4sMESA
&lt;br&gt;+mglWindowPos4sMESA
&lt;br&gt;+glWindowPos4svMESA
&lt;br&gt;+mglWindowPos4svMESA
&lt;br&gt;+glXAllocateMemoryNV
&lt;br&gt;+mglXAllocateMemoryNV
&lt;br&gt;+glXBindSwapBarrierSGIX
&lt;br&gt;+mglXBindSwapBarrierSGIX
&lt;br&gt;+glXBindTexImageEXT
&lt;br&gt;+mglXBindTexImageEXT
&lt;br&gt;+glXBindTexImageEXT
&lt;br&gt;+mglXBindTexImageEXT
&lt;br&gt;+glXChangeDrawableAttributes
&lt;br&gt;+mglXChangeDrawableAttributes
&lt;br&gt;+glXChangeDrawableAttributesSGIX
&lt;br&gt;+mglXChangeDrawableAttributesSGIX
&lt;br&gt;+glXChangeDrawableAttributesSGIX
&lt;br&gt;+mglXChangeDrawableAttributesSGIX
&lt;br&gt;+glXChooseFBConfig
&lt;br&gt;+mglXChooseFBConfig
&lt;br&gt;+glXChooseVisual
&lt;br&gt;+mglXChooseVisual
&lt;br&gt;+glXClientInfo
&lt;br&gt;+mglXClientInfo
&lt;br&gt;+glXCopyContext
&lt;br&gt;+mglXCopyContext
&lt;br&gt;+glXCopySubBufferMESA
&lt;br&gt;+mglXCopySubBufferMESA
&lt;br&gt;+glXCopySubBufferMESA
&lt;br&gt;+mglXCopySubBufferMESA
&lt;br&gt;+glXCreateContext
&lt;br&gt;+mglXCreateContext
&lt;br&gt;+glXCreateContextWithConfigSGIX
&lt;br&gt;+mglXCreateContextWithConfigSGIX
&lt;br&gt;+glXCreateContextWithConfigSGIX
&lt;br&gt;+mglXCreateContextWithConfigSGIX
&lt;br&gt;+glXCreateGLXPbufferSGIX
&lt;br&gt;+mglXCreateGLXPbufferSGIX
&lt;br&gt;+glXCreateGLXPbufferSGIX
&lt;br&gt;+mglXCreateGLXPbufferSGIX
&lt;br&gt;+glXCreateGLXPixmap
&lt;br&gt;+mglXCreateGLXPixmap
&lt;br&gt;+glXCreateGLXPixmapWithConfigSGIX
&lt;br&gt;+mglXCreateGLXPixmapWithConfigSGIX
&lt;br&gt;+glXCreateGLXPixmapWithConfigSGIX
&lt;br&gt;+mglXCreateGLXPixmapWithConfigSGIX
&lt;br&gt;+glXCreateNewContext
&lt;br&gt;+mglXCreateNewContext
&lt;br&gt;+glXCreatePbuffer
&lt;br&gt;+mglXCreatePbuffer
&lt;br&gt;+glXCreatePixmap
&lt;br&gt;+mglXCreatePixmap
&lt;br&gt;+glXCreateWindow
&lt;br&gt;+mglXCreateWindow
&lt;br&gt;+glXDestroyContext
&lt;br&gt;+mglXDestroyContext
&lt;br&gt;+glXDestroyGLXPbufferSGIX
&lt;br&gt;+mglXDestroyGLXPbufferSGIX
&lt;br&gt;+glXDestroyGLXPbufferSGIX
&lt;br&gt;+mglXDestroyGLXPbufferSGIX
&lt;br&gt;+glXDestroyGLXPixmap
&lt;br&gt;+mglXDestroyGLXPixmap
&lt;br&gt;+glXDestroyPbuffer
&lt;br&gt;+mglXDestroyPbuffer
&lt;br&gt;+glXDestroyPixmap
&lt;br&gt;+mglXDestroyPixmap
&lt;br&gt;+glXDestroyWindow
&lt;br&gt;+mglXDestroyWindow
&lt;br&gt;+glXFreeMemoryNV
&lt;br&gt;+mglXFreeMemoryNV
&lt;br&gt;+glXGetClientString
&lt;br&gt;+mglXGetClientString
&lt;br&gt;+glXGetConfig
&lt;br&gt;+mglXGetConfig
&lt;br&gt;+glXGetCurrentContext
&lt;br&gt;+mglXGetCurrentContext
&lt;br&gt;+glXGetCurrentDisplay
&lt;br&gt;+mglXGetCurrentDisplay
&lt;br&gt;+glXGetCurrentDrawable
&lt;br&gt;+mglXGetCurrentDrawable
&lt;br&gt;+glXGetCurrentReadDrawable
&lt;br&gt;+mglXGetCurrentReadDrawable
&lt;br&gt;+glXGetDrawableAttributes
&lt;br&gt;+mglXGetDrawableAttributes
&lt;br&gt;+glXGetDrawableAttributesSGIX
&lt;br&gt;+mglXGetDrawableAttributesSGIX
&lt;br&gt;+glXGetDrawableAttributesSGIX
&lt;br&gt;+mglXGetDrawableAttributesSGIX
&lt;br&gt;+glXGetFBConfigAttrib
&lt;br&gt;+mglXGetFBConfigAttrib
&lt;br&gt;+glXGetFBConfigs
&lt;br&gt;+mglXGetFBConfigs
&lt;br&gt;+glXGetFBConfigsSGIX
&lt;br&gt;+mglXGetFBConfigsSGIX
&lt;br&gt;+glXGetFBConfigsSGIX
&lt;br&gt;+mglXGetFBConfigsSGIX
&lt;br&gt;+glXGetQueryDrawable
&lt;br&gt;+mglXGetQueryDrawable
&lt;br&gt;+glXGetSelectedEvent
&lt;br&gt;+mglXGetSelectedEvent
&lt;br&gt;+glXGetVisualConfigs
&lt;br&gt;+mglXGetVisualConfigs
&lt;br&gt;+glXGetVisualFromFBConfig
&lt;br&gt;+mglXGetVisualFromFBConfig
&lt;br&gt;+glXIsDirect
&lt;br&gt;+mglXIsDirect
&lt;br&gt;+glXMakeContextCurrent
&lt;br&gt;+mglXMakeContextCurrent
&lt;br&gt;+glXMakeCurrent
&lt;br&gt;+mglXMakeCurrent
&lt;br&gt;+glXMakeCurrentReadSGI
&lt;br&gt;+mglXMakeCurrentReadSGI
&lt;br&gt;+glXMakeCurrentReadSGI
&lt;br&gt;+mglXMakeCurrentReadSGI
&lt;br&gt;+glXQueryContext
&lt;br&gt;+mglXQueryContext
&lt;br&gt;+glXQueryContextInfoEXT
&lt;br&gt;+mglXQueryContextInfoEXT
&lt;br&gt;+glXQueryContextInfoEXT
&lt;br&gt;+mglXQueryContextInfoEXT
&lt;br&gt;+glXQueryExtension
&lt;br&gt;+mglXQueryExtension
&lt;br&gt;+glXQueryExtensionsString
&lt;br&gt;+mglXQueryExtensionsString
&lt;br&gt;+glXQueryMaxSwapBarriersSGIX
&lt;br&gt;+mglXQueryMaxSwapBarriersSGIX
&lt;br&gt;+glXQueryServerString
&lt;br&gt;+mglXQueryServerString
&lt;br&gt;+glXQueryVersion
&lt;br&gt;+mglXQueryVersion
&lt;br&gt;+glXReleaseTexImageEXT
&lt;br&gt;+mglXReleaseTexImageEXT
&lt;br&gt;+glXReleaseTexImageEXT
&lt;br&gt;+mglXReleaseTexImageEXT
&lt;br&gt;+glXRender
&lt;br&gt;+mglXRender
&lt;br&gt;+glXRenderLarge
&lt;br&gt;+mglXRenderLarge
&lt;br&gt;+glXSelectEvent
&lt;br&gt;+mglXSelectEvent
&lt;br&gt;+glXSwapBuffers
&lt;br&gt;+mglXSwapBuffers
&lt;br&gt;+glXSwapIntervalSGI
&lt;br&gt;+mglXSwapIntervalSGI
&lt;br&gt;+glXSwapIntervalSGI
&lt;br&gt;+mglXSwapIntervalSGI
&lt;br&gt;+glXUseXFont
&lt;br&gt;+mglXUseXFont
&lt;br&gt;+glXVendorPrivate
&lt;br&gt;+mglXVendorPrivate
&lt;br&gt;+glXVendorPrivateWithReply
&lt;br&gt;+mglXVendorPrivateWithReply
&lt;br&gt;+glXWaitGL
&lt;br&gt;+mglXWaitGL
&lt;br&gt;+glXWaitX
&lt;br&gt;+mglXWaitX
&lt;br&gt;+glXGetProcAddress
&lt;br&gt;+mglXGetProcAddress
&lt;br&gt;+glXGetProcAddressARB
&lt;br&gt;+mglXGetProcAddressARB
&lt;br&gt;diff --git a/src/mesa/glapi/gl.exports.darwin b/src/mesa/glapi/gl.exports.darwin
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..9b81183
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/src/mesa/glapi/gl.exports.darwin
&lt;br&gt;@@ -0,0 +1,1100 @@
&lt;br&gt;+*glAccum
&lt;br&gt;+*glActiveTexture
&lt;br&gt;+*glActiveTextureARB
&lt;br&gt;+*glAlphaFragmentOp1ATI
&lt;br&gt;+*glAlphaFragmentOp2ATI
&lt;br&gt;+*glAlphaFragmentOp3ATI
&lt;br&gt;+*glAlphaFunc
&lt;br&gt;+*glAreProgramsResidentNV
&lt;br&gt;+*glAreTexturesResident
&lt;br&gt;+*glAreTexturesResidentEXT
&lt;br&gt;+*glArrayElement
&lt;br&gt;+*glArrayElementEXT
&lt;br&gt;+*glAttachObjectARB
&lt;br&gt;+*glAttachShader
&lt;br&gt;+*glBegin
&lt;br&gt;+*glBeginFragmentShaderATI
&lt;br&gt;+*glBeginQuery
&lt;br&gt;+*glBeginQueryARB
&lt;br&gt;+*glBindAttribLocation
&lt;br&gt;+*glBindAttribLocationARB
&lt;br&gt;+*glBindBuffer
&lt;br&gt;+*glBindBufferARB
&lt;br&gt;+*glBindFragmentShaderATI
&lt;br&gt;+*glBindFramebuffer
&lt;br&gt;+*glBindFramebufferEXT
&lt;br&gt;+*glBindProgramARB
&lt;br&gt;+*glBindProgramNV
&lt;br&gt;+*glBindRenderbuffer
&lt;br&gt;+*glBindRenderbufferEXT
&lt;br&gt;+*glBindTexture
&lt;br&gt;+*glBindTextureEXT
&lt;br&gt;+*glBindVertexArray
&lt;br&gt;+*glBitmap
&lt;br&gt;+*glBlendColor
&lt;br&gt;+*glBlendColorEXT
&lt;br&gt;+*glBlendEquation
&lt;br&gt;+*glBlendEquationEXT
&lt;br&gt;+*glBlendEquationSeparate
&lt;br&gt;+*glBlendFunc
&lt;br&gt;+*glBlendFuncSeparate
&lt;br&gt;+*glBlendFuncSeparateEXT
&lt;br&gt;+*glBlitFramebuffer
&lt;br&gt;+*glBufferData
&lt;br&gt;+*glBufferDataARB
&lt;br&gt;+*glBufferSubData
&lt;br&gt;+*glBufferSubDataARB
&lt;br&gt;+*glCallList
&lt;br&gt;+*glCallLists
&lt;br&gt;+*glCheckFramebufferStatus
&lt;br&gt;+*glCheckFramebufferStatusEXT
&lt;br&gt;+*glClear
&lt;br&gt;+*glClearAccum
&lt;br&gt;+*glClearColor
&lt;br&gt;+*glClearDepth
&lt;br&gt;+*glClearIndex
&lt;br&gt;+*glClearStencil
&lt;br&gt;+*glClientActiveTexture
&lt;br&gt;+*glClientActiveTextureARB
&lt;br&gt;+*glClientWaitSync
&lt;br&gt;+*glClipPlane
&lt;br&gt;+*glColor3b
&lt;br&gt;+*glColor3bv
&lt;br&gt;+*glColor3d
&lt;br&gt;+*glColor3dv
&lt;br&gt;+*glColor3f
&lt;br&gt;+*glColor3fv
&lt;br&gt;+*glColor3i
&lt;br&gt;+*glColor3iv
&lt;br&gt;+*glColor3s
&lt;br&gt;+*glColor3sv
&lt;br&gt;+*glColor3ub
&lt;br&gt;+*glColor3ubv
&lt;br&gt;+*glColor3ui
&lt;br&gt;+*glColor3uiv
&lt;br&gt;+*glColor3us
&lt;br&gt;+*glColor3usv
&lt;br&gt;+*glColor4b
&lt;br&gt;+*glColor4bv
&lt;br&gt;+*glColor4d
&lt;br&gt;+*glColor4dv
&lt;br&gt;+*glColor4f
&lt;br&gt;+*glColor4fv
&lt;br&gt;+*glColor4i
&lt;br&gt;+*glColor4iv
&lt;br&gt;+*glColor4s
&lt;br&gt;+*glColor4sv
&lt;br&gt;+*glColor4ub
&lt;br&gt;+*glColor4ubv
&lt;br&gt;+*glColor4ui
&lt;br&gt;+*glColor4uiv
&lt;br&gt;+*glColor4us
&lt;br&gt;+*glColor4usv
&lt;br&gt;+*glColorFragmentOp1ATI
&lt;br&gt;+*glColorFragmentOp2ATI
&lt;br&gt;+*glColorFragmentOp3ATI
&lt;br&gt;+*glColorMask
&lt;br&gt;+*glColorMaterial
&lt;br&gt;+*glColorPointer
&lt;br&gt;+*glColorPointerEXT
&lt;br&gt;+*glColorSubTable
&lt;br&gt;+*glColorTable
&lt;br&gt;+*glColorTableEXT
&lt;br&gt;+*glColorTableParameterfv
&lt;br&gt;+*glColorTableParameteriv
&lt;br&gt;+*glCombinerInputNV
&lt;br&gt;+*glCombinerOutputNV
&lt;br&gt;+*glCombinerParameterfNV
&lt;br&gt;+*glCombinerParameterfvNV
&lt;br&gt;+*glCombinerParameteriNV
&lt;br&gt;+*glCombinerParameterivNV
&lt;br&gt;+*glCompileShader
&lt;br&gt;+*glCompileShaderARB
&lt;br&gt;+*glCompressedTexImage1D
&lt;br&gt;+*glCompressedTexImage1DARB
&lt;br&gt;+*glCompressedTexImage2D
&lt;br&gt;+*glCompressedTexImage2DARB
&lt;br&gt;+*glCompressedTexImage3D
&lt;br&gt;+*glCompressedTexImage3DARB
&lt;br&gt;+*glCompressedTexSubImage1D
&lt;br&gt;+*glCompressedTexSubImage1DARB
&lt;br&gt;+*glCompressedTexSubImage2D
&lt;br&gt;+*glCompressedTexSubImage2DARB
&lt;br&gt;+*glCompressedTexSubImage3D
&lt;br&gt;+*glCompressedTexSubImage3DARB
&lt;br&gt;+*glConvolutionFilter1D
&lt;br&gt;+*glConvolutionFilter2D
&lt;br&gt;+*glConvolutionParameterf
&lt;br&gt;+*glConvolutionParameterfv
&lt;br&gt;+*glConvolutionParameteri
&lt;br&gt;+*glConvolutionParameteriv
&lt;br&gt;+*glCopyBufferSubData
&lt;br&gt;+*glCopyColorSubTable
&lt;br&gt;+*glCopyColorTable
&lt;br&gt;+*glCopyConvolutionFilter1D
&lt;br&gt;+*glCopyConvolutionFilter2D
&lt;br&gt;+*glCopyPixels
&lt;br&gt;+*glCopyTexImage1D
&lt;br&gt;+*glCopyTexImage1DEXT
&lt;br&gt;+*glCopyTexImage2D
&lt;br&gt;+*glCopyTexImage2DEXT
&lt;br&gt;+*glCopyTexSubImage1D
&lt;br&gt;+*glCopyTexSubImage1DEXT
&lt;br&gt;+*glCopyTexSubImage2D
&lt;br&gt;+*glCopyTexSubImage2DEXT
&lt;br&gt;+*glCopyTexSubImage3D
&lt;br&gt;+*glCopyTexSubImage3DEXT
&lt;br&gt;+*glCreateProgram
&lt;br&gt;+*glCreateProgramObjectARB
&lt;br&gt;+*glCreateShader
&lt;br&gt;+*glCreateShaderObjectARB
&lt;br&gt;+*glCullFace
&lt;br&gt;+*glDeleteBuffers
&lt;br&gt;+*glDeleteBuffersARB
&lt;br&gt;+*glDeleteFragmentShaderATI
&lt;br&gt;+*glDeleteFramebuffers
&lt;br&gt;+*glDeleteFramebuffersEXT
&lt;br&gt;+*glDeleteLists
&lt;br&gt;+*glDeleteObjectARB
&lt;br&gt;+*glDeleteProgram
&lt;br&gt;+*glDeleteProgramsARB
&lt;br&gt;+*glDeleteProgramsNV
&lt;br&gt;+*glDeleteQueries
&lt;br&gt;+*glDeleteQueriesARB
&lt;br&gt;+*glDeleteRenderbuffers
&lt;br&gt;+*glDeleteRenderbuffersEXT
&lt;br&gt;+*glDeleteShader
&lt;br&gt;+*glDeleteSync
&lt;br&gt;+*glDeleteTextures
&lt;br&gt;+*glDeleteTexturesEXT
&lt;br&gt;+*glDeleteVertexArrays
&lt;br&gt;+*glDepthFunc
&lt;br&gt;+*glDepthMask
&lt;br&gt;+*glDepthRange
&lt;br&gt;+*glDetachObjectARB
&lt;br&gt;+*glDetachShader
&lt;br&gt;+*glDisable
&lt;br&gt;+*glDisableClientState
&lt;br&gt;+*glDisableVertexAttribArray
&lt;br&gt;+*glDisableVertexAttribArrayARB
&lt;br&gt;+*glDrawArrays
&lt;br&gt;+*glDrawArraysEXT
&lt;br&gt;+*glDrawBuffer
&lt;br&gt;+*glDrawBuffers
&lt;br&gt;+*glDrawBuffersARB
&lt;br&gt;+*glDrawBuffersATI
&lt;br&gt;+*glDrawElements
&lt;br&gt;+*glDrawElementsBaseVertex
&lt;br&gt;+*glDrawPixels
&lt;br&gt;+*glDrawRangeElements
&lt;br&gt;+*glDrawRangeElementsBaseVertex
&lt;br&gt;+*glDrawRangeElementsEXT
&lt;br&gt;+*glEdgeFlag
&lt;br&gt;+*glEdgeFlagPointer
&lt;br&gt;+*glEdgeFlagPointerEXT
&lt;br&gt;+*glEdgeFlagv
&lt;br&gt;+*glEnable
&lt;br&gt;+*glEnableClientState
&lt;br&gt;+*glEnableVertexAttribArray
&lt;br&gt;+*glEnableVertexAttribArrayARB
&lt;br&gt;+*glEnd
&lt;br&gt;+*glEndFragmentShaderATI
&lt;br&gt;+*glEndList
&lt;br&gt;+*glEndQuery
&lt;br&gt;+*glEndQueryARB
&lt;br&gt;+*glEvalCoord1d
&lt;br&gt;+*glEvalCoord1dv
&lt;br&gt;+*glEvalCoord1f
&lt;br&gt;+*glEvalCoord1fv
&lt;br&gt;+*glEvalCoord2d
&lt;br&gt;+*glEvalCoord2dv
&lt;br&gt;+*glEvalCoord2f
&lt;br&gt;+*glEvalCoord2fv
&lt;br&gt;+*glEvalMesh1
&lt;br&gt;+*glEvalMesh2
&lt;br&gt;+*glEvalPoint1
&lt;br&gt;+*glEvalPoint2
&lt;br&gt;+*glExecuteProgramNV
&lt;br&gt;+*glFeedbackBuffer
&lt;br&gt;+*glFenceSync
&lt;br&gt;+*glFinalCombinerInputNV
&lt;br&gt;+*glFinish
&lt;br&gt;+*glFlush
&lt;br&gt;+*glFlushMappedBufferRange
&lt;br&gt;+*glFlushVertexArrayRangeNV
&lt;br&gt;+*glFogCoordd
&lt;br&gt;+*glFogCoorddEXT
&lt;br&gt;+*glFogCoorddv
&lt;br&gt;+*glFogCoorddvEXT
&lt;br&gt;+*glFogCoordf
&lt;br&gt;+*glFogCoordfEXT
&lt;br&gt;+*glFogCoordfv
&lt;br&gt;+*glFogCoordfvEXT
&lt;br&gt;+*glFogCoordPointer
&lt;br&gt;+*glFogCoordPointerEXT
&lt;br&gt;+*glFogf
&lt;br&gt;+*glFogfv
&lt;br&gt;+*glFogi
&lt;br&gt;+*glFogiv
&lt;br&gt;+*glFramebufferRenderbuffer
&lt;br&gt;+*glFramebufferRenderbufferEXT
&lt;br&gt;+*glFramebufferTexture1D
&lt;br&gt;+*glFramebufferTexture1DEXT
&lt;br&gt;+*glFramebufferTexture2D
&lt;br&gt;+*glFramebufferTexture2DEXT
&lt;br&gt;+*glFramebufferTexture3D
&lt;br&gt;+*glFramebufferTexture3DEXT
&lt;br&gt;+*glFramebufferTextureLayer
&lt;br&gt;+*glFramebufferTextureLayerEXT
&lt;br&gt;+*glFrontFace
&lt;br&gt;+*glFrustum
&lt;br&gt;+*glGenBuffers
&lt;br&gt;+*glGenBuffersARB
&lt;br&gt;+*glGenerateMipmap
&lt;br&gt;+*glGenerateMipmapEXT
&lt;br&gt;+*glGenFragmentShadersATI
&lt;br&gt;+*glGenFramebuffers
&lt;br&gt;+*glGenFramebuffersEXT
&lt;br&gt;+*glGenLists
&lt;br&gt;+*glGenProgramsARB
&lt;br&gt;+*glGenProgramsNV
&lt;br&gt;+*glGenQueries
&lt;br&gt;+*glGenQueriesARB
&lt;br&gt;+*glGenRenderbuffers
&lt;br&gt;+*glGenRenderbuffersEXT
&lt;br&gt;+*glGenTextures
&lt;br&gt;+*glGenTexturesEXT
&lt;br&gt;+*glGenVertexArrays
&lt;br&gt;+*glGetActiveAttrib
&lt;br&gt;+*glGetActiveAttribARB
&lt;br&gt;+*glGetActiveUniform
&lt;br&gt;+*glGetActiveUniformARB
&lt;br&gt;+*glGetAttachedObjectsARB
&lt;br&gt;+*glGetAttachedShaders
&lt;br&gt;+*glGetAttribLocation
&lt;br&gt;+*glGetAttribLocationARB
&lt;br&gt;+*glGetBooleanv
&lt;br&gt;+*glGetBufferParameteriv
&lt;br&gt;+*glGetBufferParameterivARB
&lt;br&gt;+*glGetBufferPointerv
&lt;br&gt;+*glGetBufferPointervARB
&lt;br&gt;+*glGetBufferSubData
&lt;br&gt;+*glGetBufferSubDataARB
&lt;br&gt;+*glGetClipPlane
&lt;br&gt;+*glGetColorTable
&lt;br&gt;+*glGetColorTableEXT
&lt;br&gt;+*glGetColorTableParameterfv
&lt;br&gt;+*glGetColorTableParameterfvEXT
&lt;br&gt;+*glGetColorTableParameteriv
&lt;br&gt;+*glGetColorTableParameterivEXT
&lt;br&gt;+*glGetCombinerInputParameterfvNV
&lt;br&gt;+*glGetCombinerInputParameterivNV
&lt;br&gt;+*glGetCombinerOutputParameterfvNV
&lt;br&gt;+*glGetCombinerOutputParameterivNV
&lt;br&gt;+*glGetCompressedTexImage
&lt;br&gt;+*glGetCompressedTexImageARB
&lt;br&gt;+*glGetConvolutionFilter
&lt;br&gt;+*glGetConvolutionParameterfv
&lt;br&gt;+*glGetConvolutionParameteriv
&lt;br&gt;+*glGetDoublev
&lt;br&gt;+*glGetError
&lt;br&gt;+*glGetFinalCombinerInputParameterfvNV
&lt;br&gt;+*glGetFinalCombinerInputParameterivNV
&lt;br&gt;+*glGetFloatv
&lt;br&gt;+*glGetFramebufferAttachmentParameteriv
&lt;br&gt;+*glGetFramebufferAttachmentParameterivEXT
&lt;br&gt;+*glGetHandleARB
&lt;br&gt;+*glGetHistogram
&lt;br&gt;+*glGetHistogramParameterfv
&lt;br&gt;+*glGetHistogramParameteriv
&lt;br&gt;+*glGetInfoLogARB
&lt;br&gt;+*glGetInteger64v
&lt;br&gt;+*glGetIntegerv
&lt;br&gt;+*glGetLightfv
&lt;br&gt;+*glGetLightiv
&lt;br&gt;+*glGetMapdv
&lt;br&gt;+*glGetMapfv
&lt;br&gt;+*glGetMapiv
&lt;br&gt;+*glGetMaterialfv
&lt;br&gt;+*glGetMaterialiv
&lt;br&gt;+*glGetMinmax
&lt;br&gt;+*glGetMinmaxParameterfv
&lt;br&gt;+*glGetMinmaxParameteriv
&lt;br&gt;+*glGetObjectParameterfvARB
&lt;br&gt;+*glGetObjectParameterivARB
&lt;br&gt;+*glGetPixelMapfv
&lt;br&gt;+*glGetPixelMapuiv
&lt;br&gt;+*glGetPixelMapusv
&lt;br&gt;+*glGetPointerv
&lt;br&gt;+*glGetPointervEXT
&lt;br&gt;+*glGetPolygonStipple
&lt;br&gt;+*glGetProgramEnvParameterdvARB
&lt;br&gt;+*glGetProgramEnvParameterfvARB
&lt;br&gt;+*glGetProgramInfoLog
&lt;br&gt;+*glGetProgramiv
&lt;br&gt;+*glGetProgramivARB
&lt;br&gt;+*glGetProgramivNV
&lt;br&gt;+*glGetProgramLocalParameterdvARB
&lt;br&gt;+*glGetProgramLocalParameterfvARB
&lt;br&gt;+*glGetProgramNamedParameterdvNV
&lt;br&gt;+*glGetProgramNamedParameterfvNV
&lt;br&gt;+*glGetProgramParameterdvNV
&lt;br&gt;+*glGetProgramParameterfvNV
&lt;br&gt;+*glGetProgramStringARB
&lt;br&gt;+*glGetProgramStringNV
&lt;br&gt;+*glGetQueryiv
&lt;br&gt;+*glGetQueryivARB
&lt;br&gt;+*glGetQueryObjectiv
&lt;br&gt;+*glGetQueryObjectivARB
&lt;br&gt;+*glGetQueryObjectuiv
&lt;br&gt;+*glGetQueryObjectuivARB
&lt;br&gt;+*glGetRenderbufferParameteriv
&lt;br&gt;+*glGetRenderbufferParameterivEXT
&lt;br&gt;+*glGetSeparableFilter
&lt;br&gt;+*glGetShaderInfoLog
&lt;br&gt;+*glGetShaderiv
&lt;br&gt;+*glGetShaderSource
&lt;br&gt;+*glGetShaderSourceARB
&lt;br&gt;+*glGetString
&lt;br&gt;+*glGetSynciv
&lt;br&gt;+*glGetTexBumpParameterfvATI
&lt;br&gt;+*glGetTexBumpParameterivATI
&lt;br&gt;+*glGetTexEnvfv
&lt;br&gt;+*glGetTexEnviv
&lt;br&gt;+*glGetTexGendv
&lt;br&gt;+*glGetTexGenfv
&lt;br&gt;+*glGetTexGeniv
&lt;br&gt;+*glGetTexImage
&lt;br&gt;+*glGetTexLevelParameterfv
&lt;br&gt;+*glGetTexLevelParameteriv
&lt;br&gt;+*glGetTexParameterfv
&lt;br&gt;+*glGetTexParameteriv
&lt;br&gt;+*glGetTrackMatrixivNV
&lt;br&gt;+*glGetUniformfv
&lt;br&gt;+*glGetUniformfvARB
&lt;br&gt;+*glGetUniformiv
&lt;br&gt;+*glGetUniformivARB
&lt;br&gt;+*glGetUniformLocation
&lt;br&gt;+*glGetUniformLocationARB
&lt;br&gt;+*glGetVertexAttribdv
&lt;br&gt;+*glGetVertexAttribdvARB
&lt;br&gt;+*glGetVertexAttribdvNV
&lt;br&gt;+*glGetVertexAttribfv
&lt;br&gt;+*glGetVertexAttribfvARB
&lt;br&gt;+*glGetVertexAttribfvNV
&lt;br&gt;+*glGetVertexAttribiv
&lt;br&gt;+*glGetVertexAttribivARB
&lt;br&gt;+*glGetVertexAttribivNV
&lt;br&gt;+*glGetVertexAttribPointerv
&lt;br&gt;+*glGetVertexAttribPointervARB
&lt;br&gt;+*glGetVertexAttribPointervNV
&lt;br&gt;+*glHint
&lt;br&gt;+*glHistogram
&lt;br&gt;+*glIndexd
&lt;br&gt;+*glIndexdv
&lt;br&gt;+*glIndexf
&lt;br&gt;+*glIndexfv
&lt;br&gt;+*glIndexi
&lt;br&gt;+*glIndexiv
&lt;br&gt;+*glIndexMask
&lt;br&gt;+*glIndexPointer
&lt;br&gt;+*glIndexPointerEXT
&lt;br&gt;+*glIndexs
&lt;br&gt;+*glIndexsv
&lt;br&gt;+*glIndexub
&lt;br&gt;+*glIndexubv
&lt;br&gt;+*glInitNames
&lt;br&gt;+*glInterleavedArrays
&lt;br&gt;+*glIsBuffer
&lt;br&gt;+*glIsBufferARB
&lt;br&gt;+*glIsEnabled
&lt;br&gt;+*glIsFramebuffer
&lt;br&gt;+*glIsFramebufferEXT
&lt;br&gt;+*glIsList
&lt;br&gt;+*glIsProgram
&lt;br&gt;+*glIsProgramARB
&lt;br&gt;+*glIsProgramNV
&lt;br&gt;+*glIsQuery
&lt;br&gt;+*glIsQueryARB
&lt;br&gt;+*glIsRenderbuffer
&lt;br&gt;+*glIsRenderbufferEXT
&lt;br&gt;+*glIsShader
&lt;br&gt;+*glIsSync
&lt;br&gt;+*glIsTexture
&lt;br&gt;+*glIsTextureEXT
&lt;br&gt;+*glIsVertexArray
&lt;br&gt;+*glLightf
&lt;br&gt;+*glLightfv
&lt;br&gt;+*glLighti
&lt;br&gt;+*glLightiv
&lt;br&gt;+*glLightModelf
&lt;br&gt;+*glLightModelfv
&lt;br&gt;+*glLightModeli
&lt;br&gt;+*glLightModeliv
&lt;br&gt;+*glLineStipple
&lt;br&gt;+*glLineWidth
&lt;br&gt;+*glLinkProgram
&lt;br&gt;+*glLinkProgramARB
&lt;br&gt;+*glListBase
&lt;br&gt;+*glLoadIdentity
&lt;br&gt;+*glLoadMatrixd
&lt;br&gt;+*glLoadMatrixf
&lt;br&gt;+*glLoadName
&lt;br&gt;+*glLoadProgramNV
&lt;br&gt;+*glLoadTransposeMatrixd
&lt;br&gt;+*glLoadTransposeMatrixdARB
&lt;br&gt;+*glLoadTransposeMatrixf
&lt;br&gt;+*glLoadTransposeMatrixfARB
&lt;br&gt;+*glLockArraysEXT
&lt;br&gt;+*glLogicOp
&lt;br&gt;+*glMap1d
&lt;br&gt;+*glMap1f
&lt;br&gt;+*glMap2d
&lt;br&gt;+*glMap2f
&lt;br&gt;+*glMapBuffer
&lt;br&gt;+*glMapBufferARB
&lt;br&gt;+*glMapBufferRange
&lt;br&gt;+*glMapGrid1d
&lt;br&gt;+*glMapGrid1f
&lt;br&gt;+*glMapGrid2d
&lt;br&gt;+*glMapGrid2f
&lt;br&gt;+*glMaterialf
&lt;br&gt;+*glMaterialfv
&lt;br&gt;+*glMateriali
&lt;br&gt;+*glMaterialiv
&lt;br&gt;+*glMatrixMode
&lt;br&gt;+*glMinmax
&lt;br&gt;+*glMultiDrawArrays
&lt;br&gt;+*glMultiDrawArraysEXT
&lt;br&gt;+*glMultiDrawElements
&lt;br&gt;+*glMultiDrawElementsBaseVertex
&lt;br&gt;+*glMultiDrawElementsEXT
&lt;br&gt;+*glMultiTexCoord1d
&lt;br&gt;+*glMultiTexCoord1dARB
&lt;br&gt;+*glMultiTexCoord1dv
&lt;br&gt;+*glMultiTexCoord1dvARB
&lt;br&gt;+*glMultiTexCoord1f
&lt;br&gt;+*glMultiTexCoord1fARB
&lt;br&gt;+*glMultiTexCoord1fv
&lt;br&gt;+*glMultiTexCoord1fvARB
&lt;br&gt;+*glMultiTexCoord1i
&lt;br&gt;+*glMultiTexCoord1iARB
&lt;br&gt;+*glMultiTexCoord1iv
&lt;br&gt;+*glMultiTexCoord1ivARB
&lt;br&gt;+*glMultiTexCoord1s
&lt;br&gt;+*glMultiTexCoord1sARB
&lt;br&gt;+*glMultiTexCoord1sv
&lt;br&gt;+*glMultiTexCoord1svARB
&lt;br&gt;+*glMultiTexCoord2d
&lt;br&gt;+*glMultiTexCoord2dARB
&lt;br&gt;+*glMultiTexCoord2dv
&lt;br&gt;+*glMultiTexCoord2dvARB
&lt;br&gt;+*glMultiTexCoord2f
&lt;br&gt;+*glMultiTexCoord2fARB
&lt;br&gt;+*glMultiTexCoord2fv
&lt;br&gt;+*glMultiTexCoord2fvARB
&lt;br&gt;+*glMultiTexCoord2i
&lt;br&gt;+*glMultiTexCoord2iARB
&lt;br&gt;+*glMultiTexCoord2iv
&lt;br&gt;+*glMultiTexCoord2ivARB
&lt;br&gt;+*glMultiTexCoord2s
&lt;br&gt;+*glMultiTexCoord2sARB
&lt;br&gt;+*glMultiTexCoord2sv
&lt;br&gt;+*glMultiTexCoord2svARB
&lt;br&gt;+*glMultiTexCoord3d
&lt;br&gt;+*glMultiTexCoord3dARB
&lt;br&gt;+*glMultiTexCoord3dv
&lt;br&gt;+*glMultiTexCoord3dvARB
&lt;br&gt;+*glMultiTexCoord3f
&lt;br&gt;+*glMultiTexCoord3fARB
&lt;br&gt;+*glMultiTexCoord3fv
&lt;br&gt;+*glMultiTexCoord3fvARB
&lt;br&gt;+*glMultiTexCoord3i
&lt;br&gt;+*glMultiTexCoord3iARB
&lt;br&gt;+*glMultiTexCoord3iv
&lt;br&gt;+*glMultiTexCoord3ivARB
&lt;br&gt;+*glMultiTexCoord3s
&lt;br&gt;+*glMultiTexCoord3sARB
&lt;br&gt;+*glMultiTexCoord3sv
&lt;br&gt;+*glMultiTexCoord3svARB
&lt;br&gt;+*glMultiTexCoord4d
&lt;br&gt;+*glMultiTexCoord4dARB
&lt;br&gt;+*glMultiTexCoord4dv
&lt;br&gt;+*glMultiTexCoord4dvARB
&lt;br&gt;+*glMultiTexCoord4f
&lt;br&gt;+*glMultiTexCoord4fARB
&lt;br&gt;+*glMultiTexCoord4fv
&lt;br&gt;+*glMultiTexCoord4fvARB
&lt;br&gt;+*glMultiTexCoord4i
&lt;br&gt;+*glMultiTexCoord4iARB
&lt;br&gt;+*glMultiTexCoord4iv
&lt;br&gt;+*glMultiTexCoord4ivARB
&lt;br&gt;+*glMultiTexCoord4s
&lt;br&gt;+*glMultiTexCoord4sARB
&lt;br&gt;+*glMultiTexCoord4sv
&lt;br&gt;+*glMultiTexCoord4svARB
&lt;br&gt;+*glMultMatrixd
&lt;br&gt;+*glMultMatrixf
&lt;br&gt;+*glMultTransposeMatrixd
&lt;br&gt;+*glMultTransposeMatrixdARB
&lt;br&gt;+*glMultTransposeMatrixf
&lt;br&gt;+*glMultTransposeMatrixfARB
&lt;br&gt;+*glNewList
&lt;br&gt;+*glNormal3b
&lt;br&gt;+*glNormal3bv
&lt;br&gt;+*glNormal3d
&lt;br&gt;+*glNormal3dv
&lt;br&gt;+*glNormal3f
&lt;br&gt;+*glNormal3fv
&lt;br&gt;+*glNormal3i
&lt;br&gt;+*glNormal3iv
&lt;br&gt;+*glNormal3s
&lt;br&gt;+*glNormal3sv
&lt;br&gt;+*glNormalPointer
&lt;br&gt;+*glNormalPointerEXT
&lt;br&gt;+*glOrtho
&lt;br&gt;+*glPassTexCoordATI
&lt;br&gt;+*glPassThrough
&lt;br&gt;+*glPixelMapfv
&lt;br&gt;+*glPixelMapuiv
&lt;br&gt;+*glPixelMapusv
&lt;br&gt;+*glPixelStoref
&lt;br&gt;+*glPixelStorei
&lt;br&gt;+*glPixelTransferf
&lt;br&gt;+*glPixelTransferi
&lt;br&gt;+*glPixelZoom
&lt;br&gt;+*glPointParameterf
&lt;br&gt;+*glPointParameterfARB
&lt;br&gt;+*glPointParameterfEXT
&lt;br&gt;+*glPointParameterfv
&lt;br&gt;+*glPointParameterfvARB
&lt;br&gt;+*glPointParameterfvEXT
&lt;br&gt;+*glPointParameteri
&lt;br&gt;+*glPointParameteriNV
&lt;br&gt;+*glPointParameteriv
&lt;br&gt;+*glPointParameterivNV
&lt;br&gt;+*glPointSize
&lt;br&gt;+*glPolygonMode
&lt;br&gt;+*glPolygonOffset
&lt;br&gt;+*glPolygonOffsetEXT
&lt;br&gt;+*glPolygonStipple
&lt;br&gt;+*glPopAttrib
&lt;br&gt;+*glPopClientAttrib
&lt;br&gt;+*glPopMatrix
&lt;br&gt;+*glPopName
&lt;br&gt;+*glPrioritizeTextures
&lt;br&gt;+*glPrioritizeTexturesEXT
&lt;br&gt;+*glProgramEnvParameter4dARB
&lt;br&gt;+*glProgramEnvParameter4dvARB
&lt;br&gt;+*glProgramEnvParameter4fARB
&lt;br&gt;+*glProgramEnvParameter4fvARB
&lt;br&gt;+*glProgramLocalParameter4dARB
&lt;br&gt;+*glProgramLocalParameter4dvARB
&lt;br&gt;+*glProgramLocalParameter4fARB
&lt;br&gt;+*glProgramLocalParameter4fvARB
&lt;br&gt;+*glProgramNamedParameter4dNV
&lt;br&gt;+*glProgramNamedParameter4dvNV
&lt;br&gt;+*glProgramNamedParameter4fNV
&lt;br&gt;+*glProgramNamedParameter4fvNV
&lt;br&gt;+*glProgramParameter4dNV
&lt;br&gt;+*glProgramParameter4dvNV
&lt;br&gt;+*glProgramParameter4fNV
&lt;br&gt;+*glProgramParameter4fvNV
&lt;br&gt;+*glProgramParameters4dvNV
&lt;br&gt;+*glProgramParameters4fvNV
&lt;br&gt;+*glProgramStringARB
&lt;br&gt;+*glProvokingVertex
&lt;br&gt;+*glProvokingVertexEXT
&lt;br&gt;+*glPushAttrib
&lt;br&gt;+*glPushClientAttrib
&lt;br&gt;+*glPushMatrix
&lt;br&gt;+*glPushName
&lt;br&gt;+*glRasterPos2d
&lt;br&gt;+*glRasterPos2dv
&lt;br&gt;+*glRasterPos2f
&lt;br&gt;+*glRasterPos2fv
&lt;br&gt;+*glRasterPos2i
&lt;br&gt;+*glRasterPos2iv
&lt;br&gt;+*glRasterPos2s
&lt;br&gt;+*glRasterPos2sv
&lt;br&gt;+*glRasterPos3d
&lt;br&gt;+*glRasterPos3dv
&lt;br&gt;+*glRasterPos3f
&lt;br&gt;+*glRasterPos3fv
&lt;br&gt;+*glRasterPos3i
&lt;br&gt;+*glRasterPos3iv
&lt;br&gt;+*glRasterPos3s
&lt;br&gt;+*glRasterPos3sv
&lt;br&gt;+*glRasterPos4d
&lt;br&gt;+*glRasterPos4dv
&lt;br&gt;+*glRasterPos4f
&lt;br&gt;+*glRasterPos4fv
&lt;br&gt;+*glRasterPos4i
&lt;br&gt;+*glRasterPos4iv
&lt;br&gt;+*glRasterPos4s
&lt;br&gt;+*glRasterPos4sv
&lt;br&gt;+*glReadBuffer
&lt;br&gt;+*glReadPixels
&lt;br&gt;+*glRectd
&lt;br&gt;+*glRectdv
&lt;br&gt;+*glRectf
&lt;br&gt;+*glRectfv
&lt;br&gt;+*glRecti
&lt;br&gt;+*glRectiv
&lt;br&gt;+*glRects
&lt;br&gt;+*glRectsv
&lt;br&gt;+*glRenderbufferStorage
&lt;br&gt;+*glRenderbufferStorageEXT
&lt;br&gt;+*glRenderbufferStorageMultisample
&lt;br&gt;+*glRenderbufferStorageMultisampleEXT
&lt;br&gt;+*glRenderMode
&lt;br&gt;+*glRequestResidentProgramsNV
&lt;br&gt;+*glResetHistogram
&lt;br&gt;+*glResetMinmax
&lt;br&gt;+*glResizeBuffersMESA
&lt;br&gt;+*glRotated
&lt;br&gt;+*glRotatef
&lt;br&gt;+*glSampleCoverage
&lt;br&gt;+*glSampleCoverageARB
&lt;br&gt;+*glSampleMapATI
&lt;br&gt;+*glScaled
&lt;br&gt;+*glScalef
&lt;br&gt;+*glScissor
&lt;br&gt;+*glSecondaryColor3b
&lt;br&gt;+*glSecondaryColor3bEXT
&lt;br&gt;+*glSecondaryColor3bv
&lt;br&gt;+*glSecondaryColor3bvEXT
&lt;br&gt;+*glSecondaryColor3d
&lt;br&gt;+*glSecondaryColor3dEXT
&lt;br&gt;+*glSecondaryColor3dv
&lt;br&gt;+*glSecondaryColor3dvEXT
&lt;br&gt;+*glSecondaryColor3f
&lt;br&gt;+*glSecondaryColor3fEXT
&lt;br&gt;+*glSecondaryColor3fv
&lt;br&gt;+*glSecondaryColor3fvEXT
&lt;br&gt;+*glSecondaryColor3i
&lt;br&gt;+*glSecondaryColor3iEXT
&lt;br&gt;+*glSecondaryColor3iv
&lt;br&gt;+*glSecondaryColor3ivEXT
&lt;br&gt;+*glSecondaryColor3s
&lt;br&gt;+*glSecondaryColor3sEXT
&lt;br&gt;+*glSecondaryColor3sv
&lt;br&gt;+*glSecondaryColor3svEXT
&lt;br&gt;+*glSecondaryColor3ub
&lt;br&gt;+*glSecondaryColor3ubEXT
&lt;br&gt;+*glSecondaryColor3ubv
&lt;br&gt;+*glSecondaryColor3ubvEXT
&lt;br&gt;+*glSecondaryColor3ui
&lt;br&gt;+*glSecondaryColor3uiEXT
&lt;br&gt;+*glSecondaryColor3uiv
&lt;br&gt;+*glSecondaryColor3uivEXT
&lt;br&gt;+*glSecondaryColor3us
&lt;br&gt;+*glSecondaryColor3usEXT
&lt;br&gt;+*glSecondaryColor3usv
&lt;br&gt;+*glSecondaryColor3usvEXT
&lt;br&gt;+*glSecondaryColorPointer
&lt;br&gt;+*glSecondaryColorPointerEXT
&lt;br&gt;+*glSelectBuffer
&lt;br&gt;+*glSeparableFilter2D
&lt;br&gt;+*glSetFragmentShaderConstantATI
&lt;br&gt;+*glShadeModel
&lt;br&gt;+*glShaderSource
&lt;br&gt;+*glShaderSourceARB
&lt;br&gt;+*glStencilFunc
&lt;br&gt;+*glStencilFuncSeparate
&lt;br&gt;+*glStencilMask
&lt;br&gt;+*glStencilMaskSeparate
&lt;br&gt;+*glStencilOp
&lt;br&gt;+*glStencilOpSeparate
&lt;br&gt;+*glTexBumpParameterfvATI
&lt;br&gt;+*glTexBumpParameterivATI
&lt;br&gt;+*glTexCoord1d
&lt;br&gt;+*glTexCoord1dv
&lt;br&gt;+*glTexCoord1f
&lt;br&gt;+*glTexCoord1fv
&lt;br&gt;+*glTexCoord1i
&lt;br&gt;+*glTexCoord1iv
&lt;br&gt;+*glTexCoord1s
&lt;br&gt;+*glTexCoord1sv
&lt;br&gt;+*glTexCoord2d
&lt;br&gt;+*glTexCoord2dv
&lt;br&gt;+*glTexCoord2f
&lt;br&gt;+*glTexCoord2fv
&lt;br&gt;+*glTexCoord2i
&lt;br&gt;+*glTexCoord2iv
&lt;br&gt;+*glTexCoord2s
&lt;br&gt;+*glTexCoord2sv
&lt;br&gt;+*glTexCoord3d
&lt;br&gt;+*glTexCoord3dv
&lt;br&gt;+*glTexCoord3f
&lt;br&gt;+*glTexCoord3fv
&lt;br&gt;+*glTexCoord3i
&lt;br&gt;+*glTexCoord3iv
&lt;br&gt;+*glTexCoord3s
&lt;br&gt;+*glTexCoord3sv
&lt;br&gt;+*glTexCoord4d
&lt;br&gt;+*glTexCoord4dv
&lt;br&gt;+*glTexCoord4f
&lt;br&gt;+*glTexCoord4fv
&lt;br&gt;+*glTexCoord4i
&lt;br&gt;+*glTexCoord4iv
&lt;br&gt;+*glTexCoord4s
&lt;br&gt;+*glTexCoord4sv
&lt;br&gt;+*glTexCoordPointer
&lt;br&gt;+*glTexCoordPointerEXT
&lt;br&gt;+*glTexEnvf
&lt;br&gt;+*glTexEnvfv
&lt;br&gt;+*glTexEnvi
&lt;br&gt;+*glTexEnviv
&lt;br&gt;+*glTexGend
&lt;br&gt;+*glTexGendv
&lt;br&gt;+*glTexGenf
&lt;br&gt;+*glTexGenfv
&lt;br&gt;+*glTexGeni
&lt;br&gt;+*glTexGeniv
&lt;br&gt;+*glTexImage1D
&lt;br&gt;+*glTexImage2D
&lt;br&gt;+*glTexImage3D
&lt;br&gt;+*glTexImage3DEXT
&lt;br&gt;+*glTexParameterf
&lt;br&gt;+*glTexParameterfv
&lt;br&gt;+*glTexParameteri
&lt;br&gt;+*glTexParameteriv
&lt;br&gt;+*glTexSubImage1D
&lt;br&gt;+*glTexSubImage1DEXT
&lt;br&gt;+*glTexSubImage2D
&lt;br&gt;+*glTexSubImage2DEXT
&lt;br&gt;+*glTexSubImage3D
&lt;br&gt;+*glTexSubImage3DEXT
&lt;br&gt;+*glTrackMatrixNV
&lt;br&gt;+*glTranslated
&lt;br&gt;+*glTranslatef
&lt;br&gt;+*glUniform1f
&lt;br&gt;+*glUniform1fARB
&lt;br&gt;+*glUniform1fv
&lt;br&gt;+*glUniform1fvARB
&lt;br&gt;+*glUniform1i
&lt;br&gt;+*glUniform1iARB
&lt;br&gt;+*glUniform1iv
&lt;br&gt;+*glUniform1ivARB
&lt;br&gt;+*glUniform2f
&lt;br&gt;+*glUniform2fARB
&lt;br&gt;+*glUniform2fv
&lt;br&gt;+*glUniform2fvARB
&lt;br&gt;+*glUniform2i
&lt;br&gt;+*glUniform2iARB
&lt;br&gt;+*glUniform2iv
&lt;br&gt;+*glUniform2ivARB
&lt;br&gt;+*glUniform3f
&lt;br&gt;+*glUniform3fARB
&lt;br&gt;+*glUniform3fv
&lt;br&gt;+*glUniform3fvARB
&lt;br&gt;+*glUniform3i
&lt;br&gt;+*glUniform3iARB
&lt;br&gt;+*glUniform3iv
&lt;br&gt;+*glUniform3ivARB
&lt;br&gt;+*glUniform4f
&lt;br&gt;+*glUniform4fARB
&lt;br&gt;+*glUniform4fv
&lt;br&gt;+*glUniform4fvARB
&lt;br&gt;+*glUniform4i
&lt;br&gt;+*glUniform4iARB
&lt;br&gt;+*glUniform4iv
&lt;br&gt;+*glUniform4ivARB
&lt;br&gt;+*glUniformMatrix2fv
&lt;br&gt;+*glUniformMatrix2fvARB
&lt;br&gt;+*glUniformMatrix2x3fv
&lt;br&gt;+*glUniformMatrix2x4fv
&lt;br&gt;+*glUniformMatrix3fv
&lt;br&gt;+*glUniformMatrix3fvARB
&lt;br&gt;+*glUniformMatrix3x2fv
&lt;br&gt;+*glUniformMatrix3x4fv
&lt;br&gt;+*glUniformMatrix4fv
&lt;br&gt;+*glUniformMatrix4fvARB
&lt;br&gt;+*glUniformMatrix4x2fv
&lt;br&gt;+*glUniformMatrix4x3fv
&lt;br&gt;+*glUnlockArraysEXT
&lt;br&gt;+*glUnmapBuffer
&lt;br&gt;+*glUnmapBufferARB
&lt;br&gt;+*glUnused
&lt;br&gt;+*glUseProgram
&lt;br&gt;+*glUseProgramObjectARB
&lt;br&gt;+*glValidateProgram
&lt;br&gt;+*glValidateProgramARB
&lt;br&gt;+*glVertex2d
&lt;br&gt;+*glVertex2dv
&lt;br&gt;+*glVertex2f
&lt;br&gt;+*glVertex2fv
&lt;br&gt;+*glVertex2i
&lt;br&gt;+*glVertex2iv
&lt;br&gt;+*glVertex2s
&lt;br&gt;+*glVertex2sv
&lt;br&gt;+*glVertex3d
&lt;br&gt;+*glVertex3dv
&lt;br&gt;+*glVertex3f
&lt;br&gt;+*glVertex3fv
&lt;br&gt;+*glVertex3i
&lt;br&gt;+*glVertex3iv
&lt;br&gt;+*glVertex3s
&lt;br&gt;+*glVertex3sv
&lt;br&gt;+*glVertex4d
&lt;br&gt;+*glVertex4dv
&lt;br&gt;+*glVertex4f
&lt;br&gt;+*glVertex4fv
&lt;br&gt;+*glVertex4i
&lt;br&gt;+*glVertex4iv
&lt;br&gt;+*glVertex4s
&lt;br&gt;+*glVertex4sv
&lt;br&gt;+*glVertexArrayRangeNV
&lt;br&gt;+*glVertexAttrib1d
&lt;br&gt;+*glVertexAttrib1dARB
&lt;br&gt;+*glVertexAttrib1dNV
&lt;br&gt;+*glVertexAttrib1dv
&lt;br&gt;+*glVertexAttrib1dvARB
&lt;br&gt;+*glVertexAttrib1dvNV
&lt;br&gt;+*glVertexAttrib1f
&lt;br&gt;+*glVertexAttrib1fARB
&lt;br&gt;+*glVertexAttrib1fNV
&lt;br&gt;+*glVertexAttrib1fv
&lt;br&gt;+*glVertexAttrib1fvARB
&lt;br&gt;+*glVertexAttrib1fvNV
&lt;br&gt;+*glVertexAttrib1s
&lt;br&gt;+*glVertexAttrib1sARB
&lt;br&gt;+*glVertexAttrib1sNV
&lt;br&gt;+*glVertexAttrib1sv
&lt;br&gt;+*glVertexAttrib1svARB
&lt;br&gt;+*glVertexAttrib1svNV
&lt;br&gt;+*glVertexAttrib2d
&lt;br&gt;+*glVertexAttrib2dARB
&lt;br&gt;+*glVertexAttrib2dNV
&lt;br&gt;+*glVertexAttrib2dv
&lt;br&gt;+*glVertexAttrib2dvARB
&lt;br&gt;+*glVertexAttrib2dvNV
&lt;br&gt;+*glVertexAttrib2f
&lt;br&gt;+*glVertexAttrib2fARB
&lt;br&gt;+*glVertexAttrib2fNV
&lt;br&gt;+*glVertexAttrib2fv
&lt;br&gt;+*glVertexAttrib2fvARB
&lt;br&gt;+*glVertexAttrib2fvNV
&lt;br&gt;+*glVertexAttrib2s
&lt;br&gt;+*glVertexAttrib2sARB
&lt;br&gt;+*glVertexAttrib2sNV
&lt;br&gt;+*glVertexAttrib2sv
&lt;br&gt;+*glVertexAttrib2svARB
&lt;br&gt;+*glVertexAttrib2svNV
&lt;br&gt;+*glVertexAttrib3d
&lt;br&gt;+*glVertexAttrib3dARB
&lt;br&gt;+*glVertexAttrib3dNV
&lt;br&gt;+*glVertexAttrib3dv
&lt;br&gt;+*glVertexAttrib3dvARB
&lt;br&gt;+*glVertexAttrib3dvNV
&lt;br&gt;+*glVertexAttrib3f
&lt;br&gt;+*glVertexAttrib3fARB
&lt;br&gt;+*glVertexAttrib3fNV
&lt;br&gt;+*glVertexAttrib3fv
&lt;br&gt;+*glVertexAttrib3fvARB
&lt;br&gt;+*glVertexAttrib3fvNV
&lt;br&gt;+*glVertexAttrib3s
&lt;br&gt;+*glVertexAttrib3sARB
&lt;br&gt;+*glVertexAttrib3sNV
&lt;br&gt;+*glVertexAttrib3sv
&lt;br&gt;+*glVertexAttrib3svARB
&lt;br&gt;+*glVertexAttrib3svNV
&lt;br&gt;+*glVertexAttrib4bv
&lt;br&gt;+*glVertexAttrib4bvARB
&lt;br&gt;+*glVertexAttrib4d
&lt;br&gt;+*glVertexAttrib4dARB
&lt;br&gt;+*glVertexAttrib4dNV
&lt;br&gt;+*glVertexAttrib4dv
&lt;br&gt;+*glVertexAttrib4dvARB
&lt;br&gt;+*glVertexAttrib4dvNV
&lt;br&gt;+*glVertexAttrib4f
&lt;br&gt;+*glVertexAttrib4fARB
&lt;br&gt;+*glVertexAttrib4fNV
&lt;br&gt;+*glVertexAttrib4fv
&lt;br&gt;+*glVertexAttrib4fvARB
&lt;br&gt;+*glVertexAttrib4fvNV
&lt;br&gt;+*glVertexAttrib4iv
&lt;br&gt;+*glVertexAttrib4ivARB
&lt;br&gt;+*glVertexAttrib4Nbv
&lt;br&gt;+*glVertexAttrib4NbvARB
&lt;br&gt;+*glVertexAttrib4Niv
&lt;br&gt;+*glVertexAttrib4NivARB
&lt;br&gt;+*glVertexAttrib4Nsv
&lt;br&gt;+*glVertexAttrib4NsvARB
&lt;br&gt;+*glVertexAttrib4Nub
&lt;br&gt;+*glVertexAttrib4NubARB
&lt;br&gt;+*glVertexAttrib4Nubv
&lt;br&gt;+*glVertexAttrib4NubvARB
&lt;br&gt;+*glVertexAttrib4Nuiv
&lt;br&gt;+*glVertexAttrib4NuivARB
&lt;br&gt;+*glVertexAttrib4Nusv
&lt;br&gt;+*glVertexAttrib4NusvARB
&lt;br&gt;+*glVertexAttrib4s
&lt;br&gt;+*glVertexAttrib4sARB
&lt;br&gt;+*glVertexAttrib4sNV
&lt;br&gt;+*glVertexAttrib4sv
&lt;br&gt;+*glVertexAttrib4svARB
&lt;br&gt;+*glVertexAttrib4svNV
&lt;br&gt;+*glVertexAttrib4ubNV
&lt;br&gt;+*glVertexAttrib4ubv
&lt;br&gt;+*glVertexAttrib4ubvARB
&lt;br&gt;+*glVertexAttrib4ubvNV
&lt;br&gt;+*glVertexAttrib4uiv
&lt;br&gt;+*glVertexAttrib4uivARB
&lt;br&gt;+*glVertexAttrib4usv
&lt;br&gt;+*glVertexAttrib4usvARB
&lt;br&gt;+*glVertexAttribPointer
&lt;br&gt;+*glVertexAttribPointerARB
&lt;br&gt;+*glVertexAttribPointerNV
&lt;br&gt;+*glVertexAttribs1dvNV
&lt;br&gt;+*glVertexAttribs1fvNV
&lt;br&gt;+*glVertexAttribs1svNV
&lt;br&gt;+*glVertexAttribs2dvNV
&lt;br&gt;+*glVertexAttribs2fvNV
&lt;br&gt;+*glVertexAttribs2svNV
&lt;br&gt;+*glVertexAttribs3dvNV
&lt;br&gt;+*glVertexAttribs3fvNV
&lt;br&gt;+*glVertexAttribs3svNV
&lt;br&gt;+*glVertexAttribs4dvNV
&lt;br&gt;+*glVertexAttribs4fvNV
&lt;br&gt;+*glVertexAttribs4svNV
&lt;br&gt;+*glVertexAttribs4ubvNV
&lt;br&gt;+*glVertexPointer
&lt;br&gt;+*glVertexPointerEXT
&lt;br&gt;+*glViewport
&lt;br&gt;+*glWaitSync
&lt;br&gt;+*glWindowPos2d
&lt;br&gt;+*glWindowPos2dARB
&lt;br&gt;+*glWindowPos2dMESA
&lt;br&gt;+*glWindowPos2dv
&lt;br&gt;+*glWindowPos2dvARB
&lt;br&gt;+*glWindowPos2dvMESA
&lt;br&gt;+*glWindowPos2f
&lt;br&gt;+*glWindowPos2fARB
&lt;br&gt;+*glWindowPos2fMESA
&lt;br&gt;+*glWindowPos2fv
&lt;br&gt;+*glWindowPos2fvARB
&lt;br&gt;+*glWindowPos2fvMESA
&lt;br&gt;+*glWindowPos2i
&lt;br&gt;+*glWindowPos2iARB
&lt;br&gt;+*glWindowPos2iMESA
&lt;br&gt;+*glWindowPos2iv
&lt;br&gt;+*glWindowPos2ivARB
&lt;br&gt;+*glWindowPos2ivMESA
&lt;br&gt;+*glWindowPos2s
&lt;br&gt;+*glWindowPos2sARB
&lt;br&gt;+*glWindowPos2sMESA
&lt;br&gt;+*glWindowPos2sv
&lt;br&gt;+*glWindowPos2svARB
&lt;br&gt;+*glWindowPos2svMESA
&lt;br&gt;+*glWindowPos3d
&lt;br&gt;+*glWindowPos3dARB
&lt;br&gt;+*glWindowPos3dMESA
&lt;br&gt;+*glWindowPos3dv
&lt;br&gt;+*glWindowPos3dvARB
&lt;br&gt;+*glWindowPos3dvMESA
&lt;br&gt;+*glWindowPos3f
&lt;br&gt;+*glWindowPos3fARB
&lt;br&gt;+*glWindowPos3fMESA
&lt;br&gt;+*glWindowPos3fv
&lt;br&gt;+*glWindowPos3fvARB
&lt;br&gt;+*glWindowPos3fvMESA
&lt;br&gt;+*glWindowPos3i
&lt;br&gt;+*glWindowPos3iARB
&lt;br&gt;+*glWindowPos3iMESA
&lt;br&gt;+*glWindowPos3iv
&lt;br&gt;+*glWindowPos3ivARB
&lt;br&gt;+*glWindowPos3ivMESA
&lt;br&gt;+*glWindowPos3s
&lt;br&gt;+*glWindowPos3sARB
&lt;br&gt;+*glWindowPos3sMESA
&lt;br&gt;+*glWindowPos3sv
&lt;br&gt;+*glWindowPos3svARB
&lt;br&gt;+*glWindowPos3svMESA
&lt;br&gt;+*glWindowPos4dMESA
&lt;br&gt;+*glWindowPos4dvMESA
&lt;br&gt;+*glWindowPos4fMESA
&lt;br&gt;+*glWindowPos4fvMESA
&lt;br&gt;+*glWindowPos4iMESA
&lt;br&gt;+*glWindowPos4ivMESA
&lt;br&gt;+*glWindowPos4sMESA
&lt;br&gt;+*glWindowPos4svMESA
&lt;br&gt;+*glXAllocateMemoryNV
&lt;br&gt;+*glXBindSwapBarrierSGIX
&lt;br&gt;+*glXBindTexImageEXT
&lt;br&gt;+*glXBindTexImageEXT
&lt;br&gt;+*glXChangeDrawableAttributes
&lt;br&gt;+*glXChangeDrawableAttributesSGIX
&lt;br&gt;+*glXChangeDrawableAttributesSGIX
&lt;br&gt;+*glXChooseFBConfig
&lt;br&gt;+*glXChooseVisual
&lt;br&gt;+*glXClientInfo
&lt;br&gt;+*glXCopyContext
&lt;br&gt;+*glXCopySubBufferMESA
&lt;br&gt;+*glXCopySubBufferMESA
&lt;br&gt;+*glXCreateContext
&lt;br&gt;+*glXCreateContextWithConfigSGIX
&lt;br&gt;+*glXCreateContextWithConfigSGIX
&lt;br&gt;+*glXCreateGLXPbufferSGIX
&lt;br&gt;+*glXCreateGLXPbufferSGIX
&lt;br&gt;+*glXCreateGLXPixmap
&lt;br&gt;+*glXCreateGLXPixmapWithConfigSGIX
&lt;br&gt;+*glXCreateGLXPixmapWithConfigSGIX
&lt;br&gt;+*glXCreateNewContext
&lt;br&gt;+*glXCreatePbuffer
&lt;br&gt;+*glXCreatePixmap
&lt;br&gt;+*glXCreateWindow
&lt;br&gt;+*glXDestroyContext
&lt;br&gt;+*glXDestroyGLXPbufferSGIX
&lt;br&gt;+*glXDestroyGLXPbufferSGIX
&lt;br&gt;+*glXDestroyGLXPixmap
&lt;br&gt;+*glXDestroyPbuffer
&lt;br&gt;+*glXDestroyPixmap
&lt;br&gt;+*glXDestroyWindow
&lt;br&gt;+*glXFreeMemoryNV
&lt;br&gt;+*glXGetClientString
&lt;br&gt;+*glXGetConfig
&lt;br&gt;+*glXGetCurrentContext
&lt;br&gt;+*glXGetCurrentDisplay
&lt;br&gt;+*glXGetCurrentDrawable
&lt;br&gt;+*glXGetCurrentReadDrawable
&lt;br&gt;+*glXGetDrawableAttributes
&lt;br&gt;+*glXGetDrawableAttributesSGIX
&lt;br&gt;+*glXGetDrawableAttributesSGIX
&lt;br&gt;+*glXGetFBConfigAttrib
&lt;br&gt;+*glXGetFBConfigs
&lt;br&gt;+*glXGetFBConfigsSGIX
&lt;br&gt;+*glXGetFBConfigsSGIX
&lt;br&gt;+*glXGetQueryDrawable
&lt;br&gt;+*glXGetSelectedEvent
&lt;br&gt;+*glXGetVisualConfigs
&lt;br&gt;+*glXGetVisualFromFBConfig
&lt;br&gt;+*glXIsDirect
&lt;br&gt;+*glXMakeContextCurrent
&lt;br&gt;+*glXMakeCurrent
&lt;br&gt;+*glXMakeCurrentReadSGI
&lt;br&gt;+*glXMakeCurrentReadSGI
&lt;br&gt;+*glXQueryContext
&lt;br&gt;+*glXQueryContextInfoEXT
&lt;br&gt;+*glXQueryContextInfoEXT
&lt;br&gt;+*glXQueryExtension
&lt;br&gt;+*glXQueryExtensionsString
&lt;br&gt;+*glXQueryMaxSwapBarriersSGIX
&lt;br&gt;+*glXQueryServerString
&lt;br&gt;+*glXQueryVersion
&lt;br&gt;+*glXReleaseTexImageEXT
&lt;br&gt;+*glXReleaseTexImageEXT
&lt;br&gt;+*glXRender
&lt;br&gt;+*glXRenderLarge
&lt;br&gt;+*glXSelectEvent
&lt;br&gt;+*glXSwapBuffers
&lt;br&gt;+*glXSwapIntervalSGI
&lt;br&gt;+*glXSwapIntervalSGI
&lt;br&gt;+*glXUseXFont
&lt;br&gt;+*glXVendorPrivate
&lt;br&gt;+*glXVendorPrivateWithReply
&lt;br&gt;+*glXWaitGL
&lt;br&gt;+*glXWaitX
&lt;br&gt;+*glXGetProcAddress
&lt;br&gt;+*glXGetProcAddressARB
&lt;br&gt;diff --git a/src/mesa/glapi/glX_API.xml b/src/mesa/glapi/glX_API.xml
&lt;br&gt;index 9e02aa4..d06dce7 100644
&lt;br&gt;--- a/src/mesa/glapi/glX_API.xml
&lt;br&gt;+++ b/src/mesa/glapi/glX_API.xml
&lt;br&gt;@@ -83,6 +83,102 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;QueryExtensionsString&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx sop=&amp;quot;18&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;ChooseVisual&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx sop=&amp;quot;34&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;GetConfig&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx sop=&amp;quot;35&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;GetCurrentContext&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx sop=&amp;quot;36&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;GetCurrentDrawable&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx sop=&amp;quot;38&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;QueryExtension&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx sop=&amp;quot;44&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;/category&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;category name=&amp;quot;GLX_SGI_swap_control&amp;quot; number=&amp;quot;40&amp;quot; window_system=&amp;quot;glX&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;SwapIntervalSGI&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;return type=&amp;quot;int&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx vendorpriv=&amp;quot;65536&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+&amp;lt;/category&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;category name=&amp;quot;GLX_SGI_make_current_read&amp;quot; number=&amp;quot;42&amp;quot; window_system=&amp;quot;glX&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;MakeCurrentReadSGI&amp;quot;&amp;gt;
&lt;br&gt;+&amp;lt;!-- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;param name=&amp;quot;dpy&amp;quot; type=&amp;quot;Display *&amp;quot;/&amp;gt;
&lt;br&gt;+	&amp;lt;param name=&amp;quot;draw&amp;quot; type=&amp;quot;GLXDrawable&amp;quot;/&amp;gt;
&lt;br&gt;+	&amp;lt;param name=&amp;quot;read&amp;quot; type=&amp;quot;GLXDrawable&amp;quot;/&amp;gt;
&lt;br&gt;+	&amp;lt;param name=&amp;quot;ctx&amp;quot; type=&amp;quot;GLXContext&amp;quot;/&amp;gt; --&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;return type=&amp;quot;Bool&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx vendorpriv=&amp;quot;65537&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+&amp;lt;/category&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;category name=&amp;quot;GLX_EXT_import_context&amp;quot; number=&amp;quot;47&amp;quot; window_system=&amp;quot;glX&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;QueryContextInfoEXT&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx vendorpriv=&amp;quot;1024&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+&amp;lt;/category&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;category name=&amp;quot;GLX_SGIX_fbconfig&amp;quot; number=&amp;quot;49&amp;quot; window_system=&amp;quot;glX&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;GetFBConfigsSGIX&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx vendorpriv=&amp;quot;65540&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;CreateContextWithConfigSGIX&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx vendorpriv=&amp;quot;65541&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;CreateGLXPixmapWithConfigSGIX&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx vendorpriv=&amp;quot;65542&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+&amp;lt;/category&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;category name=&amp;quot;GLX_SGIX_pbuffer&amp;quot; number=&amp;quot;50&amp;quot; window_system=&amp;quot;glX&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;CreateGLXPbufferSGIX&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx vendorpriv=&amp;quot;65543&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;DestroyGLXPbufferSGIX&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx vendorpriv=&amp;quot;65544&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;ChangeDrawableAttributesSGIX&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx vendorpriv=&amp;quot;65545&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;GetDrawableAttributesSGIX&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx vendorpriv=&amp;quot;65546&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+&amp;lt;/category&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;category name=&amp;quot;GLX_MESA_copy_sub_buffer&amp;quot; number=&amp;quot;215&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;CopySubBufferMESA&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx vendorpriv=&amp;quot;5154&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+&amp;lt;/category&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;category name=&amp;quot;GLX_EXT_texture_from_pixmap&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;BindTexImageEXT&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx vendorpriv=&amp;quot;1330&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;ReleaseTexImageEXT&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx vendorpriv=&amp;quot;1331&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+&amp;lt;/category&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;/OpenGLAPI&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;/category&amp;gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;lt;category name=&amp;quot;1.1&amp;quot; window_system=&amp;quot;glX&amp;quot;&amp;gt;
&lt;br&gt;@@ -93,6 +189,16 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;ClientInfo&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx sop=&amp;quot;20&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;GetClientString&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx sop=&amp;quot;35&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+&amp;lt;/category&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;category name=&amp;quot;1.2&amp;quot; window_system=&amp;quot;glX&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;GetCurrentDisplay&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx sop=&amp;quot;37&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;/category&amp;gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;lt;category name=&amp;quot;1.3&amp;quot; window_system=&amp;quot;glX&amp;quot;&amp;gt;
&lt;br&gt;@@ -143,6 +249,34 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;DestroyWindow&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx sop=&amp;quot;32&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;ChooseFBConfig&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx sop=&amp;quot;33&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;GetCurrentReadDrawable&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx sop=&amp;quot;39&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;GetFBConfigAttrib&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx sop=&amp;quot;40&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;GetSelectedEvent&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx sop=&amp;quot;41&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;GetVisualFromFBConfig&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx sop=&amp;quot;42&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;GetQueryDrawable&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx sop=&amp;quot;43&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;SelectEvent&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx sop=&amp;quot;45&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;/category&amp;gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;lt;category name=&amp;quot;GLX_SGI_swap_control&amp;quot; number=&amp;quot;40&amp;quot; window_system=&amp;quot;glX&amp;quot;&amp;gt;
&lt;br&gt;@@ -217,4 +351,21 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;/category&amp;gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+&amp;lt;category name=&amp;quot;GLX_NV_vertex_array_range&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;AllocateMemoryNV&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx sop=&amp;quot;46&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;FreeMemoryNV&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx sop=&amp;quot;47&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function&amp;gt;
&lt;br&gt;+&amp;lt;/category&amp;gt;
&lt;br&gt;+
&lt;br&gt;+&amp;lt;category name=&amp;quot;GLX_SGIX_swap_barrier&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;BindSwapBarrierSGIX&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx sop=&amp;quot;48&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;function name=&amp;quot;QueryMaxSwapBarriersSGIX&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;glx sop=&amp;quot;49&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/function&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;/OpenGLAPI&amp;gt;
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26907236&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--RFC%3A-ABI-cleanup-for-libGL.-tp26907236p26907236.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26906348</id>
	<title>Re: [PATCH] Fix missing sl_pp_* and sl_cl_* symbols in all the dri drivers.</title>
	<published>2009-12-23T11:28:14Z</published>
	<updated>2009-12-23T11:28:14Z</updated>
	<author>
		<name>Brian Paul-4</name>
	</author>
	<content type="html">On Wed, Dec 23, 2009 at 11:57 AM, Adam K Kirchhoff &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26906348&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;adamk@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Brian Paul wrote:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; On Mon, Dec 21, 2009 at 8:09 PM, Robert Noland &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26906348&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;rnoland@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Signed-off-by: Robert Noland &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26906348&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;rnoland@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;  src/mesa/drivers/dri/Makefile.template |    5 ++++-
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;  1 files changed, 4 insertions(+), 1 deletions(-)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; diff --git a/src/mesa/drivers/dri/Makefile.template
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; b/src/mesa/drivers/dri/Makefile.template
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; index 39d25ce..39a23b7 100644
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; --- a/src/mesa/drivers/dri/Makefile.template
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +++ b/src/mesa/drivers/dri/Makefile.template
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; @@ -2,6 +2,9 @@
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;  MESA_MODULES = $(TOP)/src/mesa/libmesa.a
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +GLSL_MODULES = $(TOP)/src/glsl/cl/libglslcl.a \
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +              $(TOP)/src/glsl/pp/libglslpp.a
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;  COMMON_GALLIUM_SOURCES = \
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;        ../common/utils.c \
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;        ../common/vblank.c \
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; @@ -71,7 +74,7 @@ $(LIBNAME): $(OBJECTS) $(MESA_MODULES) $(EXTRA_MODULES)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; $(WINOBJ) Makefile \
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;               $(TOP)/src/mesa/drivers/dri/Makefile.template
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;       $(MKLIB) -o $@ -noprefix -linker '$(CC)' -ldflags '$(LDFLAGS)' \
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;               $(OBJECTS) $(MESA_MODULES) $(EXTRA_MODULES) $(WINOBJ) \
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; -               $(DRI_LIB_DEPS)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; +               $(GLSL_MODULES) $(DRI_LIB_DEPS)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;  $(TOP)/$(LIB_DIR)/$(LIBNAME): $(LIBNAME)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; This patch shouldn't be needed.  The libglslcl.a and libglslpp.a
&lt;br&gt;&amp;gt;&amp;gt; archives get included in the libmesa.a archive already.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Things run OK here as-is.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; -
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Without this patch, r600_dri.so gives an undefined symbol for
&lt;br&gt;&amp;gt; 'sl_pp_context_create' on FreeBSD 9.0-CURRENT amd64 and i386.  With this
&lt;br&gt;&amp;gt; patch, it works fine.  Perhaps that patch shouldn't be  needed, but it
&lt;br&gt;&amp;gt; certain is needed here :-)
&lt;/div&gt;&lt;br&gt;It looks like the freebsd case in bin/mklib doesn't handle &amp;quot;unrolling&amp;quot;
&lt;br&gt;of .a archives into constituent .o files like the Linux code does.
&lt;br&gt;That's probably the root issue.
&lt;br&gt;&lt;br&gt;I'm also tempted to move the src/glsl/* files down into
&lt;br&gt;src/mesa/shader/slang/ to simplify the building process. &amp;nbsp;I think
&lt;br&gt;Michal's intention was for the GLSL compiler to live in a separate
&lt;br&gt;place from the rest of Mesa to stress modularity but it's caused
&lt;br&gt;trouble elsewhere.
&lt;br&gt;&lt;br&gt;I'll try to look into that when I have a little time, maybe tonight or tomorrow.
&lt;br&gt;&lt;br&gt;-Brian
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26906348&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--Fix-missing-sl_pp_*-and-sl_cl_*-symbols-in-all-the-dri-drivers.-tp26883557p26906348.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26906258</id>
	<title>Re: [PATCH] Fix missing sl_pp_* and sl_cl_* symbols in	all the dri drivers.</title>
	<published>2009-12-23T10:57:37Z</published>
	<updated>2009-12-23T10:57:37Z</updated>
	<author>
		<name>Adam K Kirchhoff</name>
	</author>
	<content type="html">Brian Paul wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Mon, Dec 21, 2009 at 8:09 PM, Robert Noland &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26906258&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;rnoland@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; Signed-off-by: Robert Noland &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26906258&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;rnoland@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ---
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;src/mesa/drivers/dri/Makefile.template | &amp;nbsp; &amp;nbsp;5 ++++-
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;1 files changed, 4 insertions(+), 1 deletions(-)
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; diff --git a/src/mesa/drivers/dri/Makefile.template b/src/mesa/drivers/dri/Makefile.template
&lt;br&gt;&amp;gt;&amp;gt; index 39d25ce..39a23b7 100644
&lt;br&gt;&amp;gt;&amp;gt; --- a/src/mesa/drivers/dri/Makefile.template
&lt;br&gt;&amp;gt;&amp;gt; +++ b/src/mesa/drivers/dri/Makefile.template
&lt;br&gt;&amp;gt;&amp;gt; @@ -2,6 +2,9 @@
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;MESA_MODULES = $(TOP)/src/mesa/libmesa.a
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; +GLSL_MODULES = $(TOP)/src/glsl/cl/libglslcl.a \
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$(TOP)/src/glsl/pp/libglslpp.a
&lt;br&gt;&amp;gt;&amp;gt; +
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;COMMON_GALLIUM_SOURCES = \
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ../common/utils.c \
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ../common/vblank.c \
&lt;br&gt;&amp;gt;&amp;gt; @@ -71,7 +74,7 @@ $(LIBNAME): $(OBJECTS) $(MESA_MODULES) $(EXTRA_MODULES) $(WINOBJ) Makefile \
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$(TOP)/src/mesa/drivers/dri/Makefile.template
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$(MKLIB) -o $@ -noprefix -linker '$(CC)' -ldflags '$(LDFLAGS)' \
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$(OBJECTS) $(MESA_MODULES) $(EXTRA_MODULES) $(WINOBJ) \
&lt;br&gt;&amp;gt;&amp;gt; - &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $(DRI_LIB_DEPS)
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $(GLSL_MODULES) $(DRI_LIB_DEPS)
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;$(TOP)/$(LIB_DIR)/$(LIBNAME): $(LIBNAME)
&lt;br&gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This patch shouldn't be needed. &amp;nbsp;The libglslcl.a and libglslpp.a
&lt;br&gt;&amp;gt; archives get included in the libmesa.a archive already.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Things run OK here as-is.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; -
&lt;/div&gt;&lt;br&gt;Without this patch, r600_dri.so gives an undefined symbol for 
&lt;br&gt;'sl_pp_context_create' on FreeBSD 9.0-CURRENT amd64 and i386. &amp;nbsp;With this 
&lt;br&gt;patch, it works fine. &amp;nbsp;Perhaps that patch shouldn't be &amp;nbsp;needed, but it 
&lt;br&gt;certain is needed here :-)
&lt;br&gt;&lt;br&gt;Adam
&lt;br&gt;&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26906258&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--Fix-missing-sl_pp_*-and-sl_cl_*-symbols-in-all-the-dri-drivers.-tp26883557p26906258.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26905925</id>
	<title>Re: [PATCH] Fix missing sl_pp_* and sl_cl_* symbols in all the dri drivers.</title>
	<published>2009-12-23T10:52:24Z</published>
	<updated>2009-12-23T10:52:24Z</updated>
	<author>
		<name>Brian Paul-4</name>
	</author>
	<content type="html">On Mon, Dec 21, 2009 at 8:09 PM, Robert Noland &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26905925&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;rnoland@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Signed-off-by: Robert Noland &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26905925&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;rnoland@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---
&lt;br&gt;&amp;gt;  src/mesa/drivers/dri/Makefile.template |    5 ++++-
&lt;br&gt;&amp;gt;  1 files changed, 4 insertions(+), 1 deletions(-)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; diff --git a/src/mesa/drivers/dri/Makefile.template b/src/mesa/drivers/dri/Makefile.template
&lt;br&gt;&amp;gt; index 39d25ce..39a23b7 100644
&lt;br&gt;&amp;gt; --- a/src/mesa/drivers/dri/Makefile.template
&lt;br&gt;&amp;gt; +++ b/src/mesa/drivers/dri/Makefile.template
&lt;br&gt;&amp;gt; @@ -2,6 +2,9 @@
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;  MESA_MODULES = $(TOP)/src/mesa/libmesa.a
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; +GLSL_MODULES = $(TOP)/src/glsl/cl/libglslcl.a \
&lt;br&gt;&amp;gt; +              $(TOP)/src/glsl/pp/libglslpp.a
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt;  COMMON_GALLIUM_SOURCES = \
&lt;br&gt;&amp;gt;         ../common/utils.c \
&lt;br&gt;&amp;gt;         ../common/vblank.c \
&lt;br&gt;&amp;gt; @@ -71,7 +74,7 @@ $(LIBNAME): $(OBJECTS) $(MESA_MODULES) $(EXTRA_MODULES) $(WINOBJ) Makefile \
&lt;br&gt;&amp;gt;                $(TOP)/src/mesa/drivers/dri/Makefile.template
&lt;br&gt;&amp;gt;        $(MKLIB) -o $@ -noprefix -linker '$(CC)' -ldflags '$(LDFLAGS)' \
&lt;br&gt;&amp;gt;                $(OBJECTS) $(MESA_MODULES) $(EXTRA_MODULES) $(WINOBJ) \
&lt;br&gt;&amp;gt; -               $(DRI_LIB_DEPS)
&lt;br&gt;&amp;gt; +               $(GLSL_MODULES) $(DRI_LIB_DEPS)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;  $(TOP)/$(LIB_DIR)/$(LIBNAME): $(LIBNAME)
&lt;br&gt;&amp;gt; --
&lt;/div&gt;&lt;br&gt;&lt;br&gt;This patch shouldn't be needed. &amp;nbsp;The libglslcl.a and libglslpp.a
&lt;br&gt;archives get included in the libmesa.a archive already.
&lt;br&gt;&lt;br&gt;Things run OK here as-is.
&lt;br&gt;&lt;br&gt;-Brian
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26905925&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--Fix-missing-sl_pp_*-and-sl_cl_*-symbols-in-all-the-dri-drivers.-tp26883557p26905925.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26905858</id>
	<title>Re: [PATCH] [i965] Rename {pf -&gt; util}_format_is_depth_or_stencil()</title>
	<published>2009-12-23T10:45:15Z</published>
	<updated>2009-12-23T10:45:15Z</updated>
	<author>
		<name>Brian Paul-4</name>
	</author>
	<content type="html">On Wed, Dec 23, 2009 at 12:30 AM, Tomas Carnecky &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26905858&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tom@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; The function was moved and renamed in 0bed834b.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Signed-off-by: Tomas Carnecky &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26905858&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tom@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Committed. &amp;nbsp;Thanks.
&lt;br&gt;&lt;br&gt;-Brian
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26905858&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH---i965--Rename-%7Bpf--%3E-util%7D_format_is_depth_or_stencil%28%29-tp26901330p26905858.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26905777</id>
	<title>Re: [PATCH] Regenerate gl_mangle.h.</title>
	<published>2009-12-23T10:38:02Z</published>
	<updated>2009-12-23T10:38:02Z</updated>
	<author>
		<name>Brian Paul-4</name>
	</author>
	<content type="html">On Wed, Dec 23, 2009 at 11:28 AM, tom fogal &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26905777&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tfogal@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; Was working on something else, noticed it was out of date.  Attached.
&lt;br&gt;&lt;br&gt;Committed. &amp;nbsp;Thanks.
&lt;br&gt;&lt;br&gt;-Brian
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26905777&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--Regenerate-gl_mangle.h.-tp26905676p26905777.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26905676</id>
	<title>[PATCH] Regenerate gl_mangle.h.</title>
	<published>2009-12-23T10:28:07Z</published>
	<updated>2009-12-23T10:28:07Z</updated>
	<author>
		<name>tom fogal-3</name>
	</author>
	<content type="html">Was working on something else, noticed it was out of date. &amp;nbsp;Attached.
&lt;br&gt;&lt;br&gt;-tom
&lt;br&gt;&lt;br&gt;&lt;br /&gt;From 6c911847202c21a228719b9f7efeced7453743b1 Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Tom Fogal &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26905676&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tfogal@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Wed, 23 Dec 2009 11:24:52 -0700
&lt;br&gt;Subject: [PATCH] Regenerate gl_mangle.h.
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;include/GL/gl_mangle.h | &amp;nbsp; 43 +++++++++++++++++++++++++++++++++++++++++++
&lt;br&gt;&amp;nbsp;1 files changed, 43 insertions(+), 0 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/include/GL/gl_mangle.h b/include/GL/gl_mangle.h
&lt;br&gt;index 59f6149..b292840 100644
&lt;br&gt;--- a/include/GL/gl_mangle.h
&lt;br&gt;+++ b/include/GL/gl_mangle.h
&lt;br&gt;@@ -30,6 +30,7 @@
&lt;br&gt;&amp;nbsp;/*REGENERATE_TO_END-----------ALL LINES BELOW HERE GET REPLACED ON REGENERATION */
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#define glAccum		MANGLE(Accum)
&lt;br&gt;+#define glActiveProgramEXT		MANGLE(ActiveProgramEXT)
&lt;br&gt;&amp;nbsp;#define glActiveStencilFaceEXT		MANGLE(ActiveStencilFaceEXT)
&lt;br&gt;&amp;nbsp;#define glActiveTextureARB		MANGLE(ActiveTextureARB)
&lt;br&gt;&amp;nbsp;#define glActiveTexture		MANGLE(ActiveTexture)
&lt;br&gt;@@ -60,6 +61,7 @@
&lt;br&gt;&amp;nbsp;#define glBeginTransformFeedback		MANGLE(BeginTransformFeedback)
&lt;br&gt;&amp;nbsp;#define glBeginTransformFeedbackNV		MANGLE(BeginTransformFeedbackNV)
&lt;br&gt;&amp;nbsp;#define glBeginVertexShaderEXT		MANGLE(BeginVertexShaderEXT)
&lt;br&gt;+#define glBeginVideoCaptureNV		MANGLE(BeginVideoCaptureNV)
&lt;br&gt;&amp;nbsp;#define glBindAttribLocationARB		MANGLE(BindAttribLocationARB)
&lt;br&gt;&amp;nbsp;#define glBindAttribLocation		MANGLE(BindAttribLocation)
&lt;br&gt;&amp;nbsp;#define glBindBufferARB		MANGLE(BindBufferARB)
&lt;br&gt;@@ -93,6 +95,8 @@
&lt;br&gt;&amp;nbsp;#define glBindVertexArrayAPPLE		MANGLE(BindVertexArrayAPPLE)
&lt;br&gt;&amp;nbsp;#define glBindVertexArray		MANGLE(BindVertexArray)
&lt;br&gt;&amp;nbsp;#define glBindVertexShaderEXT		MANGLE(BindVertexShaderEXT)
&lt;br&gt;+#define glBindVideoCaptureStreamBufferNV		MANGLE(BindVideoCaptureStreamBufferNV)
&lt;br&gt;+#define glBindVideoCaptureStreamTextureNV		MANGLE(BindVideoCaptureStreamTextureNV)
&lt;br&gt;&amp;nbsp;#define glBinormal3bEXT		MANGLE(Binormal3bEXT)
&lt;br&gt;&amp;nbsp;#define glBinormal3bvEXT		MANGLE(Binormal3bvEXT)
&lt;br&gt;&amp;nbsp;#define glBinormal3dEXT		MANGLE(Binormal3dEXT)
&lt;br&gt;@@ -126,6 +130,7 @@
&lt;br&gt;&amp;nbsp;#define glBlendFuncSeparate		MANGLE(BlendFuncSeparate)
&lt;br&gt;&amp;nbsp;#define glBlitFramebufferEXT		MANGLE(BlitFramebufferEXT)
&lt;br&gt;&amp;nbsp;#define glBlitFramebuffer		MANGLE(BlitFramebuffer)
&lt;br&gt;+#define glBufferAddressRangeNV		MANGLE(BufferAddressRangeNV)
&lt;br&gt;&amp;nbsp;#define glBufferDataARB		MANGLE(BufferDataARB)
&lt;br&gt;&amp;nbsp;#define glBufferData		MANGLE(BufferData)
&lt;br&gt;&amp;nbsp;#define glBufferParameteriAPPLE		MANGLE(BufferParameteriAPPLE)
&lt;br&gt;@@ -202,6 +207,7 @@
&lt;br&gt;&amp;nbsp;#define glColor4uiv		MANGLE(Color4uiv)
&lt;br&gt;&amp;nbsp;#define glColor4us		MANGLE(Color4us)
&lt;br&gt;&amp;nbsp;#define glColor4usv		MANGLE(Color4usv)
&lt;br&gt;+#define glColorFormatNV		MANGLE(ColorFormatNV)
&lt;br&gt;&amp;nbsp;#define glColorFragmentOp1ATI		MANGLE(ColorFragmentOp1ATI)
&lt;br&gt;&amp;nbsp;#define glColorFragmentOp2ATI		MANGLE(ColorFragmentOp2ATI)
&lt;br&gt;&amp;nbsp;#define glColorFragmentOp3ATI		MANGLE(ColorFragmentOp3ATI)
&lt;br&gt;@@ -276,6 +282,7 @@
&lt;br&gt;&amp;nbsp;#define glCopyConvolutionFilter1D		MANGLE(CopyConvolutionFilter1D)
&lt;br&gt;&amp;nbsp;#define glCopyConvolutionFilter2DEXT		MANGLE(CopyConvolutionFilter2DEXT)
&lt;br&gt;&amp;nbsp;#define glCopyConvolutionFilter2D		MANGLE(CopyConvolutionFilter2D)
&lt;br&gt;+#define glCopyImageSubDataNV		MANGLE(CopyImageSubDataNV)
&lt;br&gt;&amp;nbsp;#define glCopyMultiTexImage1DEXT		MANGLE(CopyMultiTexImage1DEXT)
&lt;br&gt;&amp;nbsp;#define glCopyMultiTexImage2DEXT		MANGLE(CopyMultiTexImage2DEXT)
&lt;br&gt;&amp;nbsp;#define glCopyMultiTexSubImage1DEXT		MANGLE(CopyMultiTexSubImage1DEXT)
&lt;br&gt;@@ -302,6 +309,7 @@
&lt;br&gt;&amp;nbsp;#define glCreateProgramObjectARB		MANGLE(CreateProgramObjectARB)
&lt;br&gt;&amp;nbsp;#define glCreateShader		MANGLE(CreateShader)
&lt;br&gt;&amp;nbsp;#define glCreateShaderObjectARB		MANGLE(CreateShaderObjectARB)
&lt;br&gt;+#define glCreateShaderProgramEXT		MANGLE(CreateShaderProgramEXT)
&lt;br&gt;&amp;nbsp;#define glCullFace		MANGLE(CullFace)
&lt;br&gt;&amp;nbsp;#define glCullParameterdvEXT		MANGLE(CullParameterdvEXT)
&lt;br&gt;&amp;nbsp;#define glCullParameterfvEXT		MANGLE(CullParameterfvEXT)
&lt;br&gt;@@ -379,6 +387,7 @@
&lt;br&gt;&amp;nbsp;#define glDrawRangeElementsEXT		MANGLE(DrawRangeElementsEXT)
&lt;br&gt;&amp;nbsp;#define glDrawRangeElements		MANGLE(DrawRangeElements)
&lt;br&gt;&amp;nbsp;#define glDrawTransformFeedbackNV		MANGLE(DrawTransformFeedbackNV)
&lt;br&gt;+#define glEdgeFlagFormatNV		MANGLE(EdgeFlagFormatNV)
&lt;br&gt;&amp;nbsp;#define glEdgeFlag		MANGLE(EdgeFlag)
&lt;br&gt;&amp;nbsp;#define glEdgeFlagPointerEXT		MANGLE(EdgeFlagPointerEXT)
&lt;br&gt;&amp;nbsp;#define glEdgeFlagPointerListIBM		MANGLE(EdgeFlagPointerListIBM)
&lt;br&gt;@@ -408,6 +417,7 @@
&lt;br&gt;&amp;nbsp;#define glEndTransformFeedback		MANGLE(EndTransformFeedback)
&lt;br&gt;&amp;nbsp;#define glEndTransformFeedbackNV		MANGLE(EndTransformFeedbackNV)
&lt;br&gt;&amp;nbsp;#define glEndVertexShaderEXT		MANGLE(EndVertexShaderEXT)
&lt;br&gt;+#define glEndVideoCaptureNV		MANGLE(EndVideoCaptureNV)
&lt;br&gt;&amp;nbsp;#define glEvalCoord1d		MANGLE(EvalCoord1d)
&lt;br&gt;&amp;nbsp;#define glEvalCoord1dv		MANGLE(EvalCoord1dv)
&lt;br&gt;&amp;nbsp;#define glEvalCoord1f		MANGLE(EvalCoord1f)
&lt;br&gt;@@ -445,6 +455,7 @@
&lt;br&gt;&amp;nbsp;#define glFogCoorddv		MANGLE(FogCoorddv)
&lt;br&gt;&amp;nbsp;#define glFogCoordfEXT		MANGLE(FogCoordfEXT)
&lt;br&gt;&amp;nbsp;#define glFogCoordf		MANGLE(FogCoordf)
&lt;br&gt;+#define glFogCoordFormatNV		MANGLE(FogCoordFormatNV)
&lt;br&gt;&amp;nbsp;#define glFogCoordfvEXT		MANGLE(FogCoordfvEXT)
&lt;br&gt;&amp;nbsp;#define glFogCoordfv		MANGLE(FogCoordfv)
&lt;br&gt;&amp;nbsp;#define glFogCoordhNV		MANGLE(FogCoordhNV)
&lt;br&gt;@@ -544,6 +555,7 @@
&lt;br&gt;&amp;nbsp;#define glGetBufferParameteri64v		MANGLE(GetBufferParameteri64v)
&lt;br&gt;&amp;nbsp;#define glGetBufferParameterivARB		MANGLE(GetBufferParameterivARB)
&lt;br&gt;&amp;nbsp;#define glGetBufferParameteriv		MANGLE(GetBufferParameteriv)
&lt;br&gt;+#define glGetBufferParameterui64vNV		MANGLE(GetBufferParameterui64vNV)
&lt;br&gt;&amp;nbsp;#define glGetBufferPointervARB		MANGLE(GetBufferPointervARB)
&lt;br&gt;&amp;nbsp;#define glGetBufferPointerv		MANGLE(GetBufferPointerv)
&lt;br&gt;&amp;nbsp;#define glGetBufferSubDataARB		MANGLE(GetBufferSubDataARB)
&lt;br&gt;@@ -609,6 +621,8 @@
&lt;br&gt;&amp;nbsp;#define glGetInteger64v		MANGLE(GetInteger64v)
&lt;br&gt;&amp;nbsp;#define glGetIntegerIndexedvEXT		MANGLE(GetIntegerIndexedvEXT)
&lt;br&gt;&amp;nbsp;#define glGetIntegeri_v		MANGLE(GetIntegeri_v)
&lt;br&gt;+#define glGetIntegerui64i_vNV		MANGLE(GetIntegerui64i_vNV)
&lt;br&gt;+#define glGetIntegerui64vNV		MANGLE(GetIntegerui64vNV)
&lt;br&gt;&amp;nbsp;#define glGetIntegerv		MANGLE(GetIntegerv)
&lt;br&gt;&amp;nbsp;#define glGetInvariantBooleanvEXT		MANGLE(GetInvariantBooleanvEXT)
&lt;br&gt;&amp;nbsp;#define glGetInvariantFloatvEXT		MANGLE(GetInvariantFloatvEXT)
&lt;br&gt;@@ -651,6 +665,7 @@
&lt;br&gt;&amp;nbsp;#define glGetMultiTexParameterIuivEXT		MANGLE(GetMultiTexParameterIuivEXT)
&lt;br&gt;&amp;nbsp;#define glGetMultiTexParameterivEXT		MANGLE(GetMultiTexParameterivEXT)
&lt;br&gt;&amp;nbsp;#define glGetNamedBufferParameterivEXT		MANGLE(GetNamedBufferParameterivEXT)
&lt;br&gt;+#define glGetNamedBufferParameterui64vNV		MANGLE(GetNamedBufferParameterui64vNV)
&lt;br&gt;&amp;nbsp;#define glGetNamedBufferPointervEXT		MANGLE(GetNamedBufferPointervEXT)
&lt;br&gt;&amp;nbsp;#define glGetNamedBufferSubDataEXT		MANGLE(GetNamedBufferSubDataEXT)
&lt;br&gt;&amp;nbsp;#define glGetNamedFramebufferAttachmentParameterivEXT		MANGLE(GetNamedFramebufferAttachmentParameterivEXT)
&lt;br&gt;@@ -761,6 +776,7 @@
&lt;br&gt;&amp;nbsp;#define glGetUniformLocationARB		MANGLE(GetUniformLocationARB)
&lt;br&gt;&amp;nbsp;#define glGetUniformLocation		MANGLE(GetUniformLocation)
&lt;br&gt;&amp;nbsp;#define glGetUniformOffsetEXT		MANGLE(GetUniformOffsetEXT)
&lt;br&gt;+#define glGetUniformui64vNV		MANGLE(GetUniformui64vNV)
&lt;br&gt;&amp;nbsp;#define glGetUniformuivEXT		MANGLE(GetUniformuivEXT)
&lt;br&gt;&amp;nbsp;#define glGetUniformuiv		MANGLE(GetUniformuiv)
&lt;br&gt;&amp;nbsp;#define glGetVariantArrayObjectfvATI		MANGLE(GetVariantArrayObjectfvATI)
&lt;br&gt;@@ -788,6 +804,10 @@
&lt;br&gt;&amp;nbsp;#define glGetVertexAttribPointervARB		MANGLE(GetVertexAttribPointervARB)
&lt;br&gt;&amp;nbsp;#define glGetVertexAttribPointerv		MANGLE(GetVertexAttribPointerv)
&lt;br&gt;&amp;nbsp;#define glGetVertexAttribPointervNV		MANGLE(GetVertexAttribPointervNV)
&lt;br&gt;+#define glGetVideoCaptureivNV		MANGLE(GetVideoCaptureivNV)
&lt;br&gt;+#define glGetVideoCaptureStreamdvNV		MANGLE(GetVideoCaptureStreamdvNV)
&lt;br&gt;+#define glGetVideoCaptureStreamfvNV		MANGLE(GetVideoCaptureStreamfvNV)
&lt;br&gt;+#define glGetVideoCaptureStreamivNV		MANGLE(GetVideoCaptureStreamivNV)
&lt;br&gt;&amp;nbsp;#define glGetVideoi64vNV		MANGLE(GetVideoi64vNV)
&lt;br&gt;&amp;nbsp;#define glGetVideoivNV		MANGLE(GetVideoivNV)
&lt;br&gt;&amp;nbsp;#define glGetVideoui64vNV		MANGLE(GetVideoui64vNV)
&lt;br&gt;@@ -812,6 +832,7 @@
&lt;br&gt;&amp;nbsp;#define glIndexd		MANGLE(Indexd)
&lt;br&gt;&amp;nbsp;#define glIndexdv		MANGLE(Indexdv)
&lt;br&gt;&amp;nbsp;#define glIndexf		MANGLE(Indexf)
&lt;br&gt;+#define glIndexFormatNV		MANGLE(IndexFormatNV)
&lt;br&gt;&amp;nbsp;#define glIndexFuncEXT		MANGLE(IndexFuncEXT)
&lt;br&gt;&amp;nbsp;#define glIndexfv		MANGLE(Indexfv)
&lt;br&gt;&amp;nbsp;#define glIndexi		MANGLE(Indexi)
&lt;br&gt;@@ -832,6 +853,7 @@
&lt;br&gt;&amp;nbsp;#define glIsAsyncMarkerSGIX		MANGLE(IsAsyncMarkerSGIX)
&lt;br&gt;&amp;nbsp;#define glIsBufferARB		MANGLE(IsBufferARB)
&lt;br&gt;&amp;nbsp;#define glIsBuffer		MANGLE(IsBuffer)
&lt;br&gt;+#define glIsBufferResidentNV		MANGLE(IsBufferResidentNV)
&lt;br&gt;&amp;nbsp;#define glIsEnabledi		MANGLE(IsEnabledi)
&lt;br&gt;&amp;nbsp;#define glIsEnabledIndexedEXT		MANGLE(IsEnabledIndexedEXT)
&lt;br&gt;&amp;nbsp;#define glIsEnabled		MANGLE(IsEnabled)
&lt;br&gt;@@ -840,6 +862,7 @@
&lt;br&gt;&amp;nbsp;#define glIsFramebufferEXT		MANGLE(IsFramebufferEXT)
&lt;br&gt;&amp;nbsp;#define glIsFramebuffer		MANGLE(IsFramebuffer)
&lt;br&gt;&amp;nbsp;#define glIsList		MANGLE(IsList)
&lt;br&gt;+#define glIsNamedBufferResidentNV		MANGLE(IsNamedBufferResidentNV)
&lt;br&gt;&amp;nbsp;#define glIsObjectBufferATI		MANGLE(IsObjectBufferATI)
&lt;br&gt;&amp;nbsp;#define glIsOcclusionQueryNV		MANGLE(IsOcclusionQueryNV)
&lt;br&gt;&amp;nbsp;#define glIsProgramARB		MANGLE(IsProgramARB)
&lt;br&gt;@@ -888,6 +911,8 @@
&lt;br&gt;&amp;nbsp;#define glLoadTransposeMatrixf		MANGLE(LoadTransposeMatrixf)
&lt;br&gt;&amp;nbsp;#define glLockArraysEXT		MANGLE(LockArraysEXT)
&lt;br&gt;&amp;nbsp;#define glLogicOp		MANGLE(LogicOp)
&lt;br&gt;+#define glMakeBufferNonResidentNV		MANGLE(MakeBufferNonResidentNV)
&lt;br&gt;+#define glMakeBufferResidentNV		MANGLE(MakeBufferResidentNV)
&lt;br&gt;&amp;nbsp;#define glMap1d		MANGLE(Map1d)
&lt;br&gt;&amp;nbsp;#define glMap1f		MANGLE(Map1f)
&lt;br&gt;&amp;nbsp;#define glMap2d		MANGLE(Map2d)
&lt;br&gt;@@ -1060,6 +1085,8 @@
&lt;br&gt;&amp;nbsp;#define glNamedFramebufferTextureEXT		MANGLE(NamedFramebufferTextureEXT)
&lt;br&gt;&amp;nbsp;#define glNamedFramebufferTextureFaceEXT		MANGLE(NamedFramebufferTextureFaceEXT)
&lt;br&gt;&amp;nbsp;#define glNamedFramebufferTextureLayerEXT		MANGLE(NamedFramebufferTextureLayerEXT)
&lt;br&gt;+#define glNamedMakeBufferNonResidentNV		MANGLE(NamedMakeBufferNonResidentNV)
&lt;br&gt;+#define glNamedMakeBufferResidentNV		MANGLE(NamedMakeBufferResidentNV)
&lt;br&gt;&amp;nbsp;#define glNamedProgramLocalParameter4dEXT		MANGLE(NamedProgramLocalParameter4dEXT)
&lt;br&gt;&amp;nbsp;#define glNamedProgramLocalParameter4dvEXT		MANGLE(NamedProgramLocalParameter4dvEXT)
&lt;br&gt;&amp;nbsp;#define glNamedProgramLocalParameter4fEXT		MANGLE(NamedProgramLocalParameter4fEXT)
&lt;br&gt;@@ -1091,6 +1118,7 @@
&lt;br&gt;&amp;nbsp;#define glNormal3iv		MANGLE(Normal3iv)
&lt;br&gt;&amp;nbsp;#define glNormal3s		MANGLE(Normal3s)
&lt;br&gt;&amp;nbsp;#define glNormal3sv		MANGLE(Normal3sv)
&lt;br&gt;+#define glNormalFormatNV		MANGLE(NormalFormatNV)
&lt;br&gt;&amp;nbsp;#define glNormalPointerEXT		MANGLE(NormalPointerEXT)
&lt;br&gt;&amp;nbsp;#define glNormalPointerListIBM		MANGLE(NormalPointerListIBM)
&lt;br&gt;&amp;nbsp;#define glNormalPointer		MANGLE(NormalPointer)
&lt;br&gt;@@ -1234,6 +1262,8 @@
&lt;br&gt;&amp;nbsp;#define glProgramUniformMatrix4fvEXT		MANGLE(ProgramUniformMatrix4fvEXT)
&lt;br&gt;&amp;nbsp;#define glProgramUniformMatrix4x2fvEXT		MANGLE(ProgramUniformMatrix4x2fvEXT)
&lt;br&gt;&amp;nbsp;#define glProgramUniformMatrix4x3fvEXT		MANGLE(ProgramUniformMatrix4x3fvEXT)
&lt;br&gt;+#define glProgramUniformui64NV		MANGLE(ProgramUniformui64NV)
&lt;br&gt;+#define glProgramUniformui64vNV		MANGLE(ProgramUniformui64vNV)
&lt;br&gt;&amp;nbsp;#define glProgramVertexLimitNV		MANGLE(ProgramVertexLimitNV)
&lt;br&gt;&amp;nbsp;#define glProvokingVertexEXT		MANGLE(ProvokingVertexEXT)
&lt;br&gt;&amp;nbsp;#define glProvokingVertex		MANGLE(ProvokingVertex)
&lt;br&gt;@@ -1362,6 +1392,7 @@
&lt;br&gt;&amp;nbsp;#define glSecondaryColor3us		MANGLE(SecondaryColor3us)
&lt;br&gt;&amp;nbsp;#define glSecondaryColor3usvEXT		MANGLE(SecondaryColor3usvEXT)
&lt;br&gt;&amp;nbsp;#define glSecondaryColor3usv		MANGLE(SecondaryColor3usv)
&lt;br&gt;+#define glSecondaryColorFormatNV		MANGLE(SecondaryColorFormatNV)
&lt;br&gt;&amp;nbsp;#define glSecondaryColorPointerEXT		MANGLE(SecondaryColorPointerEXT)
&lt;br&gt;&amp;nbsp;#define glSecondaryColorPointerListIBM		MANGLE(SecondaryColorPointerListIBM)
&lt;br&gt;&amp;nbsp;#define glSecondaryColorPointer		MANGLE(SecondaryColorPointer)
&lt;br&gt;@@ -1475,6 +1506,7 @@
&lt;br&gt;&amp;nbsp;#define glTexCoord4iv		MANGLE(TexCoord4iv)
&lt;br&gt;&amp;nbsp;#define glTexCoord4s		MANGLE(TexCoord4s)
&lt;br&gt;&amp;nbsp;#define glTexCoord4sv		MANGLE(TexCoord4sv)
&lt;br&gt;+#define glTexCoordFormatNV		MANGLE(TexCoordFormatNV)
&lt;br&gt;&amp;nbsp;#define glTexCoordPointerEXT		MANGLE(TexCoordPointerEXT)
&lt;br&gt;&amp;nbsp;#define glTexCoordPointerListIBM		MANGLE(TexCoordPointerListIBM)
&lt;br&gt;&amp;nbsp;#define glTexCoordPointer		MANGLE(TexCoordPointer)
&lt;br&gt;@@ -1513,6 +1545,7 @@
&lt;br&gt;&amp;nbsp;#define glTexSubImage3DEXT		MANGLE(TexSubImage3DEXT)
&lt;br&gt;&amp;nbsp;#define glTexSubImage3D		MANGLE(TexSubImage3D)
&lt;br&gt;&amp;nbsp;#define glTexSubImage4DSGIS		MANGLE(TexSubImage4DSGIS)
&lt;br&gt;+#define glTextureBarrierNV		MANGLE(TextureBarrierNV)
&lt;br&gt;&amp;nbsp;#define glTextureBufferEXT		MANGLE(TextureBufferEXT)
&lt;br&gt;&amp;nbsp;#define glTextureColorMaskSGIS		MANGLE(TextureColorMaskSGIS)
&lt;br&gt;&amp;nbsp;#define glTextureImage1DEXT		MANGLE(TextureImage1DEXT)
&lt;br&gt;@@ -1601,6 +1634,8 @@
&lt;br&gt;&amp;nbsp;#define glUniformMatrix4fv		MANGLE(UniformMatrix4fv)
&lt;br&gt;&amp;nbsp;#define glUniformMatrix4x2fv		MANGLE(UniformMatrix4x2fv)
&lt;br&gt;&amp;nbsp;#define glUniformMatrix4x3fv		MANGLE(UniformMatrix4x3fv)
&lt;br&gt;+#define glUniformui64NV		MANGLE(Uniformui64NV)
&lt;br&gt;+#define glUniformui64vNV		MANGLE(Uniformui64vNV)
&lt;br&gt;&amp;nbsp;#define glUnlockArraysEXT		MANGLE(UnlockArraysEXT)
&lt;br&gt;&amp;nbsp;#define glUnmapBufferARB		MANGLE(UnmapBufferARB)
&lt;br&gt;&amp;nbsp;#define glUnmapBuffer		MANGLE(UnmapBuffer)
&lt;br&gt;@@ -1609,6 +1644,7 @@
&lt;br&gt;&amp;nbsp;#define glUpdateObjectBufferATI		MANGLE(UpdateObjectBufferATI)
&lt;br&gt;&amp;nbsp;#define glUseProgram		MANGLE(UseProgram)
&lt;br&gt;&amp;nbsp;#define glUseProgramObjectARB		MANGLE(UseProgramObjectARB)
&lt;br&gt;+#define glUseShaderProgramEXT		MANGLE(UseShaderProgramEXT)
&lt;br&gt;&amp;nbsp;#define glValidateProgramARB		MANGLE(ValidateProgramARB)
&lt;br&gt;&amp;nbsp;#define glValidateProgram		MANGLE(ValidateProgram)
&lt;br&gt;&amp;nbsp;#define glVariantArrayObjectATI		MANGLE(VariantArrayObjectATI)
&lt;br&gt;@@ -1762,6 +1798,7 @@
&lt;br&gt;&amp;nbsp;#define glVertexAttrib4usv		MANGLE(VertexAttrib4usv)
&lt;br&gt;&amp;nbsp;#define glVertexAttribArrayObjectATI		MANGLE(VertexAttribArrayObjectATI)
&lt;br&gt;&amp;nbsp;#define glVertexAttribDivisorARB		MANGLE(VertexAttribDivisorARB)
&lt;br&gt;+#define glVertexAttribFormatNV		MANGLE(VertexAttribFormatNV)
&lt;br&gt;&amp;nbsp;#define glVertexAttribI1iEXT		MANGLE(VertexAttribI1iEXT)
&lt;br&gt;&amp;nbsp;#define glVertexAttribI1i		MANGLE(VertexAttribI1i)
&lt;br&gt;&amp;nbsp;#define glVertexAttribI1ivEXT		MANGLE(VertexAttribI1ivEXT)
&lt;br&gt;@@ -1802,6 +1839,7 @@
&lt;br&gt;&amp;nbsp;#define glVertexAttribI4uiv		MANGLE(VertexAttribI4uiv)
&lt;br&gt;&amp;nbsp;#define glVertexAttribI4usvEXT		MANGLE(VertexAttribI4usvEXT)
&lt;br&gt;&amp;nbsp;#define glVertexAttribI4usv		MANGLE(VertexAttribI4usv)
&lt;br&gt;+#define glVertexAttribIFormatNV		MANGLE(VertexAttribIFormatNV)
&lt;br&gt;&amp;nbsp;#define glVertexAttribIPointerEXT		MANGLE(VertexAttribIPointerEXT)
&lt;br&gt;&amp;nbsp;#define glVertexAttribIPointer		MANGLE(VertexAttribIPointer)
&lt;br&gt;&amp;nbsp;#define glVertexAttribPointerARB		MANGLE(VertexAttribPointerARB)
&lt;br&gt;@@ -1827,6 +1865,7 @@
&lt;br&gt;&amp;nbsp;#define glVertexBlendARB		MANGLE(VertexBlendARB)
&lt;br&gt;&amp;nbsp;#define glVertexBlendEnvfATI		MANGLE(VertexBlendEnvfATI)
&lt;br&gt;&amp;nbsp;#define glVertexBlendEnviATI		MANGLE(VertexBlendEnviATI)
&lt;br&gt;+#define glVertexFormatNV		MANGLE(VertexFormatNV)
&lt;br&gt;&amp;nbsp;#define glVertexPointerEXT		MANGLE(VertexPointerEXT)
&lt;br&gt;&amp;nbsp;#define glVertexPointerListIBM		MANGLE(VertexPointerListIBM)
&lt;br&gt;&amp;nbsp;#define glVertexPointer		MANGLE(VertexPointer)
&lt;br&gt;@@ -1868,6 +1907,10 @@
&lt;br&gt;&amp;nbsp;#define glVertexWeighthNV		MANGLE(VertexWeighthNV)
&lt;br&gt;&amp;nbsp;#define glVertexWeighthvNV		MANGLE(VertexWeighthvNV)
&lt;br&gt;&amp;nbsp;#define glVertexWeightPointerEXT		MANGLE(VertexWeightPointerEXT)
&lt;br&gt;+#define glVideoCaptureNV		MANGLE(VideoCaptureNV)
&lt;br&gt;+#define glVideoCaptureStreamParameterdvNV		MANGLE(VideoCaptureStreamParameterdvNV)
&lt;br&gt;+#define glVideoCaptureStreamParameterfvNV		MANGLE(VideoCaptureStreamParameterfvNV)
&lt;br&gt;+#define glVideoCaptureStreamParameterivNV		MANGLE(VideoCaptureStreamParameterivNV)
&lt;br&gt;&amp;nbsp;#define glViewport		MANGLE(Viewport)
&lt;br&gt;&amp;nbsp;#define glWaitSync		MANGLE(WaitSync)
&lt;br&gt;&amp;nbsp;#define glWeightbvARB		MANGLE(WeightbvARB)
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;&lt;br /&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26905676&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--Regenerate-gl_mangle.h.-tp26905676p26905676.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26904004</id>
	<title>Re: [PATCH] gallium: only create pipe buffer when size	is nonzero</title>
	<published>2009-12-23T08:02:19Z</published>
	<updated>2009-12-23T08:02:19Z</updated>
	<author>
		<name>Keith Whitwell-3</name>
	</author>
	<content type="html">Again I'm doing these by hand through a crappy webmail that won't let me save messages. &amp;nbsp;Hopefully the result isn't too awful.
&lt;br&gt;&lt;br&gt;Keith
&lt;br&gt;________________________________________
&lt;br&gt;From: Maarten Maathuis [&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26904004&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;madman2003@...&lt;/a&gt;]
&lt;br&gt;Sent: Wednesday, December 23, 2009 7:32 AM
&lt;br&gt;To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26904004&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;Subject: Re: [Mesa3d-dev] [PATCH] gallium: only create pipe buffer when size &amp;nbsp; &amp;nbsp;is nonzero
&lt;br&gt;&lt;br&gt;Anyone?
&lt;br&gt;&lt;br&gt;On Sun, Dec 20, 2009 at 2:03 PM, Maarten Maathuis &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26904004&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;madman2003@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; - This fixes a crash upon starting spring (a rts engine/game).
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Signed-off-by: Maarten Maathuis &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26904004&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;madman2003@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---
&lt;br&gt;&amp;gt; &amp;nbsp;src/mesa/state_tracker/st_cb_bufferobjects.c | &amp;nbsp; 16 ++++++++++------
&lt;br&gt;&amp;gt; &amp;nbsp;1 files changed, 10 insertions(+), 6 deletions(-)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; diff --git a/src/mesa/state_tracker/st_cb_bufferobjects.c b/src/mesa/state_tracker/st_cb_bufferobjects.c
&lt;br&gt;&amp;gt; index 63196af..494a3a9 100644
&lt;br&gt;&amp;gt; --- a/src/mesa/state_tracker/st_cb_bufferobjects.c
&lt;br&gt;&amp;gt; +++ b/src/mesa/state_tracker/st_cb_bufferobjects.c
&lt;br&gt;&amp;gt; @@ -170,15 +170,19 @@ st_bufferobj_data(GLcontext *ctx,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;pipe_buffer_reference( &amp;st_obj-&amp;gt;buffer, NULL );
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; - &amp;nbsp; st_obj-&amp;gt;buffer = pipe_buffer_create( pipe-&amp;gt;screen, 32, buffer_usage, size );
&lt;br&gt;&amp;gt; + &amp;nbsp; if (size != 0) {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;st_obj-&amp;gt;buffer = pipe_buffer_create(pipe-&amp;gt;screen, 32, buffer_usage, size);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; - &amp;nbsp; if (!st_obj-&amp;gt;buffer) {
&lt;br&gt;&amp;gt; - &amp;nbsp; &amp;nbsp; &amp;nbsp;return GL_FALSE;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!st_obj-&amp;gt;buffer) {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return GL_FALSE;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;if (data)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; st_no_flush_pipe_buffer_write(st_context(ctx), st_obj-&amp;gt;buffer, 0,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;size, data);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;return GL_TRUE;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; - &amp;nbsp; if (data)
&lt;br&gt;&amp;gt; - &amp;nbsp; &amp;nbsp; &amp;nbsp;st_no_flush_pipe_buffer_write(st_context(ctx), st_obj-&amp;gt;buffer, 0,
&lt;br&gt;&amp;gt; - &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; size, data);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;return GL_TRUE;
&lt;br&gt;&amp;gt; &amp;nbsp;}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; 1.6.5.4
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26904004&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26904004&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--gallium%3A-only-create-pipe-buffer-when-size-is-nonzero-tp26863285p26904004.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26903805</id>
	<title>Re: [PATCH] gallium: only create pipe buffer when size is nonzero</title>
	<published>2009-12-23T07:47:05Z</published>
	<updated>2009-12-23T07:47:05Z</updated>
	<author>
		<name>José Fonseca-2</name>
	</author>
	<content type="html">Maarten,
&lt;br&gt;&lt;br&gt;Looks good to me. Do you need someone to commit it for you?
&lt;br&gt;&lt;br&gt;Jose
&lt;br&gt;&lt;br&gt;&lt;br&gt;On Wed, 2009-12-23 at 07:32 -0800, Maarten Maathuis wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Anyone?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; On Sun, Dec 20, 2009 at 2:03 PM, Maarten Maathuis &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26903805&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;madman2003@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt; - This fixes a crash upon starting spring (a rts engine/game).
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Signed-off-by: Maarten Maathuis &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26903805&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;madman2003@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; ---
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp;src/mesa/state_tracker/st_cb_bufferobjects.c | &amp;nbsp; 16 ++++++++++------
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp;1 files changed, 10 insertions(+), 6 deletions(-)
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; diff --git a/src/mesa/state_tracker/st_cb_bufferobjects.c b/src/mesa/state_tracker/st_cb_bufferobjects.c
&lt;br&gt;&amp;gt; &amp;gt; index 63196af..494a3a9 100644
&lt;br&gt;&amp;gt; &amp;gt; --- a/src/mesa/state_tracker/st_cb_bufferobjects.c
&lt;br&gt;&amp;gt; &amp;gt; +++ b/src/mesa/state_tracker/st_cb_bufferobjects.c
&lt;br&gt;&amp;gt; &amp;gt; @@ -170,15 +170,19 @@ st_bufferobj_data(GLcontext *ctx,
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp;pipe_buffer_reference( &amp;st_obj-&amp;gt;buffer, NULL );
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; - &amp;nbsp; st_obj-&amp;gt;buffer = pipe_buffer_create( pipe-&amp;gt;screen, 32, buffer_usage, size );
&lt;br&gt;&amp;gt; &amp;gt; + &amp;nbsp; if (size != 0) {
&lt;br&gt;&amp;gt; &amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;st_obj-&amp;gt;buffer = pipe_buffer_create(pipe-&amp;gt;screen, 32, buffer_usage, size);
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; - &amp;nbsp; if (!st_obj-&amp;gt;buffer) {
&lt;br&gt;&amp;gt; &amp;gt; - &amp;nbsp; &amp;nbsp; &amp;nbsp;return GL_FALSE;
&lt;br&gt;&amp;gt; &amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!st_obj-&amp;gt;buffer) {
&lt;br&gt;&amp;gt; &amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return GL_FALSE;
&lt;br&gt;&amp;gt; &amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; &amp;gt; +
&lt;br&gt;&amp;gt; &amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;if (data)
&lt;br&gt;&amp;gt; &amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; st_no_flush_pipe_buffer_write(st_context(ctx), st_obj-&amp;gt;buffer, 0,
&lt;br&gt;&amp;gt; &amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;size, data);
&lt;br&gt;&amp;gt; &amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;return GL_TRUE;
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; - &amp;nbsp; if (data)
&lt;br&gt;&amp;gt; &amp;gt; - &amp;nbsp; &amp;nbsp; &amp;nbsp;st_no_flush_pipe_buffer_write(st_context(ctx), st_obj-&amp;gt;buffer, 0,
&lt;br&gt;&amp;gt; &amp;gt; - &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; size, data);
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp;return GL_TRUE;
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp;}
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt; 1.6.5.4
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; ------------------------------------------------------------------------------
&lt;br&gt;&amp;gt; This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;&amp;gt; Take advantage of Verizon's best-in-class app development support
&lt;br&gt;&amp;gt; A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;&amp;gt; Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;&amp;gt; _______________________________________________
&lt;br&gt;&amp;gt; Mesa3d-dev mailing list
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26903805&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26903805&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--gallium%3A-only-create-pipe-buffer-when-size-is-nonzero-tp26863285p26903805.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26903628</id>
	<title>Re: [PATCH] gallium: only create pipe buffer when size is nonzero</title>
	<published>2009-12-23T07:32:09Z</published>
	<updated>2009-12-23T07:32:09Z</updated>
	<author>
		<name>Maarten Maathuis</name>
	</author>
	<content type="html">Anyone?
&lt;br&gt;&lt;br&gt;On Sun, Dec 20, 2009 at 2:03 PM, Maarten Maathuis &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26903628&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;madman2003@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; - This fixes a crash upon starting spring (a rts engine/game).
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Signed-off-by: Maarten Maathuis &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26903628&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;madman2003@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---
&lt;br&gt;&amp;gt;  src/mesa/state_tracker/st_cb_bufferobjects.c |   16 ++++++++++------
&lt;br&gt;&amp;gt;  1 files changed, 10 insertions(+), 6 deletions(-)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; diff --git a/src/mesa/state_tracker/st_cb_bufferobjects.c b/src/mesa/state_tracker/st_cb_bufferobjects.c
&lt;br&gt;&amp;gt; index 63196af..494a3a9 100644
&lt;br&gt;&amp;gt; --- a/src/mesa/state_tracker/st_cb_bufferobjects.c
&lt;br&gt;&amp;gt; +++ b/src/mesa/state_tracker/st_cb_bufferobjects.c
&lt;br&gt;&amp;gt; @@ -170,15 +170,19 @@ st_bufferobj_data(GLcontext *ctx,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;    pipe_buffer_reference( &amp;st_obj-&amp;gt;buffer, NULL );
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; -   st_obj-&amp;gt;buffer = pipe_buffer_create( pipe-&amp;gt;screen, 32, buffer_usage, size );
&lt;br&gt;&amp;gt; +   if (size != 0) {
&lt;br&gt;&amp;gt; +      st_obj-&amp;gt;buffer = pipe_buffer_create(pipe-&amp;gt;screen, 32, buffer_usage, size);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; -   if (!st_obj-&amp;gt;buffer) {
&lt;br&gt;&amp;gt; -      return GL_FALSE;
&lt;br&gt;&amp;gt; +      if (!st_obj-&amp;gt;buffer) {
&lt;br&gt;&amp;gt; +         return GL_FALSE;
&lt;br&gt;&amp;gt; +      }
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +      if (data)
&lt;br&gt;&amp;gt; +         st_no_flush_pipe_buffer_write(st_context(ctx), st_obj-&amp;gt;buffer, 0,
&lt;br&gt;&amp;gt; +                                      size, data);
&lt;br&gt;&amp;gt; +      return GL_TRUE;
&lt;br&gt;&amp;gt;    }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; -   if (data)
&lt;br&gt;&amp;gt; -      st_no_flush_pipe_buffer_write(st_context(ctx), st_obj-&amp;gt;buffer, 0,
&lt;br&gt;&amp;gt; -                                   size, data);
&lt;br&gt;&amp;gt;    return GL_TRUE;
&lt;br&gt;&amp;gt;  }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; 1.6.5.4
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26903628&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--gallium%3A-only-create-pipe-buffer-when-size-is-nonzero-tp26863285p26903628.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26903109</id>
	<title>[Bug 25778] radeon driver crashes kwin</title>
	<published>2009-12-23T06:48:24Z</published>
	<updated>2009-12-23T06:48:24Z</updated>
	<author>
		<name>Bugzilla from bugzilla-daemon@freedesktop.org</name>
	</author>
	<content type="html">&lt;a href=&quot;http://bugs.freedesktop.org/show_bug.cgi?id=25778&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugs.freedesktop.org/show_bug.cgi?id=25778&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;--- Comment #2 from karaluh &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26903109&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;karaluh@...&lt;/a&gt;&amp;gt; &amp;nbsp;2009-12-23 06:48:24 PST ---
&lt;br&gt;(In reply to comment #1)
&lt;br&gt;&amp;gt; This is probably not directly related to the X driver but most likely some
&lt;br&gt;&amp;gt; client-side library - see e.g.
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://cgit.freedesktop.org/xorg/lib/libXrandr/commit/?id=2e07e9d4f300e8153e4e93cd78bc51e0d91dba6f&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cgit.freedesktop.org/xorg/lib/libXrandr/commit/?id=2e07e9d4f300e8153e4e93cd78bc51e0d91dba6f&lt;/a&gt;&lt;br&gt;&amp;gt; for a fix for the same assertion failure triggered by a libXrandr bug.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Reassigning to Mesa for now, but it would be good to get a better backtrace.
&lt;br&gt;&amp;gt; Maybe also try running kwin in valgrind to see if that shows anything
&lt;br&gt;&amp;gt; interesting.
&lt;br&gt;&lt;br&gt;How can I obtain better backtrace? I also never used valgrind, how can I get
&lt;br&gt;the info you need?
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Configure bugmail: &lt;a href=&quot;http://bugs.freedesktop.org/userprefs.cgi?tab=email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugs.freedesktop.org/userprefs.cgi?tab=email&lt;/a&gt;&lt;br&gt;------- You are receiving this mail because: -------
&lt;br&gt;You are the assignee for the bug.
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26903109&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-Bug-25778--radeon-driver-crashes-kwin-tp26903109p26903109.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26902659</id>
	<title>[Bug 25778] radeon driver crashes kwin</title>
	<published>2009-12-23T06:07:53Z</published>
	<updated>2009-12-23T06:07:53Z</updated>
	<author>
		<name>Bugzilla from bugzilla-daemon@freedesktop.org</name>
	</author>
	<content type="html">&lt;a href=&quot;http://bugs.freedesktop.org/show_bug.cgi?id=25778&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugs.freedesktop.org/show_bug.cgi?id=25778&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Michel Dänzer &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26902659&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;michel@...&lt;/a&gt;&amp;gt; changed:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;What &amp;nbsp; &amp;nbsp;|Removed &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |Added
&lt;br&gt;----------------------------------------------------------------------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26902659&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;AssignedTo|xorg-driver-ati@...&lt;/a&gt; |mesa3d-
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26902659&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Component|Driver/Radeon &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |GLX
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Product|xorg &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|Mesa
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26902659&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;QAContact|xorg-team@...&lt;/a&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; |
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Version|7.4 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |unspecified
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;--- Comment #1 from Michel Dänzer &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26902659&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;michel@...&lt;/a&gt;&amp;gt; &amp;nbsp;2009-12-23 06:07:52 PST ---
&lt;br&gt;This is probably not directly related to the X driver but most likely some
&lt;br&gt;client-side library - see e.g.
&lt;br&gt;&lt;a href=&quot;http://cgit.freedesktop.org/xorg/lib/libXrandr/commit/?id=2e07e9d4f300e8153e4e93cd78bc51e0d91dba6f&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cgit.freedesktop.org/xorg/lib/libXrandr/commit/?id=2e07e9d4f300e8153e4e93cd78bc51e0d91dba6f&lt;/a&gt;&lt;br&gt;for a fix for the same assertion failure triggered by a libXrandr bug.
&lt;br&gt;&lt;br&gt;Reassigning to Mesa for now, but it would be good to get a better backtrace.
&lt;br&gt;Maybe also try running kwin in valgrind to see if that shows anything
&lt;br&gt;interesting.
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Configure bugmail: &lt;a href=&quot;http://bugs.freedesktop.org/userprefs.cgi?tab=email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugs.freedesktop.org/userprefs.cgi?tab=email&lt;/a&gt;&lt;br&gt;------- You are receiving this mail because: -------
&lt;br&gt;You are the assignee for the bug.
&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26902659&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-Bug-25778--radeon-driver-crashes-kwin-tp26902659p26902659.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26900554</id>
	<title>[Bug 25631] glNewList segfaults</title>
	<published>2009-12-23T02:49:03Z</published>
	<updated>2009-12-23T02:49:03Z</updated>
	<author>
		<name>Bugzilla from bugzilla-daemon@freedesktop.org</name>
	</author>
	<content type="html">&lt;a href=&quot;http://bugs.freedesktop.org/show_bug.cgi?id=25631&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugs.freedesktop.org/show_bug.cgi?id=25631&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;--- Comment #10 from aze489 &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26900554&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aze489@...&lt;/a&gt;&amp;gt; &amp;nbsp;2009-12-23 02:49:03 PST ---
&lt;br&gt;$ pacman -Ql | grep libdricore
&lt;br&gt;libgl /usr/lib/xorg/modules/dri/libdricore.so
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://www.archlinux.org/packages/extra/i686/libgl/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.archlinux.org/packages/extra/i686/libgl/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Configure bugmail: &lt;a href=&quot;http://bugs.freedesktop.org/userprefs.cgi?tab=email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugs.freedesktop.org/userprefs.cgi?tab=email&lt;/a&gt;&lt;br&gt;------- You are receiving this mail because: -------
&lt;br&gt;You are the assignee for the bug.
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26900554&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-Bug-25631--New%3A-glNewList-segfaults-tp26774037p26900554.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26900466</id>
	<title>[Bug 25631] glNewList segfaults</title>
	<published>2009-12-23T02:37:03Z</published>
	<updated>2009-12-23T02:37:03Z</updated>
	<author>
		<name>Bugzilla from bugzilla-daemon@freedesktop.org</name>
	</author>
	<content type="html">&lt;a href=&quot;http://bugs.freedesktop.org/show_bug.cgi?id=25631&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugs.freedesktop.org/show_bug.cgi?id=25631&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Chia-I Wu &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26900466&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;olvaffe@...&lt;/a&gt;&amp;gt; changed:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;What &amp;nbsp; &amp;nbsp;|Removed &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |Added
&lt;br&gt;----------------------------------------------------------------------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CC| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26900466&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;olvaffe@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;--- Comment #9 from Chia-I Wu &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26900466&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;olvaffe@...&lt;/a&gt;&amp;gt; &amp;nbsp;2009-12-23 02:37:02 PST ---
&lt;br&gt;Can you find out which package provides libdricore.so? &amp;nbsp;I don't have such file
&lt;br&gt;on my debian system.
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Configure bugmail: &lt;a href=&quot;http://bugs.freedesktop.org/userprefs.cgi?tab=email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugs.freedesktop.org/userprefs.cgi?tab=email&lt;/a&gt;&lt;br&gt;------- You are receiving this mail because: -------
&lt;br&gt;You are the assignee for the bug.
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26900466&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-Bug-25631--New%3A-glNewList-segfaults-tp26774037p26900466.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26900111</id>
	<title>[Bug 25631] glNewList segfaults</title>
	<published>2009-12-23T01:59:30Z</published>
	<updated>2009-12-23T01:59:30Z</updated>
	<author>
		<name>Bugzilla from bugzilla-daemon@freedesktop.org</name>
	</author>
	<content type="html">&lt;a href=&quot;http://bugs.freedesktop.org/show_bug.cgi?id=25631&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugs.freedesktop.org/show_bug.cgi?id=25631&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;--- Comment #8 from aze489 &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26900111&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aze489@...&lt;/a&gt;&amp;gt; &amp;nbsp;2009-12-23 01:59:29 PST ---
&lt;br&gt;I have the same problem. I'm also using Arch Linux but with a Radeon R300 card.
&lt;br&gt;My computer was up for 2 weeks when new versions of ati-dri(7.6.1-1),
&lt;br&gt;libgl(7.6.1-1), libdrm(2.4.17-2), mesa(7.6.1-1), xf86-video-ati(6.12.4-2) where
&lt;br&gt;uploaded in the repositories, so i installed them and rebooted but i noticed
&lt;br&gt;significant performance loss in every &amp;quot;graphic&amp;quot; applications.
&lt;br&gt;I could not play flash video in fullscreen. An emulator that was running
&lt;br&gt;perfectly before was now running at 1.5fps. Glxgears was having poor results
&lt;br&gt;and eating 50% of my CPU.
&lt;br&gt;So i decided to downgrade all those packages (i'm now using ati-dri(7.6-2),
&lt;br&gt;libgl(7.6-2), libdrm(2.4.16-1), mesa(7.6-2),
&lt;br&gt;xf86-video-ati(6.12.99.git20091014-1)), &amp;nbsp;and now, i can play flash videos again
&lt;br&gt;but everytime i try to launch an OpenGL application (glxgears, the emulator, or
&lt;br&gt;any other app, including Michael Ivko's example) the application segfault
&lt;br&gt;instantly with the same error.
&lt;br&gt;&lt;br&gt;$ glxgears
&lt;br&gt;Segmentation Fault (core dumped)
&lt;br&gt;$ gdb glxgears glxgears.core 
&lt;br&gt;(...)
&lt;br&gt;Core was generated by `glxgears'.
&lt;br&gt;Program terminated with signal 11, Segmentation fault.
&lt;br&gt;#0 &amp;nbsp;0xb72bc084 in vbo_VertexAttrib4fvARB () from
&lt;br&gt;/usr/lib/xorg/modules/dri/libdricore.so
&lt;br&gt;(gdb) bt full
&lt;br&gt;#0 &amp;nbsp;0xb72bc084 in vbo_VertexAttrib4fvARB () from
&lt;br&gt;/usr/lib/xorg/modules/dri/libdricore.so
&lt;br&gt;No symbol table info available.
&lt;br&gt;#1 &amp;nbsp;0xb72ae8d1 in neutral_VertexAttrib4fvARB () from
&lt;br&gt;/usr/lib/xorg/modules/dri/libdricore.so
&lt;br&gt;No symbol table info available.
&lt;br&gt;#2 &amp;nbsp;0x0804a275 in ?? ()
&lt;br&gt;No symbol table info available.
&lt;br&gt;#3 &amp;nbsp;0x00000001 in ?? ()
&lt;br&gt;No symbol table info available.
&lt;br&gt;#4 &amp;nbsp;0x00001300 in ?? ()
&lt;br&gt;No symbol table info available.
&lt;br&gt;#5 &amp;nbsp;0x0804b220 in ?? ()
&lt;br&gt;No symbol table info available.
&lt;br&gt;#6 &amp;nbsp;0xbf9aeefc in ?? ()
&lt;br&gt;No symbol table info available.
&lt;br&gt;#7 &amp;nbsp;0xbf9aeef8 in ?? ()
&lt;br&gt;No symbol table info available.
&lt;br&gt;#8 &amp;nbsp;0x00000000 in ?? ()
&lt;br&gt;No symbol table info available.
&lt;br&gt;&lt;br&gt;However, when i launch the same applications as root, they work perfectly.
&lt;br&gt;I am not sure if this is a really a Mesa-related bug... I posted a message on
&lt;br&gt;the official archlinux forum, but so far, no one answered me.
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Configure bugmail: &lt;a href=&quot;http://bugs.freedesktop.org/userprefs.cgi?tab=email&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugs.freedesktop.org/userprefs.cgi?tab=email&lt;/a&gt;&lt;br&gt;------- You are receiving this mail because: -------
&lt;br&gt;You are the assignee for the bug.
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26900111&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-Bug-25631--New%3A-glNewList-segfaults-tp26774037p26900111.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26901330</id>
	<title>[PATCH] [i965] Rename {pf -&gt; util}_format_is_depth_or_stencil()</title>
	<published>2009-12-22T23:30:40Z</published>
	<updated>2009-12-22T23:30:40Z</updated>
	<author>
		<name>Tomas Carnecky</name>
	</author>
	<content type="html">The function was moved and renamed in 0bed834b.
&lt;br&gt;&lt;br&gt;Signed-off-by: Tomas Carnecky &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26901330&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tom@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;src/gallium/drivers/i965/brw_wm_sampler_state.c | &amp;nbsp; &amp;nbsp;3 ++-
&lt;br&gt;&amp;nbsp;1 files changed, 2 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/src/gallium/drivers/i965/brw_wm_sampler_state.c b/src/gallium/drivers/i965/brw_wm_sampler_state.c
&lt;br&gt;index 4e99ac7..a8bc31c 100644
&lt;br&gt;--- a/src/gallium/drivers/i965/brw_wm_sampler_state.c
&lt;br&gt;+++ b/src/gallium/drivers/i965/brw_wm_sampler_state.c
&lt;br&gt;@@ -30,6 +30,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp;#include &amp;quot;util/u_math.h&amp;quot;
&lt;br&gt;+#include &amp;quot;util/u_format.h&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#include &amp;quot;brw_context.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;brw_state.h&amp;quot;
&lt;br&gt;@@ -130,7 +131,7 @@ brw_wm_sampler_update_default_colors(struct brw_context *brw)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const struct brw_sampler *sampler = brw-&amp;gt;curr.sampler[i];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const float *bc;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;if (pf_is_depth_or_stencil(tex-&amp;gt;base.format)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (util_format_is_depth_or_stencil(tex-&amp;gt;base.format)) {
&lt;br&gt;&amp;nbsp;	 float bordercolor[4] = {
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp;sampler-&amp;gt;border_color[0],
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp;sampler-&amp;gt;border_color[0],
&lt;br&gt;-- 
&lt;br&gt;1.6.6.rc4
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26901330&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH---i965--Rename-%7Bpf--%3E-util%7D_format_is_depth_or_stencil%28%29-tp26901330p26901330.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26898672</id>
	<title>Re: [PATCH] Disable EGL if building static libraries.</title>
	<published>2009-12-22T22:47:51Z</published>
	<updated>2009-12-22T22:47:51Z</updated>
	<author>
		<name>Dan Nicholson-2</name>
	</author>
	<content type="html">On Tue, Dec 22, 2009 at 6:56 PM, Chia-I Wu &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26898672&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;olvaffe@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Mon, Dec 21, 2009 at 6:09 AM, Matthew W. S. Bell
&lt;br&gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26898672&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;matthew@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt; On Sat, 2009-12-19 at 12:09 -0800, Dan Nicholson wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; This seems fine (except for the gratuitous newline introduced), but I
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; think someone submitted a patch the other day that makes the egl build
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; work static. Can you show where the build fails without this patch?
&lt;br&gt;&amp;gt;&amp;gt; It fails when it tries to build libEGL.so for target library in
&lt;br&gt;&amp;gt;&amp;gt; src/egl/main/Makefile with static (non-PIC) code. Can you find the patch
&lt;br&gt;&amp;gt;&amp;gt; so I can see if it fixes the problem?
&lt;br&gt;&amp;gt; I don't recall such patch.  Does the attached one help?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; It cleans up the build rule a little and should fix the issue.
&lt;/div&gt;&lt;br&gt;I didn't test, but that looks good. I trust you know more about the
&lt;br&gt;library dependencies than anyone at this point. :)
&lt;br&gt;&lt;br&gt;Reviewed-by: Dan Nicholson &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26898672&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dbn.lists@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26898672&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--Disable-EGL-if-building-static-libraries.-tp26857520p26898672.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26897413</id>
	<title>Re: [PATCH] Disable EGL if building static libraries.</title>
	<published>2009-12-22T18:56:35Z</published>
	<updated>2009-12-22T18:56:35Z</updated>
	<author>
		<name>Chia-I Wu-2</name>
	</author>
	<content type="html">On Mon, Dec 21, 2009 at 6:09 AM, Matthew W. S. Bell
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26897413&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;matthew@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; On Sat, 2009-12-19 at 12:09 -0800, Dan Nicholson wrote:
&lt;br&gt;&amp;gt;&amp;gt; This seems fine (except for the gratuitous newline introduced), but I
&lt;br&gt;&amp;gt;&amp;gt; think someone submitted a patch the other day that makes the egl build
&lt;br&gt;&amp;gt;&amp;gt; work static. Can you show where the build fails without this patch?
&lt;br&gt;&amp;gt; It fails when it tries to build libEGL.so for target library in
&lt;br&gt;&amp;gt; src/egl/main/Makefile with static (non-PIC) code. Can you find the patch
&lt;br&gt;&amp;gt; so I can see if it fixes the problem?
&lt;br&gt;I don't recall such patch. &amp;nbsp;Does the attached one help?
&lt;br&gt;&lt;br&gt;It cleans up the build rule a little and should fix the issue.
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[0001-egl-Clean-up-the-Makefile-rules.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;From d1764079ee22f9a374aff329b38d4ed94af366cf Mon Sep 17 00:00:00 2001
&lt;br&gt;From: Chia-I Wu &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26897413&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;olvaffe@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: Mon, 21 Dec 2009 11:13:18 +0800
&lt;br&gt;Subject: [PATCH] egl: Clean up the Makefile rules.
&lt;br&gt;&lt;br&gt;This allows libEGL to be built as a static library and removes libX11
&lt;br&gt;from the dependencies.
&lt;br&gt;&lt;br&gt;Signed-off-by: Chia-I Wu &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26897413&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;olvaffe@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;configs/autoconf.in &amp;nbsp; | &amp;nbsp; &amp;nbsp;3 +++
&lt;br&gt;&amp;nbsp;configs/default &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;5 ++++-
&lt;br&gt;&amp;nbsp;configure.ac &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 18 ++++++++++--------
&lt;br&gt;&amp;nbsp;src/egl/main/Makefile | &amp;nbsp; 25 ++++++++++++++-----------
&lt;br&gt;&amp;nbsp;4 files changed, 31 insertions(+), 20 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/configs/autoconf.in b/configs/autoconf.in
&lt;br&gt;index a7f3c9d..66dede4 100644
&lt;br&gt;--- a/configs/autoconf.in
&lt;br&gt;+++ b/configs/autoconf.in
&lt;br&gt;@@ -52,6 +52,7 @@ GLU_LIB_NAME = @GLU_LIB_NAME@
&lt;br&gt;&amp;nbsp;GLUT_LIB_NAME = @GLUT_LIB_NAME@
&lt;br&gt;&amp;nbsp;GLW_LIB_NAME = @GLW_LIB_NAME@
&lt;br&gt;&amp;nbsp;OSMESA_LIB_NAME = @OSMESA_LIB_NAME@
&lt;br&gt;+EGL_LIB_NAME = @EGL_LIB_NAME@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;# Globs used to install the lib and all symlinks
&lt;br&gt;&amp;nbsp;GL_LIB_GLOB = @GL_LIB_GLOB@
&lt;br&gt;@@ -59,12 +60,14 @@ GLU_LIB_GLOB = @GLU_LIB_GLOB@
&lt;br&gt;&amp;nbsp;GLUT_LIB_GLOB = @GLUT_LIB_GLOB@
&lt;br&gt;&amp;nbsp;GLW_LIB_GLOB = @GLW_LIB_GLOB@
&lt;br&gt;&amp;nbsp;OSMESA_LIB_GLOB = @OSMESA_LIB_GLOB@
&lt;br&gt;+EGL_LIB_GLOB = @EGL_LIB_GLOB@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;# Directories to build
&lt;br&gt;&amp;nbsp;LIB_DIR = @LIB_DIR@
&lt;br&gt;&amp;nbsp;SRC_DIRS = @SRC_DIRS@
&lt;br&gt;&amp;nbsp;GLU_DIRS = @GLU_DIRS@
&lt;br&gt;&amp;nbsp;DRIVER_DIRS = @DRIVER_DIRS@
&lt;br&gt;+EGL_DRIVERS_DIRS = @EGL_DRIVERS_DIRS@
&lt;br&gt;&amp;nbsp;GALLIUM_DIRS = @GALLIUM_DIRS@
&lt;br&gt;&amp;nbsp;GALLIUM_AUXILIARY_DIRS = @GALLIUM_AUXILIARY_DIRS@
&lt;br&gt;&amp;nbsp;GALLIUM_DRIVERS_DIRS = @GALLIUM_DRIVERS_DIRS@
&lt;br&gt;diff --git a/configs/default b/configs/default
&lt;br&gt;index eb6123d..b7e511e 100644
&lt;br&gt;--- a/configs/default
&lt;br&gt;+++ b/configs/default
&lt;br&gt;@@ -55,6 +55,7 @@ GLUT_LIB = glut
&lt;br&gt;&amp;nbsp;GLEW_LIB = GLEW
&lt;br&gt;&amp;nbsp;GLW_LIB = GLw
&lt;br&gt;&amp;nbsp;OSMESA_LIB = OSMesa
&lt;br&gt;+EGL_LIB = EGL
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;# Library names (actual file names)
&lt;br&gt;@@ -64,6 +65,7 @@ GLUT_LIB_NAME = lib$(GLUT_LIB).so
&lt;br&gt;&amp;nbsp;GLEW_LIB_NAME = lib$(GLEW_LIB).a
&lt;br&gt;&amp;nbsp;GLW_LIB_NAME = lib$(GLW_LIB).so
&lt;br&gt;&amp;nbsp;OSMESA_LIB_NAME = lib$(OSMESA_LIB).so
&lt;br&gt;+EGL_LIB_NAME = lib$(EGL_LIB).so
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;# globs used to install the lib and all symlinks
&lt;br&gt;&amp;nbsp;GL_LIB_GLOB = $(GL_LIB_NAME)*
&lt;br&gt;@@ -71,6 +73,7 @@ GLU_LIB_GLOB = $(GLU_LIB_NAME)*
&lt;br&gt;&amp;nbsp;GLUT_LIB_GLOB = $(GLUT_LIB_NAME)*
&lt;br&gt;&amp;nbsp;GLW_LIB_GLOB = $(GLW_LIB_NAME)*
&lt;br&gt;&amp;nbsp;OSMESA_LIB_GLOB = $(OSMESA_LIB_NAME)*
&lt;br&gt;+EGL_LIB_GLOB = $(EGL_LIB_NAME)*
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;# Optional assembly language optimization files for libGL
&lt;br&gt;&amp;nbsp;MESA_ASM_SOURCES = 
&lt;br&gt;@@ -89,7 +92,7 @@ DRIVER_DIRS = x11 osmesa
&lt;br&gt;&amp;nbsp;# Which subdirs under $(TOP)/progs/ to enter:
&lt;br&gt;&amp;nbsp;PROGRAM_DIRS = demos redbook samples glsl objviewer xdemos
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-# EGL directories
&lt;br&gt;+# EGL drivers to build
&lt;br&gt;&amp;nbsp;EGL_DRIVERS_DIRS = demo
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;# Gallium directories and 
&lt;br&gt;diff --git a/configure.ac b/configure.ac
&lt;br&gt;index 6fa0a60..9ad1d60 100644
&lt;br&gt;--- a/configure.ac
&lt;br&gt;+++ b/configure.ac
&lt;br&gt;@@ -242,24 +242,28 @@ GLU_LIB_NAME='lib$(GLU_LIB).'${LIB_EXTENSION}
&lt;br&gt;&amp;nbsp;GLUT_LIB_NAME='lib$(GLUT_LIB).'${LIB_EXTENSION}
&lt;br&gt;&amp;nbsp;GLW_LIB_NAME='lib$(GLW_LIB).'${LIB_EXTENSION}
&lt;br&gt;&amp;nbsp;OSMESA_LIB_NAME='lib$(OSMESA_LIB).'${LIB_EXTENSION}
&lt;br&gt;+EGL_LIB_NAME='lib$(EGL_LIB).'${LIB_EXTENSION}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;GL_LIB_GLOB='lib$(GL_LIB).*'${LIB_EXTENSION}'*'
&lt;br&gt;&amp;nbsp;GLU_LIB_GLOB='lib$(GLU_LIB).*'${LIB_EXTENSION}'*'
&lt;br&gt;&amp;nbsp;GLUT_LIB_GLOB='lib$(GLUT_LIB).*'${LIB_EXTENSION}'*'
&lt;br&gt;&amp;nbsp;GLW_LIB_GLOB='lib$(GLW_LIB).*'${LIB_EXTENSION}'*'
&lt;br&gt;&amp;nbsp;OSMESA_LIB_GLOB='lib$(OSMESA_LIB).*'${LIB_EXTENSION}'*'
&lt;br&gt;+EGL_LIB_GLOB='lib$(EGL_LIB).*'${LIB_EXTENSION}'*'
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;AC_SUBST([GL_LIB_NAME])
&lt;br&gt;&amp;nbsp;AC_SUBST([GLU_LIB_NAME])
&lt;br&gt;&amp;nbsp;AC_SUBST([GLUT_LIB_NAME])
&lt;br&gt;&amp;nbsp;AC_SUBST([GLW_LIB_NAME])
&lt;br&gt;&amp;nbsp;AC_SUBST([OSMESA_LIB_NAME])
&lt;br&gt;+AC_SUBST([EGL_LIB_NAME])
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;AC_SUBST([GL_LIB_GLOB])
&lt;br&gt;&amp;nbsp;AC_SUBST([GLU_LIB_GLOB])
&lt;br&gt;&amp;nbsp;AC_SUBST([GLUT_LIB_GLOB])
&lt;br&gt;&amp;nbsp;AC_SUBST([GLW_LIB_GLOB])
&lt;br&gt;&amp;nbsp;AC_SUBST([OSMESA_LIB_GLOB])
&lt;br&gt;+AC_SUBST([EGL_LIB_GLOB])
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;dnl
&lt;br&gt;&amp;nbsp;dnl Arch/platform-specific settings
&lt;br&gt;@@ -887,17 +891,15 @@ AC_ARG_ENABLE([egl],
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[enable_egl=yes])
&lt;br&gt;&amp;nbsp;if test &amp;quot;x$enable_egl&amp;quot; = xyes; then
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;SRC_DIRS=&amp;quot;$SRC_DIRS egl&amp;quot;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if test &amp;quot;$x11_pkgconfig&amp;quot; = yes; then
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PKG_CHECK_MODULES([EGL], [x11])
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;EGL_LIB_DEPS=&amp;quot;$EGL_LIBS&amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# should check these...
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;EGL_LIB_DEPS=&amp;quot;$X_LIBS -lX11&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;EGL_LIB_DEPS=&amp;quot;$DLOPEN_LIBS -lpthread&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;EGL_DRIVERS_DIRS=&amp;quot;&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if test &amp;quot;$enable_static&amp;quot; != yes &amp;&amp; test &amp;quot;$mesa_driver&amp;quot; != osmesa; then
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# build egl_glx when libGL is built
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;EGL_DRIVERS_DIRS=&amp;quot;glx&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fi
&lt;br&gt;- &amp;nbsp; &amp;nbsp;EGL_LIB_DEPS=&amp;quot;$EGL_LIB_DEPS $DLOPEN_LIBS&amp;quot;
&lt;br&gt;&amp;nbsp;fi
&lt;br&gt;&amp;nbsp;AC_SUBST([EGL_LIB_DEPS])
&lt;br&gt;+AC_SUBST([EGL_DRIVERS_DIRS])
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;dnl
&lt;br&gt;&amp;nbsp;dnl GLU configuration
&lt;br&gt;diff --git a/src/egl/main/Makefile b/src/egl/main/Makefile
&lt;br&gt;index c951b07..ec326a8 100644
&lt;br&gt;--- a/src/egl/main/Makefile
&lt;br&gt;+++ b/src/egl/main/Makefile
&lt;br&gt;@@ -4,7 +4,10 @@ TOP = ../../..
&lt;br&gt;&amp;nbsp;include $(TOP)/configs/current
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-INCLUDE_DIRS = -I$(TOP)/include -I$(TOP)/src/mesa/glapi $(X11_INCLUDES)
&lt;br&gt;+EGL_MAJOR = 1
&lt;br&gt;+EGL_MINOR = 0
&lt;br&gt;+
&lt;br&gt;+INCLUDE_DIRS = -I$(TOP)/include
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;HEADERS = \
&lt;br&gt;&amp;nbsp;	eglcompiler.h \
&lt;br&gt;@@ -43,7 +46,7 @@ SOURCES = \
&lt;br&gt;&amp;nbsp;OBJECTS = $(SOURCES:.c=.o)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-# Undefined for now
&lt;br&gt;+# use dl*() to load drivers
&lt;br&gt;&amp;nbsp;LOCAL_CFLAGS = -D_EGL_PLATFORM_X=1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -56,21 +59,21 @@ default: depend library
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;# EGL Library
&lt;br&gt;-library: $(TOP)/$(LIB_DIR)/libEGL.so
&lt;br&gt;+library: $(TOP)/$(LIB_DIR)/$(EGL_LIB_NAME)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-$(TOP)/$(LIB_DIR)/libEGL.so: $(OBJECTS)
&lt;br&gt;-	$(MKLIB) -o EGL -linker '$(CC)' -ldflags '$(LDFLAGS)' \
&lt;br&gt;-		-major 1 -minor 0 \
&lt;br&gt;-		-install $(TOP)/$(LIB_DIR) \
&lt;br&gt;+$(TOP)/$(LIB_DIR)/$(EGL_LIB_NAME): $(OBJECTS)
&lt;br&gt;+	$(MKLIB) -o $(EGL_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
&lt;br&gt;+		-major $(EGL_MAJOR) -minor $(EGL_MINOR) \
&lt;br&gt;+		-install $(TOP)/$(LIB_DIR) $(MKLIB_OPTIONS) \
&lt;br&gt;&amp;nbsp;		$(EGL_LIB_DEPS) $(OBJECTS)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;install: default
&lt;br&gt;&amp;nbsp;	$(INSTALL) -d $(DESTDIR)$(INSTALL_LIB_DIR)
&lt;br&gt;-	$(MINSTALL) $(TOP)/$(LIB_DIR)/libEGL.so* $(DESTDIR)$(INSTALL_LIB_DIR)
&lt;br&gt;+	$(MINSTALL) $(TOP)/$(LIB_DIR)/$(EGL_LIB_GLOB) \
&lt;br&gt;+		$(DESTDIR)$(INSTALL_LIB_DIR)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;clean:
&lt;br&gt;-	-rm -f *.o *.so*
&lt;br&gt;-	-rm -f core.*
&lt;br&gt;+	-rm -f *.o
&lt;br&gt;&amp;nbsp;	-rm -f depend depend.bak
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -82,5 +85,5 @@ depend: $(SOURCES) $(HEADERS)
&lt;br&gt;&amp;nbsp;		$(SOURCES) $(HEADERS) &amp;gt; /dev/null 2&amp;gt;/dev/null
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-include depend
&lt;br&gt;+-include depend
&lt;br&gt;&amp;nbsp;# DO NOT DELETE
&lt;br&gt;-- 
&lt;br&gt;1.6.5
&lt;br&gt;&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;&lt;br /&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26897413&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--Disable-EGL-if-building-static-libraries.-tp26857520p26897413.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26897157</id>
	<title>Re: Yet more r300g fear and loathing...</title>
	<published>2009-12-22T18:12:01Z</published>
	<updated>2009-12-22T18:12:01Z</updated>
	<author>
		<name>Marek Olšák</name>
	</author>
	<content type="html">I am not very fond of the idea having another layer of function-call indirections and state management between a driver and a state tracker. I kinda succeed in making the failover driver work with some hacks and limitations (e.g. no textures). Even if I use it as a simple pass-through driver, it results in 40% performance drop in glxgears and 10% performance drop in progs/perf/draw_overhead. The driver overhead is a real issue here and it might be much higher with a full-blown fallback driver, and nobody wants the performance to suck so much. Also I&amp;#39;d like the applications which don&amp;#39;t hit any fallback path to not be affected by this additional overhead, so putting a fallback driver on top of a real driver should be deferred if possible which makes this whole thing non-trivial.&lt;br&gt;
&lt;br&gt;In the meantime I think we could lie that NPOTs are supported and implement only the functionality state trackers really want (2D textures with the repeat wrap mode and bilinear filtering done in the shader [0]). That would make all state trackers happy except the Mesa one, but doing software fallback instead would not make it happy either. We&amp;#39;re talking about turning unavailable features to unusable ones, is it worth it?&lt;br&gt;
&lt;br&gt;[0] I think I could do it if someone tells me how to easily replace TEX instructions with my own code in TGSI.&lt;br&gt;&lt;br&gt;Marek&lt;br&gt;&lt;br&gt;&lt;div class=&quot;gmail_quote&quot;&gt;On Mon, Dec 21, 2009 at 6:57 PM, Jakob Bornecrantz &lt;span dir=&quot;ltr&quot;&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26897157&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jakob@...&lt;/a&gt;&amp;gt;&lt;/span&gt; wrote:&lt;br&gt;
&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;&quot;&gt;To be honest I&amp;#39;m way more in favor off doing 4 and/or with a env&lt;br&gt;
variable to switch between incorrect rendering and software fallbacks,&lt;br&gt;
but maybe we can do 3 but with another solution.&lt;br&gt;
&lt;br&gt;
At some point the Gallium interface was a expression of what hardware&lt;br&gt;
could do not a interface to program against. Another guiding rule was&lt;br&gt;
that it should be easy to write a pipe driver, putting all the hard&lt;br&gt;
stuff in the state tracker.&lt;br&gt;
&lt;br&gt;
Now we are starting to see a lot of state trackers and its becoming&lt;br&gt;
harder and harder to implement all the work around for the different&lt;br&gt;
caps. Even tho the fallback/workaround code is in a module that can be&lt;br&gt;
shared its still a pain to integrate and a lot of boiler plate code&lt;br&gt;
needs to be written and maintained.&lt;br&gt;
&lt;br&gt;
Maybe we should revive the fallback module or make a another module&lt;br&gt;
like it that takes care of all these shortcomings of the hardware. But&lt;br&gt;
it is optional to the state tracker. That it is optional to the state&lt;br&gt;
tracker is the big thing.&lt;br&gt;
&lt;br&gt;
So an usecase:&lt;br&gt;
The mesa state tracker takes a look at the pipe caps of the r300&lt;br&gt;
driver and notices something bad no CAP_NPOT but CAP_TEXRECT. It then&lt;br&gt;
wraps the pipe driver with the fallback pipe driver and uses that. And&lt;br&gt;
all the NPOT badness is hidden from the state tracker.&lt;br&gt;
&lt;br&gt;
The code to switch between software and and hardwware rendering only&lt;br&gt;
needs to be written once this includes the code to detect IF we should&lt;br&gt;
switch to software and code to select between different modes of&lt;br&gt;
handling of different type of errors, like FALLBACK_CONFORM,&lt;br&gt;
FALLBACK_BAD_RENDERING.&lt;br&gt;
&lt;br&gt;
The good part with this is that the fallback module is optional and&lt;br&gt;
for state trackers that can handle some of the possible shortcomings&lt;br&gt;
or doesn&amp;#39;t need all of the functionality don&amp;#39;t need to wrap the pipe&lt;br&gt;
driver.&lt;br&gt;
&lt;br&gt;
We get clean drivers, clean state tracker but a heap of code in the&lt;br&gt;
fallback module...&lt;br&gt;
&lt;br&gt;
I could also see the blitter module getting sucked into the fallback&lt;br&gt;
module.&lt;br&gt;
&lt;br&gt;
Comments please?&lt;br&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div class=&quot;h5&quot;&gt;&lt;br&gt;
&lt;/div&gt;&lt;/div&gt;Cheers Jakob.&lt;br&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div class=&quot;h5&quot;&gt;&lt;br&gt;
------------------------------------------------------------------------------&lt;br&gt;
This SF.Net email is sponsored by the Verizon Developer Community&lt;br&gt;
Take advantage of Verizon&amp;#39;s best-in-class app development support&lt;br&gt;
A streamlined, 14 day to market process makes app distribution fast and easy&lt;br&gt;
Join now and get one step closer to millions of Verizon customers&lt;br&gt;
&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&lt;br&gt;
_______________________________________________&lt;br&gt;
Mesa3d-dev mailing list&lt;br&gt;
&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26897157&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br&gt;
&lt;br /&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;&lt;br /&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26897157&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Yet-more-r300g-fear-and-loathing...-tp26870930p26897157.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26896578</id>
	<title>Re: [PATCH] Stop make entering/leaving directory messages ending up in mesa_version when autoconf is called from a makefile.</title>
	<published>2009-12-22T16:47:21Z</published>
	<updated>2009-12-22T16:47:21Z</updated>
	<author>
		<name>Dan Nicholson-2</name>
	</author>
	<content type="html">On Tue, Dec 22, 2009 at 2:30 PM, Matthew W. S. Bell
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26896578&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;matthew@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; From 5f74bd9753a126808a149145548e09beea93bc49 Mon Sep 17 00:00:00 2001
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Stops the following autoconf situation when it is called from within a
&lt;br&gt;&amp;gt; makefile, such as when packaging for distribution.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; PACKAGE_VERSION='make2: Entering directory `/home/mentor/src/mesa'7.8.0make2: Leaving directory `/home/mentor/src/mesa''
&lt;br&gt;&amp;gt; PACKAGE_STRING='Mesa make2: Entering directory `/home/mentor/src/mesa'7.8.0make2: Leaving directory `/home/mentor/src/mesa''
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---
&lt;br&gt;&amp;gt;  configure.ac |    2 +-
&lt;br&gt;&amp;gt;  1 files changed, 1 insertions(+), 1 deletions(-)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; diff --git a/configure.ac b/configure.ac
&lt;br&gt;&amp;gt; index 743196a..5064b63 100644
&lt;br&gt;&amp;gt; --- a/configure.ac
&lt;br&gt;&amp;gt; +++ b/configure.ac
&lt;br&gt;&amp;gt; @@ -4,7 +4,7 @@ AC_PREREQ([2.59])
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;  dnl Versioning - scrape the version from configs/default
&lt;br&gt;&amp;gt;  m4_define([mesa_version],
&lt;br&gt;&amp;gt; -    [m4_esyscmd([${MAKE-make} -s -f bin/version.mk version | tr -d '\n'])])
&lt;br&gt;&amp;gt; +    [m4_esyscmd([${MAKE-make} -s --no-print-directory -f bin/version.mk version | tr -d '\n'])])
&lt;br&gt;&amp;gt;  m4_ifval(mesa_version,,
&lt;br&gt;&amp;gt;     [m4_fatal([Failed to get the Mesa version from `make -f bin/version.mk version`])])
&lt;/div&gt;&lt;br&gt;Weird.
&lt;br&gt;&lt;br&gt;Signed-off-by: Dan Nicholson &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26896578&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dbn.lists@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;This SF.Net email is sponsored by the Verizon Developer Community
&lt;br&gt;Take advantage of Verizon's best-in-class app development support
&lt;br&gt;A streamlined, 14 day to market process makes app distribution fast and easy
&lt;br&gt;Join now and get one step closer to millions of Verizon customers
&lt;br&gt;&lt;a href=&quot;http://p.sf.net/sfu/verizon-dev2dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://p.sf.net/sfu/verizon-dev2dev&lt;/a&gt;&amp;nbsp;
&lt;br&gt;_______________________________________________
&lt;br&gt;Mesa3d-dev mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26896578&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Mesa3d-dev@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://lists.sourceforge.net/lists/listinfo/mesa3d-dev&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/mesa3d-dev-f3715.html&quot; embed=&quot;fixTarget[3715]&quot; target=&quot;_top&quot; &gt;mesa3d-dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--Stop-make-entering-leaving-directory-messages-ending-up-in-mesa_version-when-autoconf-is-called-from-a-makefile.-tp26895341p26896578.html" />
</entry>

</feed>
