*/
+#include "main/errors.h"
#include "main/glheader.h"
#include "main/mtypes.h"
#include "main/macros.h"
(key->light_color_material_mask & (1 << attr)))
return GL_TRUE;
- if (key->varying_vp_inputs & VERT_BIT_GENERIC(attr))
+ if (key->varying_vp_inputs & VERT_BIT_MAT(attr))
return GL_TRUE;
if (ctx->Light.Material.Attrib[attr][0] != 0.0F)
if (ctx->Transform.RescaleNormals)
key->rescale_normals = 1;
- key->fog_distance_mode =
- translate_fog_distance_mode(ctx->Fog.FogCoordinateSource,
- ctx->Fog.FogDistanceMode);
+ /* Only distinguish fog parameters if we actually need */
+ if (key->fragprog_inputs_read & VARYING_BIT_FOGC)
+ key->fog_distance_mode =
+ translate_fog_distance_mode(ctx->Fog.FogCoordinateSource,
+ ctx->Fog.FogDistanceMode);
if (ctx->Point._Attenuated)
key->point_attenuated = 1;
| ctx->Texture._TexMatEnabled | ctx->Point.CoordReplace;
while (mask) {
const int i = u_bit_scan(&mask);
- struct gl_texture_unit *texUnit = &ctx->Texture.Unit[i];
+ struct gl_fixedfunc_texture_unit *texUnit =
+ &ctx->Texture.FixedFuncUnit[i];
if (ctx->Point.PointSprite)
if (ctx->Point.CoordReplace & (1u << i))
GLint s3,
GLint s4)
{
- gl_state_index tokens[STATE_LENGTH];
+ gl_state_index16 tokens[STATE_LENGTH];
GLint idx;
tokens[0] = s0;
tokens[1] = s1;
p->color_materials = p->state->light_color_material_mask;
}
- p->materials |= (p->state->varying_vp_inputs >> VERT_ATTRIB_GENERIC0);
+ p->materials |= ((p->state->varying_vp_inputs & VERT_BIT_MAT_ALL)
+ >> VERT_ATTRIB_MAT(0));
}
/* Put material values in the GENERIC slots -- they are not used
* for anything in fixed function mode.
*/
- return register_input( p, attrib + VERT_ATTRIB_GENERIC0 );
+ return register_input( p, VERT_ATTRIB_MAT(attrib) );
}
else
return register_param3( p, STATE_MATERIAL, side, property );
struct ureg input;
switch (p->state->fog_distance_mode) {
- case FDM_EYE_RADIAL: /* Z = sqrt(Xe*Xe + Ye*Ye + Ze*Ze) */
+ case FDM_EYE_RADIAL: { /* Z = sqrt(Xe*Xe + Ye*Ye + Ze*Ze) */
+ struct ureg tmp = get_temp(p);
input = get_eye_position(p);
- emit_op2(p, OPCODE_DP3, fog, WRITEMASK_X, input, input);
- emit_op1(p, OPCODE_RSQ, fog, WRITEMASK_X, fog);
- emit_op1(p, OPCODE_RCP, fog, WRITEMASK_X, fog);
+ emit_op2(p, OPCODE_DP3, tmp, WRITEMASK_X, input, input);
+ emit_op1(p, OPCODE_RSQ, tmp, WRITEMASK_X, tmp);
+ emit_op1(p, OPCODE_RCP, fog, WRITEMASK_X, tmp);
break;
+ }
case FDM_EYE_PLANE: /* Z = Ze */
input = get_eye_position_z(p);
emit_op1(p, OPCODE_MOV, fog, WRITEMASK_X, input);
struct gl_program *prog;
struct state_key key;
+ /* We only update ctx->varying_vp_inputs when in VP_MODE_FF _VPMode */
+ assert(VP_MODE_FF == ctx->VertexProgram._VPMode);
+
/* Grab all the relevant state and put it in a single structure:
*/
make_state_key(ctx, &key);