Invalidate buffers on transform change
Fixes: 271419600
Test: repro steps on bug
Change-Id: Ib4eef40a0f59512c669b069532e55d36293f9e1c
(cherry picked from commit 61c6447241)
Merged-In: Ib4eef40a0f59512c669b069532e55d36293f9e1c
This commit is contained in:
@@ -368,6 +368,14 @@ void VulkanSurface::releaseBuffers() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VulkanSurface::invalidateBuffers() {
|
||||||
|
for (uint32_t i = 0; i < mWindowInfo.bufferCount; i++) {
|
||||||
|
VulkanSurface::NativeBufferInfo& bufferInfo = mNativeBuffers[i];
|
||||||
|
bufferInfo.hasValidContents = false;
|
||||||
|
bufferInfo.lastPresentedCount = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
VulkanSurface::NativeBufferInfo* VulkanSurface::dequeueNativeBuffer() {
|
VulkanSurface::NativeBufferInfo* VulkanSurface::dequeueNativeBuffer() {
|
||||||
// Set the mCurrentBufferInfo to invalid in case of error and only reset it to the correct
|
// Set the mCurrentBufferInfo to invalid in case of error and only reset it to the correct
|
||||||
// value at the end of the function if everything dequeued correctly.
|
// value at the end of the function if everything dequeued correctly.
|
||||||
@@ -400,6 +408,10 @@ VulkanSurface::NativeBufferInfo* VulkanSurface::dequeueNativeBuffer() {
|
|||||||
// new NativeBufferInfo storage will be populated lazily as we dequeue each new buffer.
|
// new NativeBufferInfo storage will be populated lazily as we dequeue each new buffer.
|
||||||
mWindowInfo.actualSize = actualSize;
|
mWindowInfo.actualSize = actualSize;
|
||||||
releaseBuffers();
|
releaseBuffers();
|
||||||
|
} else {
|
||||||
|
// A change in transform means we need to repaint the entire buffer area as the damage
|
||||||
|
// rects have just moved about.
|
||||||
|
invalidateBuffers();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (transformHint != mWindowInfo.transform) {
|
if (transformHint != mWindowInfo.transform) {
|
||||||
|
|||||||
@@ -113,6 +113,7 @@ private:
|
|||||||
WindowInfo* outWindowInfo);
|
WindowInfo* outWindowInfo);
|
||||||
static bool UpdateWindow(ANativeWindow* window, const WindowInfo& windowInfo);
|
static bool UpdateWindow(ANativeWindow* window, const WindowInfo& windowInfo);
|
||||||
void releaseBuffers();
|
void releaseBuffers();
|
||||||
|
void invalidateBuffers();
|
||||||
|
|
||||||
// TODO: This number comes from ui/BufferQueueDefs. We're not pulling the
|
// TODO: This number comes from ui/BufferQueueDefs. We're not pulling the
|
||||||
// header in so that we don't need to depend on libui, but we should share
|
// header in so that we don't need to depend on libui, but we should share
|
||||||
|
|||||||
Reference in New Issue
Block a user