For(Int x = x0, x < x1, x += 2)
{
- Float4 z = interpolate(xxxx, Dz[0], z, primitive + OFFSET(Primitive,z), false, false);
+ Float4 z = interpolate(xxxx, Dz[0], z, primitive + OFFSET(Primitive,z), false, false, state.depthClamp);
Float4 zValue;
Until(y >= yMax)
}
- Float4 QuadRasterizer::interpolate(Float4 &x, Float4 &D, Float4 &rhw, Pointer<Byte> planeEquation, bool flat, bool perspective)
+ Float4 QuadRasterizer::interpolate(Float4 &x, Float4 &D, Float4 &rhw, Pointer<Byte> planeEquation, bool flat, bool perspective, bool clamp)
{
Float4 interpolant = D;
}
}
+ if(clamp)
+ {
+ interpolant = Min(Max(interpolant, Float4(0.0f)), Float4(1.0f));
+ }
+
return interpolant;
}
bool interpolateZ() const;
bool interpolateW() const;
- Float4 interpolate(Float4 &x, Float4 &D, Float4 &rhw, Pointer<Byte> planeEquation, bool flat, bool perspective);
+ Float4 interpolate(Float4 &x, Float4 &D, Float4 &rhw, Pointer<Byte> planeEquation, bool flat, bool perspective, bool clamp);
const PixelProcessor::State &state;
const PixelShader *const shader;
x -= *Pointer<Float4>(constants + OFFSET(Constants,X) + q * sizeof(float4));
}
- z[q] = interpolate(x, Dz[q], z[q], primitive + OFFSET(Primitive,z), false, false);
-
- if(state.depthClamp)
- {
- z[q] = Min(Max(z[q], Float4(0.0f)), Float4(1.0f));
- }
+ z[q] = interpolate(x, Dz[q], z[q], primitive + OFFSET(Primitive,z), false, false, state.depthClamp);
}
}
if(interpolateW())
{
- w = interpolate(xxxx, Dw, rhw, primitive + OFFSET(Primitive,w), false, false);
+ w = interpolate(xxxx, Dw, rhw, primitive + OFFSET(Primitive,w), false, false, false);
rhw = reciprocal(w, false, false, true);
if(state.centroid)
{
if(!state.interpolant[interpolant].centroid)
{
- v[interpolant][component] = interpolate(xxxx, Dv[interpolant][component], rhw, primitive + OFFSET(Primitive, V[interpolant][component]), (state.interpolant[interpolant].flat & (1 << component)) != 0, state.perspective);
+ v[interpolant][component] = interpolate(xxxx, Dv[interpolant][component], rhw, primitive + OFFSET(Primitive, V[interpolant][component]), (state.interpolant[interpolant].flat & (1 << component)) != 0, state.perspective, false);
}
else
{
if(state.fog.component)
{
- f = interpolate(xxxx, Df, rhw, primitive + OFFSET(Primitive,f), state.fog.flat & 0x01, state.perspective);
+ f = interpolate(xxxx, Df, rhw, primitive + OFFSET(Primitive,f), state.fog.flat & 0x01, state.perspective, false);
}
setBuiltins(x, y, z, w);