Merge "Fix set_buffers_damage in VulkanSurface" into qt-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
8d8d704cf7
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user