@ -118,8 +118,9 @@ struct Regs {
struct TextureConfig {
enum WrapMode : u32 {
ClampToEdge = 0,
Repeat = 2,
MirroredRepeat = 3,
};
INSERT_PADDING_WORDS(0x1);
@ -251,7 +251,15 @@ static void ProcessTriangleInternal(const VertexShader::OutputVertex& v0,
return val;
case Regs::TextureConfig::Repeat:
return (int)(((unsigned)val) % size);
return (int)((unsigned)val % size);
case Regs::TextureConfig::MirroredRepeat:
{
int val = (int)((unsigned)val % (2 * size));
if (val >= size)
val = 2 * size - 1 - val;
}
default:
LOG_ERROR(HW_GPU, "Unknown texture coordinate wrapping mode %x\n", (int)mode);