Fix set_buffers_damage in VulkanSurface

Fixes: 130363483
Test: `setprop debug.hwui.renderer skiavk` and ensure
      surface damage in dumpsys surfaceflinger is expected
      in portrait & landscape orientations.

Change-Id: I973c47038e534c86f38112de7b863477d982d150
diff --git a/libs/hwui/renderthread/ReliableSurface.cpp b/libs/hwui/renderthread/ReliableSurface.cpp
index 6f2b9df..6cbca33 100644
--- a/libs/hwui/renderthread/ReliableSurface.cpp
+++ b/libs/hwui/renderthread/ReliableSurface.cpp
@@ -300,17 +300,9 @@
     int result = callProtected(getWrapped(window), perform, operation, args);
     va_end(args);
 
-    switch (operation) {
-        case NATIVE_WINDOW_SET_BUFFERS_FORMAT:
-        case NATIVE_WINDOW_SET_USAGE:
-        case NATIVE_WINDOW_SET_USAGE64:
-            va_start(args, operation);
-            getSelf(window)->perform(operation, args);
-            va_end(args);
-            break;
-        default:
-            break;
-    }
+    va_start(args, operation);
+    getSelf(window)->perform(operation, args);
+    va_end(args);
 
     return result;
 }
diff --git a/libs/hwui/renderthread/VulkanSurface.cpp b/libs/hwui/renderthread/VulkanSurface.cpp
index 36f540c..763be00 100644
--- a/libs/hwui/renderthread/VulkanSurface.cpp
+++ b/libs/hwui/renderthread/VulkanSurface.cpp
@@ -531,19 +531,19 @@
 
 bool VulkanSurface::presentCurrentBuffer(const SkRect& dirtyRect, int semaphoreFd) {
     if (!dirtyRect.isEmpty()) {
-        SkRect transformedRect;
-        mWindowInfo.preTransform.mapRect(&transformedRect, dirtyRect);
 
-        SkIRect transformedIRect;
-        transformedRect.roundOut(&transformedIRect);
-        transformedIRect.intersect(0, 0, mWindowInfo.size.fWidth, mWindowInfo.size.fHeight);
+        // native_window_set_surface_damage takes a rectangle in prerotated space
+        // with a bottom-left origin. That is, top > bottom.
+        // The dirtyRect is also in prerotated space, so we just need to switch it to
+        // a bottom-left origin space.
 
-        // map to bottom-left coordinate system
+        SkIRect irect;
+        dirtyRect.roundOut(&irect);
         android_native_rect_t aRect;
-        aRect.left = transformedIRect.x();
-        aRect.top = mWindowInfo.size.fHeight - (transformedIRect.y() + transformedIRect.height());
-        aRect.right = aRect.left + transformedIRect.width();
-        aRect.bottom = aRect.top - transformedIRect.height();
+        aRect.left = irect.left();
+        aRect.top = logicalHeight() - irect.top();
+        aRect.right = irect.right();
+        aRect.bottom = logicalHeight() - irect.bottom();
 
         int err = native_window_set_surface_damage(mNativeWindow.get(), &aRect, 1);
         ALOGE_IF(err != 0, "native_window_set_surface_damage failed: %s (%d)", strerror(-err), err);