+ /* Query ANativeWindow for MIN_UNDEQUEUED_BUFFER, minimum amount
+ * of undequeued buffers.
+ */
+ if (window->query(window, NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS,
+ &min_buffer_count)) {
+ _eglError(EGL_BAD_NATIVE_WINDOW, "droid_create_surface");
+ goto cleanup_surface;
+ }
+
+ /* Query for maximum buffer count, application can set this
+ * to limit the total amount of buffers.
+ */
+ if (window->query(window, NATIVE_WINDOW_MAX_BUFFER_COUNT,
+ &max_buffer_count)) {
+ _eglError(EGL_BAD_NATIVE_WINDOW, "droid_create_surface");
+ goto cleanup_surface;
+ }
+
+ /* Clamp preferred between minimum (min undequeued + 1 dequeued)
+ * and maximum.
+ */
+ buffer_count = CLAMP(preferred_buffer_count, min_buffer_count + 1,
+ max_buffer_count);
+
+ if (native_window_set_buffer_count(window, buffer_count)) {
+ _eglError(EGL_BAD_NATIVE_WINDOW, "droid_create_surface");
+ goto cleanup_surface;
+ }
+ dri2_surf->color_buffers = calloc(buffer_count,
+ sizeof(*dri2_surf->color_buffers));
+ if (!dri2_surf->color_buffers) {
+ _eglError(EGL_BAD_ALLOC, "droid_create_surface");
+ goto cleanup_surface;
+ }
+ dri2_surf->color_buffers_count = buffer_count;
+