I feel like there is some kind of underlying lesson that we, OpenGL app programmers, should be getting out of this...<br><br><div>What about a psuedo-database of app -&gt; extension list rather than by year? Surely Quake3 doesn&#39;t make use of but &lt;= 10 extensions. I&#39;d imagine the same holds true for other old games as well. A simple &quot;strings&quot; on their binary could figure that out...<br>
<div><br><div class="gmail_quote">On Fri, Mar 11, 2011 at 2:14 PM, Kenneth Graunke <span dir="ltr">&lt;<a href="mailto:kenneth@whitecape.org">kenneth@whitecape.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div><div></div><div class="h5">On Friday, March 11, 2011 10:46:31 AM Josť Fonseca wrote:<br>
&gt; On Fri, 2011-03-11 at 09:04 -0800, Eric Anholt wrote:<br>
&gt; &gt; On Fri, 11 Mar 2011 10:33:13 +0000, Josť Fonseca &lt;<a href="mailto:jfonseca@vmware.com">jfonseca@vmware.com</a>&gt;<br>
wrote:<br>
&gt; &gt; &gt; The problem from<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; <a href="http://www.mail-archive.com/mesa3d-dev@lists.sourceforge.net/msg12493.h" target="_blank">http://www.mail-archive.com/mesa3d-dev@lists.sourceforge.net/msg12493.h</a><br>
&gt; &gt; &gt; tml<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; is back, and now a bit worse -- it causes Quake3 arena demo to crash<br>
&gt; &gt; &gt; (at least the windows version). The full version works fine. I&#39;m not<br>
&gt; &gt; &gt; sure what other applications are hit by this. See the above thread for<br>
&gt; &gt; &gt; more background.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; There are two major approaches:<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; 1) sort extensions chronologically instead of alphabetically. See<br>
&gt; &gt; &gt; attached patch for that<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; † - for those who prefer to see extensions sorted alphabetically in<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; glxinfo, we could modify glxinfo to sort then before displaying<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; 2) detect broken applications (i.e., by process name), and only sort<br>
&gt; &gt; &gt; extensions strings chronologically then<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Personally I think that varying behavior based on process name is a<br>
&gt; &gt; &gt; ugly and brittle hack, so I&#39;d prefer 1), but I just want to put this<br>
&gt; &gt; &gt; on my back above all, so whatever works is also fine by me.<br>
&gt; &gt;<br>
&gt; &gt; If this is just a hack for one broken application, and we think that<br>
&gt; &gt; building in a workaround for this particular broken application is<br>
&gt; &gt; important (I don&#39;t), I still prefer an obvious hack for that broken<br>
&gt; &gt; application like feeding it a tiny extension string that it cares about,<br>
&gt; &gt; instead of reordering the extension list.<br>
&gt;<br>
&gt; There are many versions of Quake3 out there, some fixed, others not, and<br>
&gt; others enhanced. This means a tiny string would prevent any Quake3<br>
&gt; application from finding newer extensions. So I think that if we go for<br>
&gt; the application name detection then we should present the whole<br>
&gt; extension string sorted chronologically, instead of giving a tiny<br>
&gt; string.<br>
&gt;<br>
&gt; Jose<br>
<br>
</div></div>I agree with Josť - it&#39;s not one broken application, it&#39;s a number of old,<br>
sometimes closed-source games that we can&#39;t change.<br>
<br>
I&#39;m not sure how changing the sorting solves the problem, anyway - the amount<br>
of data returned would still overflow the buffer, possibly wreaking havoc. †I&#39;d<br>
rather avoid that.<br>
<br>
Ian and I talked about this a year ago, and the solution I believe we came up<br>
with was to use a driconf option or environment variable:<br>
<br>
If MESA_MAX_EXTENSION_YEAR=2006, then glGetString would only return extensions<br>
created in 2006 or earlier. †The rationale is that if a game came out in 2006,<br>
it won&#39;t know about any extensions from 2007 anyway, so advertising them is<br>
useless. †The fixed-size buffer is also almost certainly large enough to handle<br>
this cut-down list of extensions.<br>
<br>
This should be trivial to do now that you already have the years for each<br>
extension...just store them in the table, rather than in comments, and check<br>
before listing an extension.<br>
<br>
A driconf option is nice because it allows this to be overridden in .drirc on<br>
a per-app basis, rather than having to set an environment variable. †It might<br>
be a bit more work though.<br>
<font color="#888888"><br>
--Kenneth<br>
</font><div><div></div><div class="h5">_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</div></div></blockquote></div><br></div></div>