On Wed, Feb 29, 2012 at 7:48 PM, Brian Paul <span dir="ltr">&lt;<a href="mailto:brian.e.paul@gmail.com">brian.e.paul@gmail.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="HOEnZb"><div class="h5">On Wed, Feb 29, 2012 at 6:44 PM, Anuj Phogat &lt;<a href="mailto:anuj.phogat@gmail.com">anuj.phogat@gmail.com</a>&gt; wrote:<br>
&gt; Intel and Gallium drivers don&#39;t support texture borders. Border is stripped<br>
&gt; before texture is used inside the driver. So, glGetTexLevelParameteriv()<br>
&gt; returns the stripped values of texture dimensions. But it returns un-<br>
&gt; stripped values for proxy textures. This patch adds strip_texture_border()<br>
&gt; for proxy textures as well.<br>
&gt;<br>
&gt; Signed-off-by: Anuj Phogat &lt;<a href="mailto:anuj.phogat@gmail.com">anuj.phogat@gmail.com</a>&gt;<br>
&gt; ---<br>
&gt; A piglit test case for this patch will be posted on piglit mailing list<br>
&gt; for review.<br>
&gt;<br>
&gt;  src/mesa/main/teximage.c |    9 +++++++++<br>
&gt;  1 files changed, 9 insertions(+), 0 deletions(-)<br>
&gt;<br>
&gt; diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c<br>
&gt; index b8ff67e..5a2ef70 100644<br>
&gt; --- a/src/mesa/main/teximage.c<br>
&gt; +++ b/src/mesa/main/teximage.c<br>
&gt; @@ -2543,6 +2543,15 @@ teximage(struct gl_context *ctx, GLuint dims,<br>
&gt;       }<br>
&gt;       else {<br>
&gt;          /* no error, set the tex image parameters */<br>
&gt; +<br>
&gt; +        /* Allow a hardware driver to just strip out the border, to provide<br>
&gt; +         * reliable but slightly incorrect hardware rendering instead of<br>
&gt; +         * rarely-tested software fallback rendering.<br>
&gt; +         */<br>
&gt; +        if (border &amp;&amp; ctx-&gt;Const.StripTextureBorder)<br>
&gt; +           strip_texture_border(target, &amp;border, &amp;width, &amp;height, &amp;depth, unpack,<br>
&gt; +                                &amp;unpack_no_border);<br>
&gt; +<br>
&gt;          struct gl_texture_object *texObj =<br>
&gt;             _mesa_get_current_tex_object(ctx, target);<br>
&gt;          gl_format texFormat = _mesa_choose_texture_format(ctx, texObj,<br>
<br>
</div></div>Actually, I&#39;m not sure we want to do this.<br>
<br>
The typical usage of proxy textures is:<br>
<br>
glTexImage2D(GL_PROXY_TEXTURE_2D, border=1, width, height, ...);<br>
glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, GL_TEXTURE_WIDTH, &amp;w);<br>
if (w != width) {<br>
   // the proxy texture failed, do something else<br>
}</blockquote><div>I agree. This is the typical usage. </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> </blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<br>
If we stripped the texture border for the proxy texture, the<br>
conditional above would then fail. Have you found a different case<br>
where it makes sense to strip the border for proxies?</blockquote><div> </div><div>I  thought of a case where below 2 cases gives you different values without this patch:</div><div>1. glTexImage2D(GL_PROXY_TEXTURE_2D, border=1, width, height, ...);</div>

<div>   glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, GL_TEXTURE_WIDTH, &amp;w);</div><div>   /*you get an unstripped width value*/</div><div><br></div><div><div>2. glTexImage2D(GL_TEXTURE_2D, border=1, width, height, ...);</div>

<div>   glGetTexLevelParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WIDTH, &amp;w);</div></div><div>   /*you get a stripped width value*/</div><div><br></div><div>But i haven&#39;t seen a case where any application compare these two values to make</div>

<div>a decision. We can leave proxy textures unstripped if this is not an important use case.</div></div>