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
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index ae11006..4008606 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -8553,6 +8553,19 @@
         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) {