Optimize fragment input interpolation using FMA
Bug: b/216472189
Change-Id: Idc3800b70c203f860afe78018cbcebb7e6884089
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/63769
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Sean Risser <srisser@google.com>
diff --git a/src/Device/QuadRasterizer.cpp b/src/Device/QuadRasterizer.cpp
index 6414419..c93a4da 100644
--- a/src/Device/QuadRasterizer.cpp
+++ b/src/Device/QuadRasterizer.cpp
@@ -232,16 +232,16 @@
Float4 QuadRasterizer::interpolate(Float4 &x, Float4 &D, Float4 &rhw, Pointer<Byte> planeEquation, bool flat, bool perspective)
{
- Float4 interpolant = D;
-
- if(!flat)
+ if(flat)
{
- interpolant += x * *Pointer<Float4>(planeEquation + OFFSET(PlaneEquation, A), 16);
+ return D;
+ }
- if(perspective)
- {
- interpolant *= rhw;
- }
+ Float4 interpolant = MulAdd(x, *Pointer<Float4>(planeEquation + OFFSET(PlaneEquation, A), 16), D);
+
+ if(perspective)
+ {
+ interpolant *= rhw;
}
return interpolant;