diff options
| author | 2015-01-03 13:33:57 +0100 | |
|---|---|---|
| committer | 2015-02-18 14:50:28 +0100 | |
| commit | 6ca752ccbc7c59dab66f476ca02d3b53527c57da (patch) | |
| tree | d5578562d0ea9d4c06dbd1050ae1460bf2e842bd /src | |
| parent | Pica: Fix a bug in the register definitions, relating to texture wrapping. (diff) | |
| download | yuzu-6ca752ccbc7c59dab66f476ca02d3b53527c57da.tar.gz yuzu-6ca752ccbc7c59dab66f476ca02d3b53527c57da.tar.xz yuzu-6ca752ccbc7c59dab66f476ca02d3b53527c57da.zip | |
Pica/TextureUnit: Implement mirrored repeating texture wrapping.
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/pica.h | 5 | ||||
| -rw-r--r-- | src/video_core/rasterizer.cpp | 10 |
2 files changed, 12 insertions, 3 deletions
diff --git a/src/video_core/pica.h b/src/video_core/pica.h index ef9809d57..c20bf99d4 100644 --- a/src/video_core/pica.h +++ b/src/video_core/pica.h | |||
| @@ -118,8 +118,9 @@ struct Regs { | |||
| 118 | 118 | ||
| 119 | struct TextureConfig { | 119 | struct TextureConfig { |
| 120 | enum WrapMode : u32 { | 120 | enum WrapMode : u32 { |
| 121 | ClampToEdge = 0, | 121 | ClampToEdge = 0, |
| 122 | Repeat = 2, | 122 | Repeat = 2, |
| 123 | MirroredRepeat = 3, | ||
| 123 | }; | 124 | }; |
| 124 | 125 | ||
| 125 | INSERT_PADDING_WORDS(0x1); | 126 | INSERT_PADDING_WORDS(0x1); |
diff --git a/src/video_core/rasterizer.cpp b/src/video_core/rasterizer.cpp index 65dddb47c..f788122d8 100644 --- a/src/video_core/rasterizer.cpp +++ b/src/video_core/rasterizer.cpp | |||
| @@ -251,7 +251,15 @@ static void ProcessTriangleInternal(const VertexShader::OutputVertex& v0, | |||
| 251 | return val; | 251 | return val; |
| 252 | 252 | ||
| 253 | case Regs::TextureConfig::Repeat: | 253 | case Regs::TextureConfig::Repeat: |
| 254 | return (int)(((unsigned)val) % size); | 254 | return (int)((unsigned)val % size); |
| 255 | |||
| 256 | case Regs::TextureConfig::MirroredRepeat: | ||
| 257 | { | ||
| 258 | int val = (int)((unsigned)val % (2 * size)); | ||
| 259 | if (val >= size) | ||
| 260 | val = 2 * size - 1 - val; | ||
| 261 | return val; | ||
| 262 | } | ||
| 255 | 263 | ||
| 256 | default: | 264 | default: |
| 257 | LOG_ERROR(HW_GPU, "Unknown texture coordinate wrapping mode %x\n", (int)mode); | 265 | LOG_ERROR(HW_GPU, "Unknown texture coordinate wrapping mode %x\n", (int)mode); |