Fix texcoord interpolation for fragment shaders.
This commit is contained in:
@@ -883,7 +883,7 @@ fast_persp_span(GLcontext *ctx, struct sw_span *span,
|
||||
|
||||
/*
|
||||
* This is the big one!
|
||||
* Interpolate Z, RGB, Alpha, specular, fog, and N sets of texture coordinates.
|
||||
* Interpolate Z, RGB, Alpha, specular, fog, N sets of texture coordinates, and varying floats.
|
||||
* Yup, it's slow.
|
||||
*/
|
||||
#define NAME multitextured_triangle
|
||||
@@ -893,7 +893,8 @@ fast_persp_span(GLcontext *ctx, struct sw_span *span,
|
||||
#define INTERP_RGB 1
|
||||
#define INTERP_ALPHA 1
|
||||
#define INTERP_SPEC 1
|
||||
#define INTERP_MULTITEX 1
|
||||
#define INTERP_MULTITEX 1
|
||||
#define INTERP_VARYING 1
|
||||
#define RENDER_SPAN( span ) _swrast_write_rgba_span(ctx, &span);
|
||||
#include "s_tritemp.h"
|
||||
|
||||
@@ -1072,9 +1073,10 @@ _swrast_choose_triangle( GLcontext *ctx )
|
||||
}
|
||||
}
|
||||
|
||||
if (ctx->Texture._EnabledCoordUnits || ctx->FragmentProgram._Active || ctx->ATIFragmentShader._Enabled) {
|
||||
if (ctx->Texture._EnabledCoordUnits || ctx->FragmentProgram._Active ||
|
||||
ctx->ATIFragmentShader._Enabled || ctx->ShaderObjects._FragmentShaderPresent) {
|
||||
/* Ugh, we do a _lot_ of tests to pick the best textured tri func */
|
||||
const struct gl_texture_object *texObj2D;
|
||||
const struct gl_texture_object *texObj2D;
|
||||
const struct gl_texture_image *texImg;
|
||||
GLenum minFilter, magFilter, envMode;
|
||||
GLint format;
|
||||
@@ -1088,17 +1090,18 @@ _swrast_choose_triangle( GLcontext *ctx )
|
||||
/* First see if we can use an optimized 2-D texture function */
|
||||
if (ctx->Texture._EnabledCoordUnits == 0x1
|
||||
&& !ctx->FragmentProgram._Active
|
||||
&& !ctx->ATIFragmentShader._Enabled
|
||||
&& !ctx->ATIFragmentShader._Enabled
|
||||
&& !ctx->ShaderObjects._FragmentShaderPresent
|
||||
&& ctx->Texture.Unit[0]._ReallyEnabled == TEXTURE_2D_BIT
|
||||
&& texObj2D->WrapS == GL_REPEAT
|
||||
&& texObj2D->WrapT == GL_REPEAT
|
||||
&& texObj2D->WrapT == GL_REPEAT
|
||||
&& texImg->_IsPowerOfTwo
|
||||
&& texImg->Border == 0
|
||||
&& texImg->Width == texImg->RowStride
|
||||
&& (format == MESA_FORMAT_RGB || format == MESA_FORMAT_RGBA)
|
||||
&& minFilter == magFilter
|
||||
&& ctx->Light.Model.ColorControl == GL_SINGLE_COLOR
|
||||
&& ctx->Texture.Unit[0].EnvMode != GL_COMBINE_EXT) {
|
||||
&& minFilter == magFilter
|
||||
&& ctx->Light.Model.ColorControl == GL_SINGLE_COLOR
|
||||
&& ctx->Texture.Unit[0].EnvMode != GL_COMBINE_EXT) {
|
||||
if (ctx->Hint.PerspectiveCorrection==GL_FASTEST) {
|
||||
if (minFilter == GL_NEAREST
|
||||
&& format == MESA_FORMAT_RGB
|
||||
|
||||
Reference in New Issue
Block a user