Stop always set OffsetByFudgeFactor in renderVertexBuffer
bug:27857128
Change-Id: Id92e0a5790b14f76cfa8bb38e8b11ce649775da0
diff --git a/libs/hwui/BakedOpDispatcher.cpp b/libs/hwui/BakedOpDispatcher.cpp
index 5fb8425..8251ee6 100644
--- a/libs/hwui/BakedOpDispatcher.cpp
+++ b/libs/hwui/BakedOpDispatcher.cpp
@@ -344,7 +344,8 @@
const SkPaint& paint, int vertexBufferRenderFlags) {
if (CC_LIKELY(vertexBuffer.getVertexCount())) {
bool shadowInterp = vertexBufferRenderFlags & VertexBufferRenderFlags::ShadowInterp;
- const int transformFlags = TransformFlags::OffsetByFudgeFactor;
+ const int transformFlags = vertexBufferRenderFlags & VertexBufferRenderFlags::Offset
+ ? TransformFlags::OffsetByFudgeFactor : 0;
Glop glop;
GlopBuilder(renderer.renderState(), renderer.caches(), &glop)
.setRoundRectClipState(state.roundRectClipState)
diff --git a/libs/hwui/tests/unit/BakedOpDispatcherTests.cpp b/libs/hwui/tests/unit/BakedOpDispatcherTests.cpp
index 5471486..781f88c 100644
--- a/libs/hwui/tests/unit/BakedOpDispatcherTests.cpp
+++ b/libs/hwui/tests/unit/BakedOpDispatcherTests.cpp
@@ -109,3 +109,37 @@
EXPECT_FLOAT_EQ(128 / 255.0f, glop.fill.color.a) << "Rect quad should use op alpha";
});
}
+
+static int getGlopTransformFlags(renderthread::RenderThread& renderThread, RecordedOp* op) {
+ int result = 0;
+ testUnmergedGlopDispatch(renderThread, op, [&result] (const Glop& glop) {
+ result = glop.transform.transformFlags;
+ });
+ return result;
+}
+
+RENDERTHREAD_TEST(BakedOpDispatcher, offsetFlags) {
+ Rect bounds(10, 15, 20, 25);
+ SkPaint paint;
+ SkPaint aaPaint;
+ aaPaint.setAntiAlias(true);
+
+ RoundRectOp roundRectOp(bounds, Matrix4::identity(), nullptr, &paint, 0, 270);
+ EXPECT_EQ(TransformFlags::None, getGlopTransformFlags(renderThread, &roundRectOp))
+ << "Expect no offset for round rect op.";
+
+ const float points[4] = {0.5, 0.5, 1.0, 1.0};
+ PointsOp antiAliasedPointsOp(bounds, Matrix4::identity(), nullptr, &aaPaint, points, 4);
+ EXPECT_EQ(TransformFlags::None, getGlopTransformFlags(renderThread, &antiAliasedPointsOp))
+ << "Expect no offset for AA points.";
+ PointsOp pointsOp(bounds, Matrix4::identity(), nullptr, &paint, points, 4);
+ EXPECT_EQ(TransformFlags::OffsetByFudgeFactor, getGlopTransformFlags(renderThread, &pointsOp))
+ << "Expect an offset for non-AA points.";
+
+ LinesOp antiAliasedLinesOp(bounds, Matrix4::identity(), nullptr, &aaPaint, points, 4);
+ EXPECT_EQ(TransformFlags::None, getGlopTransformFlags(renderThread, &antiAliasedLinesOp))
+ << "Expect no offset for AA lines.";
+ LinesOp linesOp(bounds, Matrix4::identity(), nullptr, &paint, points, 4);
+ EXPECT_EQ(TransformFlags::OffsetByFudgeFactor, getGlopTransformFlags(renderThread, &linesOp))
+ << "Expect an offset for non-AA lines.";
+}
\ No newline at end of file