[Impeller] Make text glyph offsets respect the current transform (#39119)

diff --git a/impeller/aiks/aiks_unittests.cc b/impeller/aiks/aiks_unittests.cc
index dc884f8..623b311 100644
--- a/impeller/aiks/aiks_unittests.cc
+++ b/impeller/aiks/aiks_unittests.cc
@@ -18,6 +18,7 @@
 #include "impeller/entity/contents/scene_contents.h"
 #include "impeller/entity/contents/tiled_texture_contents.h"
 #include "impeller/geometry/color.h"
+#include "impeller/geometry/constants.h"
 #include "impeller/geometry/geometry_unittests.h"
 #include "impeller/geometry/matrix.h"
 #include "impeller/geometry/path_builder.h"
@@ -1183,6 +1184,20 @@
   ASSERT_TRUE(OpenPlaygroundHere(canvas.EndRecordingAsPicture()));
 }
 
+TEST_P(AiksTest, TextRotated) {
+  Canvas canvas;
+  canvas.Transform(Matrix(0.5, -0.3, 0, -0.002,  //
+                          0, 1, 0, 0,            //
+                          0, 0, 0.3, 0,          //
+                          100, 100, 0, 1.3));
+
+  ASSERT_TRUE(RenderTextInCanvas(
+      GetContext(), canvas, "the quick brown fox jumped over the lazy dog!.?",
+      "Roboto-Regular.ttf"));
+
+  ASSERT_TRUE(OpenPlaygroundHere(canvas.EndRecordingAsPicture()));
+}
+
 TEST_P(AiksTest, CanDrawPaint) {
   Paint paint;
   paint.color = Color::MediumTurquoise();
diff --git a/impeller/compiler/shader_lib/impeller/transform.glsl b/impeller/compiler/shader_lib/impeller/transform.glsl
index 444419d..bfe0331 100644
--- a/impeller/compiler/shader_lib/impeller/transform.glsl
+++ b/impeller/compiler/shader_lib/impeller/transform.glsl
@@ -15,14 +15,15 @@
 // atlas.
 vec4 IPPositionForGlyphPosition(mat4 mvp,
                                 vec2 unit_position,
-                                vec2 glyph_position,
-                                vec2 glyph_size) {
-  vec4 translate =
-      mvp[0] * glyph_position.x + mvp[1] * glyph_position.y + mvp[3];
-  mat4 translated_mvp =
-      mat4(mvp[0], mvp[1], mvp[2], vec4(translate.xyz, mvp[3].w));
-  return translated_mvp * vec4(unit_position.x * glyph_size.x,
-                               unit_position.y * glyph_size.y, 0.0, 1.0);
+                                vec2 destination_position,
+                                vec2 destination_size) {
+  mat4 translation = mat4(1, 0, 0, 0,  //
+                          0, 1, 0, 0,  //
+                          0, 0, 1, 0,  //
+                          destination_position.xy, 0, 1);
+  return mvp * translation *
+         vec4(unit_position.x * destination_size.x,
+              unit_position.y * destination_size.y, 0.0, 1.0);
 }
 
 #endif