Move calculation after clip check

This is to prevent undefined behavior if the calculation overflows.
Moving the calculation won't cause issues with the clipping since the
projected coordinates are not used in the clipping calculations.

Bug chromium:979644

Change-Id: I5a6fba0f067d8d3ad310de573bacd2f68dfe4b78
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/34109
Presubmit-Ready: Sean Risser <srisser@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Tested-by: Sean Risser <srisser@google.com>
diff --git a/src/Device/Renderer.cpp b/src/Device/Renderer.cpp
index 7c5e8b7..f6f7d1f 100644
--- a/src/Device/Renderer.cpp
+++ b/src/Device/Renderer.cpp
@@ -1196,12 +1196,6 @@
 		P[3].y -= Y;
 		C[3] = Clipper::ComputeClipFlags(P[3]);
 
-		triangle.v1 = triangle.v0;
-		triangle.v2 = triangle.v0;
-
-		triangle.v1.projected.x += iround(16 * 0.5f * pSize);
-		triangle.v2.projected.y -= iround(16 * 0.5f * pSize) * (data.Hx16[0] > 0.0f ? 1 : -1);   // Both Direct3D and OpenGL expect (0, 0) in the top-left corner
-
 		Polygon polygon(P, 4);
 
 		if((C[0] & C[1] & C[2] & C[3]) == Clipper::CLIP_FINITE)
@@ -1216,6 +1210,11 @@
 				}
 			}
 
+			triangle.v1 = triangle.v0;
+			triangle.v2 = triangle.v0;
+
+			triangle.v1.projected.x += iround(16 * 0.5f * pSize);
+			triangle.v2.projected.y -= iround(16 * 0.5f * pSize) * (data.Hx16[0] > 0.0f ? 1 : -1);   // Both Direct3D and OpenGL expect (0, 0) in the top-left corner
 			return setupRoutine(&primitive, &triangle, &polygon, &data);
 		}
 
diff --git a/src/Renderer/Renderer.cpp b/src/Renderer/Renderer.cpp
index fe9f52e..a2c2035 100644
--- a/src/Renderer/Renderer.cpp
+++ b/src/Renderer/Renderer.cpp
@@ -2010,12 +2010,6 @@
 		P[3].y -= Y;
 		C[3] = clipper->computeClipFlags(P[3]);
 
-		triangle.v1 = triangle.v0;
-		triangle.v2 = triangle.v0;
-
-		triangle.v1.X += iround(16 * 0.5f * pSize);
-		triangle.v2.Y -= iround(16 * 0.5f * pSize) * (data.Hx16[0] > 0.0f ? 1 : -1);   // Both Direct3D and OpenGL expect (0, 0) in the top-left corner
-
 		Polygon polygon(P, 4);
 
 		if((C[0] & C[1] & C[2] & C[3]) == Clipper::CLIP_FINITE)
@@ -2030,6 +2024,11 @@
 				}
 			}
 
+			triangle.v1 = triangle.v0;
+			triangle.v2 = triangle.v0;
+
+			triangle.v1.X += iround(16 * 0.5f * pSize);
+			triangle.v2.Y -= iround(16 * 0.5f * pSize) * (data.Hx16[0] > 0.0f ? 1 : -1);   // Both Direct3D and OpenGL expect (0, 0) in the top-left corner
 			return setupRoutine(&primitive, &triangle, &polygon, &data);
 		}