Merge "Fix set_buffers_damage in VulkanSurface" into qt-dev

This commit is contained in:
TreeHugger Robot
2019-04-15 21:00:08 +00:00
committed by Android (Google) Code Review
2 changed files with 13 additions and 21 deletions

View File

@@ -300,17 +300,9 @@ int ReliableSurface::hook_perform(ANativeWindow* window, int operation, ...) {
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;
}

View File

@@ -525,19 +525,19 @@ VulkanSurface::NativeBufferInfo* VulkanSurface::dequeueNativeBuffer() {
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);