diff options
| author | 2017-05-20 23:17:12 +0300 | |
|---|---|---|
| committer | 2017-05-21 09:09:15 +0300 | |
| commit | 36526c63ef8809d228b01df57ea8455f39076e9a (patch) | |
| tree | f8d81b42dc7165e7ff91d3c9d1a1c3bdb2c98e27 | |
| parent | Merge pull request #2661 from Subv/uds5 (diff) | |
| download | yuzu-36526c63ef8809d228b01df57ea8455f39076e9a.tar.gz yuzu-36526c63ef8809d228b01df57ea8455f39076e9a.tar.xz yuzu-36526c63ef8809d228b01df57ea8455f39076e9a.zip | |
swrasterizer: add missing tc0_w and fragment lighting attribute processing
| -rw-r--r-- | src/video_core/swrasterizer/clipper.cpp | 7 | ||||
| -rw-r--r-- | src/video_core/swrasterizer/rasterizer.h | 6 |
2 files changed, 8 insertions, 5 deletions
diff --git a/src/video_core/swrasterizer/clipper.cpp b/src/video_core/swrasterizer/clipper.cpp index 2d80822d9..6fb923756 100644 --- a/src/video_core/swrasterizer/clipper.cpp +++ b/src/video_core/swrasterizer/clipper.cpp | |||
| @@ -69,13 +69,14 @@ static void InitScreenCoordinates(Vertex& vtx) { | |||
| 69 | viewport.offset_y = float24::FromFloat32(static_cast<float>(regs.rasterizer.viewport_corner.y)); | 69 | viewport.offset_y = float24::FromFloat32(static_cast<float>(regs.rasterizer.viewport_corner.y)); |
| 70 | 70 | ||
| 71 | float24 inv_w = float24::FromFloat32(1.f) / vtx.pos.w; | 71 | float24 inv_w = float24::FromFloat32(1.f) / vtx.pos.w; |
| 72 | vtx.color *= inv_w; | 72 | vtx.pos.w = inv_w; |
| 73 | vtx.view *= inv_w; | ||
| 74 | vtx.quat *= inv_w; | 73 | vtx.quat *= inv_w; |
| 74 | vtx.color *= inv_w; | ||
| 75 | vtx.tc0 *= inv_w; | 75 | vtx.tc0 *= inv_w; |
| 76 | vtx.tc1 *= inv_w; | 76 | vtx.tc1 *= inv_w; |
| 77 | vtx.tc0_w *= inv_w; | ||
| 78 | vtx.view *= inv_w; | ||
| 77 | vtx.tc2 *= inv_w; | 79 | vtx.tc2 *= inv_w; |
| 78 | vtx.pos.w = inv_w; | ||
| 79 | 80 | ||
| 80 | vtx.screenpos[0] = | 81 | vtx.screenpos[0] = |
| 81 | (vtx.pos.x * inv_w + float24::FromFloat32(1.0)) * viewport.halfsize_x + viewport.offset_x; | 82 | (vtx.pos.x * inv_w + float24::FromFloat32(1.0)) * viewport.halfsize_x + viewport.offset_x; |
diff --git a/src/video_core/swrasterizer/rasterizer.h b/src/video_core/swrasterizer/rasterizer.h index 3a72ac343..2f0877581 100644 --- a/src/video_core/swrasterizer/rasterizer.h +++ b/src/video_core/swrasterizer/rasterizer.h | |||
| @@ -23,13 +23,15 @@ struct Vertex : Shader::OutputVertex { | |||
| 23 | pos = pos * factor + vtx.pos * (float24::FromFloat32(1) - factor); | 23 | pos = pos * factor + vtx.pos * (float24::FromFloat32(1) - factor); |
| 24 | 24 | ||
| 25 | // TODO: Should perform perspective correct interpolation here... | 25 | // TODO: Should perform perspective correct interpolation here... |
| 26 | quat = quat * factor + vtx.quat * (float24::FromFloat32(1) - factor); | ||
| 27 | color = color * factor + vtx.color * (float24::FromFloat32(1) - factor); | ||
| 26 | tc0 = tc0 * factor + vtx.tc0 * (float24::FromFloat32(1) - factor); | 28 | tc0 = tc0 * factor + vtx.tc0 * (float24::FromFloat32(1) - factor); |
| 27 | tc1 = tc1 * factor + vtx.tc1 * (float24::FromFloat32(1) - factor); | 29 | tc1 = tc1 * factor + vtx.tc1 * (float24::FromFloat32(1) - factor); |
| 30 | tc0_w = tc0_w * factor + vtx.tc0_w * (float24::FromFloat32(1) - factor); | ||
| 31 | view = view * factor + vtx.view * (float24::FromFloat32(1) - factor); | ||
| 28 | tc2 = tc2 * factor + vtx.tc2 * (float24::FromFloat32(1) - factor); | 32 | tc2 = tc2 * factor + vtx.tc2 * (float24::FromFloat32(1) - factor); |
| 29 | 33 | ||
| 30 | screenpos = screenpos * factor + vtx.screenpos * (float24::FromFloat32(1) - factor); | 34 | screenpos = screenpos * factor + vtx.screenpos * (float24::FromFloat32(1) - factor); |
| 31 | |||
| 32 | color = color * factor + vtx.color * (float24::FromFloat32(1) - factor); | ||
| 33 | } | 35 | } |
| 34 | 36 | ||
| 35 | // Linear interpolation | 37 | // Linear interpolation |