On Thu, Sep 26, 2002 at 07:20:58AM +0100, Keith Whitwell wrote:
> Ian Romanick wrote:
> > - Do we really need the &3 in radeon_vtxfmt_c.c:
> >
> > static void radeon_MultiTexCoord1fARB( GLenum target, GLfloat s )
> > {
> > - GLfloat *dest = vb.texcoordptr[(target - GL_TEXTURE0_ARB)&1];
> > + GLfloat *dest = vb.texcoordptr[(target - GL_TEXTURE0_ARB)&3];
> > dest[0] = s;
> > dest[1] = 0;
> > }
> >
> > If we don't need the mask, then the AND instructions should be removed
> > from the assembly stubs in radeon_vtxtmp_x86.S as well.
>
> We definitely need something here. This code must not crash for bogus values
> of target, but the behaviour is otherwise undefined. In the above code you'd
> want to set up a bogus value for texcoordptr[3] to point to some temporary
> storage, or anywhere at all, really. An alternative is a guard like:
>
> if (target - GL_TEXTURE_0_ARB < 3)
>
> which is slightly more work when looking at the codegen templates.
I've made some changes (and a discovery) here, and I should have a new
version of the patch out for people to review either later today or
tomorrow. My discovery is that the '- GL_TEXTURE0' is useless. The value
for GL_TEXTURE0 is 0x84C0. The low order 5 bits are all 0. For any of the
possible valid values for target, subtracting GL_TEXTURE0 is the same as
masking with 0x1F. Masking with 0x1F followed by a mask with 0x03 (or
0x01) is redundant.
My vote is to change the 2-TMU version (in all 6 places) to:
static void radeon_MultiTexCoord1fARB( GLenum target, GLfloat s )
{
GLfloat *dest = vb.texcoordptr[target & 1];
dest[0] = s;
dest[1] = 0;
}
--
Smile! http://antwrp.gsfc.nasa.gov/apod/ap990315.html
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel