Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 301e2037 authored by John Reck's avatar John Reck
Browse files

Only support buffers with layer count == 1

Multi-layered buffers are not something that makes sense for
SurfaceFlinger to ingest. Instead of weird rendering glitches
downstream, reject those proactively to inform clients of
their mistake

Bug: 392541013
Flag: EXEMPT bug fix
Test: build & boot, existing usages work as expected
Change-Id: I7f0581b8a76accf337b9dc3212de551832374e6f
parent 218da5d7
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -8553,6 +8553,19 @@ std::shared_ptr<renderengine::ExternalTexture> SurfaceFlinger::getExternalTextur
        return nullptr;
    }

    if (bufferData.buffer && bufferData.buffer->getLayerCount() != 1) {
        std::string errorMessage =
                base::StringPrintf("Attempted to create an ExternalTexture with layer count (%u)"
                                   " != 1 for layer %s",
                                   bufferData.buffer->getLayerCount(), layerName);
        ALOGD("%s", errorMessage.c_str());
        if (bufferData.releaseBufferListener) {
            bufferData.releaseBufferListener->onTransactionQueueStalled(
                    String8(errorMessage.c_str()));
        }
        return nullptr;
    }

    bool cachedBufferChanged =
            bufferData.flags.test(BufferData::BufferDataChange::cachedBufferChanged);
    if (cachedBufferChanged && bufferData.buffer) {