Pica/TextureUnit: Implement mirrored repeating texture wrapping.

master
Tony Wasserka 2015-01-03 13:33:57 +07:00
parent 8bd7a896ea
commit 6ca752ccbc
2 changed files with 12 additions and 3 deletions

@ -118,8 +118,9 @@ struct Regs {
struct TextureConfig {
enum WrapMode : u32 {
ClampToEdge = 0,
Repeat = 2,
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;
return val;
}
default:
LOG_ERROR(HW_GPU, "Unknown texture coordinate wrapping mode %x\n", (int)mode);