summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/video_core/swrasterizer/clipper.cpp7
-rw-r--r--src/video_core/swrasterizer/rasterizer.h6
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