Merge changes Ifeba21da,Ie7982790,I02bb34b7 into nyc-dev
* changes:
vulkan: silence a warning when layers are enabled
vulkan: fix "vkinfo -validate"
vulkan: fix vkinfo with layer extensions
diff --git a/libs/gui/BufferQueueProducer.cpp b/libs/gui/BufferQueueProducer.cpp
index 620cf89..0b7ce17 100644
--- a/libs/gui/BufferQueueProducer.cpp
+++ b/libs/gui/BufferQueueProducer.cpp
@@ -844,30 +844,31 @@
mCore->mQueue.push_back(item);
frameAvailableListener = mCore->mConsumerListener;
} else {
- // When the queue is not empty, we need to look at the front buffer
- // state to see if we need to replace it
- BufferQueueCore::Fifo::iterator front(mCore->mQueue.begin());
- if (front->mIsDroppable) {
+ // When the queue is not empty, we need to look at the last buffer
+ // in the queue to see if we need to replace it
+ const BufferItem& last = mCore->mQueue.itemAt(
+ mCore->mQueue.size() - 1);
+ if (last.mIsDroppable) {
- if (!front->mIsStale) {
- mSlots[front->mSlot].mBufferState.freeQueued();
+ if (!last.mIsStale) {
+ mSlots[last.mSlot].mBufferState.freeQueued();
// After leaving shared buffer mode, the shared buffer will
// still be around. Mark it as no longer shared if this
// operation causes it to be free.
if (!mCore->mSharedBufferMode &&
- mSlots[front->mSlot].mBufferState.isFree()) {
- mSlots[front->mSlot].mBufferState.mShared = false;
+ mSlots[last.mSlot].mBufferState.isFree()) {
+ mSlots[last.mSlot].mBufferState.mShared = false;
}
// Don't put the shared buffer on the free list.
- if (!mSlots[front->mSlot].mBufferState.isShared()) {
- mCore->mActiveBuffers.erase(front->mSlot);
- mCore->mFreeBuffers.push_back(front->mSlot);
+ if (!mSlots[last.mSlot].mBufferState.isShared()) {
+ mCore->mActiveBuffers.erase(last.mSlot);
+ mCore->mFreeBuffers.push_back(last.mSlot);
}
}
// Overwrite the droppable buffer with the incoming one
- *front = item;
+ mCore->mQueue.editItemAt(mCore->mQueue.size() - 1) = item;
frameReplacedListener = mCore->mConsumerListener;
} else {
mCore->mQueue.push_back(item);
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index 6ccd4ff..c640f58 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -251,7 +251,7 @@
ALOGE("Can't replace a frame on an empty queue");
return;
}
- mQueueItems.editItemAt(0) = item;
+ mQueueItems.editItemAt(mQueueItems.size() - 1) = item;
// Wake up any pending callbacks
mLastFrameNumberReceived = item.mFrameNumber;