1134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis/* 2134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * Copyright (C) 2011 The Android Open Source Project 3134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * 4134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * Licensed under the Apache License, Version 2.0 (the "License"); 5134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * you may not use this file except in compliance with the License. 6134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * You may obtain a copy of the License at 7134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * 8134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * http://www.apache.org/licenses/LICENSE-2.0 9134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * 10134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * Unless required by applicable law or agreed to in writing, software 11134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * distributed under the License is distributed on an "AS IS" BASIS, 12134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * See the License for the specific language governing permissions and 14134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis * limitations under the License. 15134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis */ 16134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 17fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis#define LOG_TAG "SurfaceTextureClient_test" 18fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis//#define LOG_NDEBUG 0 19fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis 205c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis#include <EGL/egl.h> 21c6bae007e6e29b585fc1207f84b378a480006173Mathias Agopian#include <GLES2/gl2.h> 22c6bae007e6e29b585fc1207f84b378a480006173Mathias Agopian 23134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis#include <gtest/gtest.h> 24c6bae007e6e29b585fc1207f84b378a480006173Mathias Agopian#include <gui/GLConsumer.h> 25e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian#include <gui/Surface.h> 26a9347647eca3101c014be902b713772de3977d87Mathias Agopian#include <gui/BufferQueue.h> 27d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis#include <system/graphics.h> 28fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis#include <utils/Log.h> 29fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis#include <utils/Thread.h> 30134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 3100b15b8f223976d016e16536e4720771ef634695Jiyong Parkextern "C" EGLAPI const char* eglQueryStringImplementationANDROID(EGLDisplay dpy, EGLint name); 3204b00cea67b406c4a971b24b9f91e95c754813edMichael Lentine#define CROP_EXT_STR "EGL_ANDROID_image_crop" 3304b00cea67b406c4a971b24b9f91e95c754813edMichael Lentine 34134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennisnamespace android { 35134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 36134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennisclass SurfaceTextureClientTest : public ::testing::Test { 37134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennisprotected: 387a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian SurfaceTextureClientTest(): 397a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglDisplay(EGL_NO_DISPLAY), 407a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglSurface(EGL_NO_SURFACE), 4153390e1e8c33ebee5bb8100e846f5263ba05ff73Pablo Ceballos mEglContext(EGL_NO_CONTEXT), 4253390e1e8c33ebee5bb8100e846f5263ba05ff73Pablo Ceballos mEglConfig(NULL) { 437a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 447a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 45134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis virtual void SetUp() { 46fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis const ::testing::TestInfo* const testInfo = 47fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis ::testing::UnitTest::GetInstance()->current_test_info(); 48fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis ALOGV("Begin test: %s.%s", testInfo->test_case_name(), 49fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis testInfo->name()); 50fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis 515603a2fbbd1aae74c4635e2f600819fb05d112e0Dan Stoza sp<IGraphicBufferProducer> producer; 525603a2fbbd1aae74c4635e2f600819fb05d112e0Dan Stoza sp<IGraphicBufferConsumer> consumer; 535603a2fbbd1aae74c4635e2f600819fb05d112e0Dan Stoza BufferQueue::createBufferQueue(&producer, &consumer); 54e49ba8e2ed8e17156eb00c8fc8e2285df62bc018Dan Stoza mST = new GLConsumer(consumer, 123, GLConsumer::TEXTURE_EXTERNAL, true, 55e49ba8e2ed8e17156eb00c8fc8e2285df62bc018Dan Stoza false); 565603a2fbbd1aae74c4635e2f600819fb05d112e0Dan Stoza mSTC = new Surface(producer); 578b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mANW = mSTC; 587a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 597a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian // We need a valid GL context so we can test updateTexImage() 607a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian // This initializes EGL and create a dummy GL context with a 617a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian // pbuffer render target. 627a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); 637a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 647a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_NE(EGL_NO_DISPLAY, mEglDisplay); 657a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 667a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLint majorVersion, minorVersion; 677a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_TRUE(eglInitialize(mEglDisplay, &majorVersion, &minorVersion)); 687a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 697a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 707a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLConfig myConfig; 717a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLint numConfigs = 0; 727a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_TRUE(eglChooseConfig(mEglDisplay, getConfigAttribs(), 737a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian &myConfig, 1, &numConfigs)); 747a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 757a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 76993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian mEglConfig = myConfig; 777a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLint pbufferAttribs[] = { 787a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGL_WIDTH, 16, 797a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGL_HEIGHT, 16, 807a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGL_NONE }; 817a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglSurface = eglCreatePbufferSurface(mEglDisplay, myConfig, pbufferAttribs); 827a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 837a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_NE(EGL_NO_SURFACE, mEglSurface); 847a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 857a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mEglContext = eglCreateContext(mEglDisplay, myConfig, EGL_NO_CONTEXT, 0); 867a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 877a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_NE(EGL_NO_CONTEXT, mEglContext); 887a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 897a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_TRUE(eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface, mEglContext)); 907a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ASSERT_EQ(EGL_SUCCESS, eglGetError()); 91134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis } 92134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 93134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis virtual void TearDown() { 94134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis mST.clear(); 95134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis mSTC.clear(); 968b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mANW.clear(); 978b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis 987a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); 997a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglDestroyContext(mEglDisplay, mEglContext); 1007a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglDestroySurface(mEglDisplay, mEglSurface); 1017a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglTerminate(mEglDisplay); 102fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis 103fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis const ::testing::TestInfo* const testInfo = 104fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis ::testing::UnitTest::GetInstance()->current_test_info(); 105fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis ALOGV("End test: %s.%s", testInfo->test_case_name(), 106fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis testInfo->name()); 1077a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 1087a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 1097a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian virtual EGLint const* getConfigAttribs() { 1107a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian static EGLint sDefaultConfigAttribs[] = { 111993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian EGL_SURFACE_TYPE, EGL_PBUFFER_BIT | EGL_WINDOW_BIT, 1127a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGL_NONE 1137a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian }; 1147a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 1157a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian return sDefaultConfigAttribs; 116134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis } 117134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 1182adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden sp<GLConsumer> mST; 119e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian sp<Surface> mSTC; 1208b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis sp<ANativeWindow> mANW; 1218b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis 1227a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLDisplay mEglDisplay; 1237a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLSurface mEglSurface; 1247a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLContext mEglContext; 125993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian EGLConfig mEglConfig; 126134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis}; 127134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 128bae774eb20bebd409441b93386b51bccda75f546Jamie GennisTEST_F(SurfaceTextureClientTest, GetISurfaceTextureIsNotNull) { 129cf0b8c85fb0106751256dba7821f86b5ad03126cMathias Agopian sp<IGraphicBufferProducer> ist(mSTC->getIGraphicBufferProducer()); 130bae774eb20bebd409441b93386b51bccda75f546Jamie Gennis ASSERT_TRUE(ist != NULL); 131bae774eb20bebd409441b93386b51bccda75f546Jamie Gennis} 132bae774eb20bebd409441b93386b51bccda75f546Jamie Gennis 133134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie GennisTEST_F(SurfaceTextureClientTest, QueuesToWindowCompositorIsFalse) { 134134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis int result = -123; 1358b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis int err = mANW->query(mANW.get(), NATIVE_WINDOW_QUEUES_TO_WINDOW_COMPOSER, 136134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis &result); 137134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis EXPECT_EQ(NO_ERROR, err); 138134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis EXPECT_EQ(0, result); 139134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis} 140134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis 141391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie GennisTEST_F(SurfaceTextureClientTest, ConcreteTypeIsSurfaceTextureClient) { 142391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie Gennis int result = -123; 1438b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis int err = mANW->query(mANW.get(), NATIVE_WINDOW_CONCRETE_TYPE, &result); 144391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie Gennis EXPECT_EQ(NO_ERROR, err); 145e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian EXPECT_EQ(NATIVE_WINDOW_SURFACE, result); 146391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie Gennis} 147391bbe2246a7547dbf3460c231b3c5ba691d4eb1Jamie Gennis 1481b528fb9d818044973abf656c9d2d3c1192bcfdcJamie GennisTEST_F(SurfaceTextureClientTest, EglCreateWindowSurfaceSucceeds) { 1495c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLDisplay dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); 1505c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 1515c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis ASSERT_NE(EGL_NO_DISPLAY, dpy); 1525c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 1535c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLint majorVersion; 1545c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLint minorVersion; 1555c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EXPECT_TRUE(eglInitialize(dpy, &majorVersion, &minorVersion)); 1565c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 1575c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 1585c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLConfig myConfig = {0}; 1595c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLint numConfigs = 0; 1605c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGLint configAttribs[] = { 1615c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_SURFACE_TYPE, EGL_WINDOW_BIT, 1625c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, 1635c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_RED_SIZE, 8, 1645c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_GREEN_SIZE, 8, 1655c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_BLUE_SIZE, 8, 1665c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_ALPHA_SIZE, 8, 1675c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_DEPTH_SIZE, 16, 1685c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_STENCIL_SIZE, 8, 1695c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EGL_NONE }; 1705c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis EXPECT_TRUE(eglChooseConfig(dpy, configAttribs, &myConfig, 1, 1715c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis &numConfigs)); 1725c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 1735c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 1748b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EGLSurface eglSurface = eglCreateWindowSurface(dpy, myConfig, mANW.get(), 1755c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis NULL); 176eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian EXPECT_NE(EGL_NO_SURFACE, eglSurface); 177eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian EXPECT_EQ(EGL_SUCCESS, eglGetError()); 1785c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 179fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis if (eglSurface != EGL_NO_SURFACE) { 180fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis eglDestroySurface(dpy, eglSurface); 181fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis } 182fa5b40ebb8923133df12dc70591bfe35b3f1c9b3Jamie Gennis 1835c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis eglTerminate(dpy); 1845c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis} 1855c0c93a8c49b4053744efb8953b915fa7f0923a5Jamie Gennis 186993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias AgopianTEST_F(SurfaceTextureClientTest, EglSwapBuffersAbandonErrorIsEglBadSurface) { 187993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 188993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian EGLSurface eglSurface = eglCreateWindowSurface(mEglDisplay, mEglConfig, mANW.get(), NULL); 189993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian EXPECT_NE(EGL_NO_SURFACE, eglSurface); 190993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian EXPECT_EQ(EGL_SUCCESS, eglGetError()); 191993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 192993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian EGLBoolean success = eglMakeCurrent(mEglDisplay, eglSurface, eglSurface, mEglContext); 193ad669b04f4633957eea55b8ad2d8253adcefe39bJamie Gennis EXPECT_TRUE(success); 194993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 195993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian glClear(GL_COLOR_BUFFER_BIT); 196993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian success = eglSwapBuffers(mEglDisplay, eglSurface); 197ad669b04f4633957eea55b8ad2d8253adcefe39bJamie Gennis EXPECT_TRUE(success); 198993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 199993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian mST->abandon(); 200993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 201993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian glClear(GL_COLOR_BUFFER_BIT); 202993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian success = eglSwapBuffers(mEglDisplay, eglSurface); 203ad669b04f4633957eea55b8ad2d8253adcefe39bJamie Gennis EXPECT_FALSE(success); 204993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian EXPECT_EQ(EGL_BAD_SURFACE, eglGetError()); 205993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 206993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian success = eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface, mEglContext); 207ad669b04f4633957eea55b8ad2d8253adcefe39bJamie Gennis ASSERT_TRUE(success); 208993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 209993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian if (eglSurface != EGL_NO_SURFACE) { 210993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian eglDestroySurface(mEglDisplay, eglSurface); 211993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian } 212993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian} 213993e14fe1085e78b5f5d8b759dd3c757b4327eb4Mathias Agopian 214a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometryInvalidSizesFail) { 215f8cebe54576c8100769e2515d4f67bdd013a6927Dan Stoza EXPECT_GT(OK, native_window_set_buffers_dimensions(mANW.get(), 0, 8)); 216f8cebe54576c8100769e2515d4f67bdd013a6927Dan Stoza EXPECT_GT(OK, native_window_set_buffers_dimensions(mANW.get(), 8, 0)); 217a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 218a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 219a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, DefaultGeometryValues) { 220583b1b32191992d6ada58b3c61c71932a71c0c4bPablo Ceballos ASSERT_EQ(OK, native_window_api_connect(mANW.get(), NATIVE_WINDOW_API_CPU)); 221697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 222d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 223a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->width); 224a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->height); 225a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 226d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 227a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 228a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 229a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometryCanBeSet) { 230583b1b32191992d6ada58b3c61c71932a71c0c4bPablo Ceballos ASSERT_EQ(OK, native_window_api_connect(mANW.get(), NATIVE_WINDOW_API_CPU)); 231697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 232f8cebe54576c8100769e2515d4f67bdd013a6927Dan Stoza EXPECT_EQ(OK, native_window_set_buffers_dimensions(mANW.get(), 16, 8)); 233f8cebe54576c8100769e2515d4f67bdd013a6927Dan Stoza EXPECT_EQ(OK, native_window_set_buffers_format(mANW.get(), PIXEL_FORMAT_RGB_565)); 234d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 235a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 236a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 237a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGB_565, buf->format); 238d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 239a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 240a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 241a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometryDefaultSizeSetFormat) { 242583b1b32191992d6ada58b3c61c71932a71c0c4bPablo Ceballos ASSERT_EQ(OK, native_window_api_connect(mANW.get(), NATIVE_WINDOW_API_CPU)); 243697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 244f8cebe54576c8100769e2515d4f67bdd013a6927Dan Stoza EXPECT_EQ(OK, native_window_set_buffers_dimensions(mANW.get(), 0, 0)); 245f8cebe54576c8100769e2515d4f67bdd013a6927Dan Stoza EXPECT_EQ(OK, native_window_set_buffers_format(mANW.get(), PIXEL_FORMAT_RGB_565)); 246d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 247a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->width); 248a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->height); 249a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGB_565, buf->format); 250d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 251a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 252a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 253a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometrySetSizeDefaultFormat) { 254583b1b32191992d6ada58b3c61c71932a71c0c4bPablo Ceballos ASSERT_EQ(OK, native_window_api_connect(mANW.get(), NATIVE_WINDOW_API_CPU)); 255697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 256f8cebe54576c8100769e2515d4f67bdd013a6927Dan Stoza EXPECT_EQ(OK, native_window_set_buffers_dimensions(mANW.get(), 16, 8)); 257f8cebe54576c8100769e2515d4f67bdd013a6927Dan Stoza EXPECT_EQ(OK, native_window_set_buffers_format(mANW.get(), 0)); 258d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 259a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 260a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 261a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 262d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 263a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 264a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 265a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometrySizeCanBeUnset) { 266583b1b32191992d6ada58b3c61c71932a71c0c4bPablo Ceballos ASSERT_EQ(OK, native_window_api_connect(mANW.get(), NATIVE_WINDOW_API_CPU)); 267697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 268f8cebe54576c8100769e2515d4f67bdd013a6927Dan Stoza EXPECT_EQ(OK, native_window_set_buffers_dimensions(mANW.get(), 16, 8)); 269f8cebe54576c8100769e2515d4f67bdd013a6927Dan Stoza EXPECT_EQ(OK, native_window_set_buffers_format(mANW.get(), 0)); 270d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 271a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 272a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 273a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 274d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 275f8cebe54576c8100769e2515d4f67bdd013a6927Dan Stoza EXPECT_EQ(OK, native_window_set_buffers_dimensions(mANW.get(), 0, 0)); 276f8cebe54576c8100769e2515d4f67bdd013a6927Dan Stoza EXPECT_EQ(OK, native_window_set_buffers_format(mANW.get(), 0)); 277d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 278a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->width); 279a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->height); 280a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 281d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 282a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 283a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 284a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, BufferGeometrySizeCanBeChangedWithoutFormat) { 285583b1b32191992d6ada58b3c61c71932a71c0c4bPablo Ceballos ASSERT_EQ(OK, native_window_api_connect(mANW.get(), NATIVE_WINDOW_API_CPU)); 286697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 287f8cebe54576c8100769e2515d4f67bdd013a6927Dan Stoza EXPECT_EQ(OK, native_window_set_buffers_dimensions(mANW.get(), 0, 0)); 288f8cebe54576c8100769e2515d4f67bdd013a6927Dan Stoza EXPECT_EQ(OK, native_window_set_buffers_format(mANW.get(), PIXEL_FORMAT_RGB_565)); 289d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 290a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->width); 291a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(1, buf->height); 292a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGB_565, buf->format); 293d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 2944697528eac85d34b2b375ece1d4b40aebe3fa5ddJamie Gennis EXPECT_EQ(OK, native_window_set_buffers_dimensions(mANW.get(), 16, 8)); 295d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 296a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 297a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 298a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGB_565, buf->format); 299d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 300a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 301a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 302a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSetDefaultSize) { 303583b1b32191992d6ada58b3c61c71932a71c0c4bPablo Ceballos ASSERT_EQ(OK, native_window_api_connect(mANW.get(), NATIVE_WINDOW_API_CPU)); 3042adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden sp<GLConsumer> st(mST); 305697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf; 306a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(OK, st->setDefaultBufferSize(16, 8)); 307d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 308a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf->width); 309a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf->height); 310a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(PIXEL_FORMAT_RGBA_8888, buf->format); 311d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf, -1)); 312a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 313a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 314a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSetDefaultSizeAfterDequeue) { 315697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf[2]; 316583b1b32191992d6ada58b3c61c71932a71c0c4bPablo Ceballos ASSERT_EQ(OK, native_window_api_connect(mANW.get(), NATIVE_WINDOW_API_CPU)); 3178b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 318d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 319d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 320a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_NE(buf[0], buf[1]); 321d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0], -1)); 322d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1], -1)); 3238b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->setDefaultBufferSize(16, 8)); 324d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 325d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 326a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_NE(buf[0], buf[1]); 327a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf[0]->width); 328a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf[1]->width); 329a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf[0]->height); 330a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf[1]->height); 331d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0], -1)); 332d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1], -1)); 333a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 334a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 335a5c75c01620179ce00812354778a29a80d76e71fMathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSetDefaultSizeVsGeometry) { 336697526bc9e44ce61c88614f98387ae8bbf0a187eIliyan Malchev ANativeWindowBuffer* buf[2]; 337583b1b32191992d6ada58b3c61c71932a71c0c4bPablo Ceballos ASSERT_EQ(OK, native_window_api_connect(mANW.get(), NATIVE_WINDOW_API_CPU)); 3388b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 3398b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->setDefaultBufferSize(16, 8)); 340d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 341d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 342a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_NE(buf[0], buf[1]); 343a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf[0]->width); 344a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(16, buf[1]->width); 345a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf[0]->height); 346a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(8, buf[1]->height); 347d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0], -1)); 348d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1], -1)); 349f8cebe54576c8100769e2515d4f67bdd013a6927Dan Stoza EXPECT_EQ(OK, native_window_set_buffers_dimensions(mANW.get(), 12, 24)); 350f8cebe54576c8100769e2515d4f67bdd013a6927Dan Stoza EXPECT_EQ(OK, native_window_set_buffers_format(mANW.get(), 0)); 351d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 352d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 353a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_NE(buf[0], buf[1]); 354a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(12, buf[0]->width); 355a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(12, buf[1]->width); 356a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(24, buf[0]->height); 357a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian EXPECT_EQ(24, buf[1]->height); 358d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0], -1)); 359d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[1], -1)); 360a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian} 361a5c75c01620179ce00812354778a29a80d76e71fMathias Agopian 3627a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureTooManyUpdateTexImage) { 3637a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 364583b1b32191992d6ada58b3c61c71932a71c0c4bPablo Ceballos ASSERT_EQ(OK, native_window_api_connect(mANW.get(), NATIVE_WINDOW_API_CPU)); 365595264f1af12e25dce57d7c5b1d52ed86ac0d0c9Mathias Agopian ASSERT_EQ(OK, mANW->setSwapInterval(mANW.get(), 0)); 3668b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 3677a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 368d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 369d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 3708b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3718b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3727a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 373595264f1af12e25dce57d7c5b1d52ed86ac0d0c9Mathias Agopian ASSERT_EQ(OK, mANW->setSwapInterval(mANW.get(), 1)); 3748b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 3757a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 376d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 377d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 378d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 379d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 3807a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3818b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3828b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3838b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 3847a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 3857a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 3867a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSyncModeSlowRetire) { 3877a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 388583b1b32191992d6ada58b3c61c71932a71c0c4bPablo Ceballos ASSERT_EQ(OK, native_window_api_connect(mANW.get(), NATIVE_WINDOW_API_CPU)); 3898b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 390d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 391d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 392d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 3937a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[0], buf[1]); 3947a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[1], buf[2]); 3957a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[2], buf[0]); 396d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 397d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 398d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2], -1)); 3998b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4008b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[0]); 4018b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4028b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[1]); 4038b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4048b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[2]); 4057a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 4067a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4077a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSyncModeFastRetire) { 4087a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 409583b1b32191992d6ada58b3c61c71932a71c0c4bPablo Ceballos ASSERT_EQ(OK, native_window_api_connect(mANW.get(), NATIVE_WINDOW_API_CPU)); 4108b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 411d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 412d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 413d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 4147a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[0], buf[1]); 4157a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[1], buf[2]); 4167a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[2], buf[0]); 417d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 4188b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4198b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[0]); 420d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 4218b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4228b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[1]); 423d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2], -1)); 4248b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4258b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[2]); 4267a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 4277a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4287a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSyncModeDQQR) { 4297a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 430583b1b32191992d6ada58b3c61c71932a71c0c4bPablo Ceballos ASSERT_EQ(OK, native_window_api_connect(mANW.get(), NATIVE_WINDOW_API_CPU)); 4318b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 432d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 433d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 4348b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4358b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[0]); 4367a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 437d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 4387a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[0], buf[1]); 439d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 4408b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4418b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[1]); 4427a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 443d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 4447a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[1], buf[2]); 445d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2], -1)); 4468b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4478b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[2]); 4487a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 4497a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4508cd5ba4b7f01d3a54a8f8bc6d1793aa5fc8e09efJamie Gennis// XXX: We currently have no hardware that properly handles dequeuing the 4518cd5ba4b7f01d3a54a8f8bc6d1793aa5fc8e09efJamie Gennis// buffer that is currently bound to the texture. 4528cd5ba4b7f01d3a54a8f8bc6d1793aa5fc8e09efJamie GennisTEST_F(SurfaceTextureClientTest, DISABLED_SurfaceTextureSyncModeDequeueCurrent) { 4537a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 4547a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* firstBuf; 455583b1b32191992d6ada58b3c61c71932a71c0c4bPablo Ceballos ASSERT_EQ(OK, native_window_api_connect(mANW.get(), NATIVE_WINDOW_API_CPU)); 4568b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 457d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &firstBuf)); 458d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), firstBuf, -1)); 4598b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4608b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), firstBuf); 461d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 462d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 463d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 464d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 465d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 466d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2], -1)); 4677a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[0], buf[1]); 4687a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[1], buf[2]); 4697a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_NE(buf[2], buf[0]); 4707a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_EQ(firstBuf, buf[2]); 4717a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 4727a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4737a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias AgopianTEST_F(SurfaceTextureClientTest, SurfaceTextureSyncModeMinUndequeued) { 4747a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 475583b1b32191992d6ada58b3c61c71932a71c0c4bPablo Ceballos ASSERT_EQ(OK, native_window_api_connect(mANW.get(), NATIVE_WINDOW_API_CPU)); 4768b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 477c2c8dfd71b84598f01074416e57cc3469d5b8ed2Jamie Gennis 4788b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis // We should be able to dequeue all the buffers before we've queued mANWy. 479d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis EXPECT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 480d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis EXPECT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 481d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis EXPECT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 4827a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 483d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[2], -1)); 484d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 4857a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 4868b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(OK, mST->updateTexImage()); 4878b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis EXPECT_EQ(mST->getCurrentBuffer().get(), buf[1]); 4887a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 489d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis EXPECT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 4907a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 491c2c8dfd71b84598f01074416e57cc3469d5b8ed2Jamie Gennis // Once we've queued a buffer, however we should not be able to dequeue more 492c2c8dfd71b84598f01074416e57cc3469d5b8ed2Jamie Gennis // than (buffer-count - MIN_UNDEQUEUED_BUFFERS), which is 2 in this case. 493f8cebe54576c8100769e2515d4f67bdd013a6927Dan Stoza EXPECT_EQ(INVALID_OPERATION, 494f8cebe54576c8100769e2515d4f67bdd013a6927Dan Stoza native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 495c2c8dfd71b84598f01074416e57cc3469d5b8ed2Jamie Gennis 496d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[0], -1)); 497d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->cancelBuffer(mANW.get(), buf[2], -1)); 4987a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 4997a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 500d72f233ffa125856a44976a50a66ceb669f49ab2Jamie GennisTEST_F(SurfaceTextureClientTest, SetCropCropsCrop) { 501583b1b32191992d6ada58b3c61c71932a71c0c4bPablo Ceballos ASSERT_EQ(OK, native_window_api_connect(mANW.get(), NATIVE_WINDOW_API_CPU)); 502d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis android_native_rect_t rect = {-2, -13, 40, 18}; 503d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis native_window_set_crop(mANW.get(), &rect); 504d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 505d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis ASSERT_EQ(OK, native_window_set_buffers_dimensions(mANW.get(), 4, 4)); 506d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 507d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis android_native_buffer_t* buf; 508d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf)); 509d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf, -1)); 510d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 511d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 512d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis Rect crop = mST->getCurrentCrop(); 513d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(0, crop.left); 514d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(0, crop.top); 515d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(4, crop.right); 516d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis EXPECT_EQ(4, crop.bottom); 517d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis} 518d72f233ffa125856a44976a50a66ceb669f49ab2Jamie Gennis 5198dda6b7bf8f6e30cee286a6c048f1cc2adfa3a94Jamie Gennis// XXX: This is not expected to pass until the synchronization hacks are removed 5208dda6b7bf8f6e30cee286a6c048f1cc2adfa3a94Jamie Gennis// from the SurfaceTexture class. 5218dda6b7bf8f6e30cee286a6c048f1cc2adfa3a94Jamie GennisTEST_F(SurfaceTextureClientTest, DISABLED_SurfaceTextureSyncModeWaitRetire) { 5227a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian class MyThread : public Thread { 5232adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden sp<GLConsumer> mST; 5247a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLContext ctx; 5257a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLSurface sur; 5267a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EGLDisplay dpy; 5277a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian bool mBufferRetired; 5287a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian Mutex mLock; 5297a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian virtual bool threadLoop() { 5307a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, sur, sur, ctx); 5317a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian usleep(20000); 5327a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian Mutex::Autolock _l(mLock); 5338b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->updateTexImage(); 5347a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian mBufferRetired = true; 5357a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); 5367a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian return false; 5377a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 5387a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian public: 539d9cdadb38229e84f83c56ff2fe195a6a6ef535c3Chih-Hung Hsieh explicit MyThread(const sp<GLConsumer>& mST) 5408b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis : mST(mST), mBufferRetired(false) { 5417a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ctx = eglGetCurrentContext(); 5427a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian sur = eglGetCurrentSurface(EGL_DRAW); 5437a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian dpy = eglGetCurrentDisplay(); 5447a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); 5457a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 5467a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian ~MyThread() { 5477a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian eglMakeCurrent(dpy, sur, sur, ctx); 5487a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 5497a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian void bufferDequeued() { 5507a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian Mutex::Autolock _l(mLock); 5517a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian EXPECT_EQ(true, mBufferRetired); 5527a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian } 5537a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian }; 5547a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 5557a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian android_native_buffer_t* buf[3]; 556583b1b32191992d6ada58b3c61c71932a71c0c4bPablo Ceballos ASSERT_EQ(OK, native_window_api_connect(mANW.get(), NATIVE_WINDOW_API_CPU)); 5578b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 3)); 5587a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian // dequeue/queue/update so we have a current buffer 559d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 560d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 5618b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->updateTexImage(); 5627a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 5638b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis MyThread* thread = new MyThread(mST); 5647a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian sp<Thread> threadBase(thread); 5657a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 566d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 567d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 56883b1e685d252e589fa4a2e7e54c1f416aca63043Brian Carlstrom thread->run("MyThread"); 569d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[1])); 570d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[1], -1)); 571d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis //ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[2])); 572d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis //ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[2], -1)); 5737a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian thread->bufferDequeued(); 5747a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian thread->requestExitAndWait(); 5757a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian} 5767a5b22c4e33928f81c2e8a3d85050c35bd44b1e0Mathias Agopian 57752226048095c2eb27ede0c3389626df270a0abffJamie GennisTEST_F(SurfaceTextureClientTest, GetTransformMatrixReturnsVerticalFlip) { 57852226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_buffer_t* buf[3]; 57952226048095c2eb27ede0c3389626df270a0abffJamie Gennis float mtx[16] = {}; 580583b1b32191992d6ada58b3c61c71932a71c0c4bPablo Ceballos ASSERT_EQ(OK, native_window_api_connect(mANW.get(), NATIVE_WINDOW_API_CPU)); 5818b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 582d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 583d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 5848b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 5858b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->getTransformMatrix(mtx); 58652226048095c2eb27ede0c3389626df270a0abffJamie Gennis 58752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[0]); 58852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[1]); 58952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[2]); 59052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[3]); 59152226048095c2eb27ede0c3389626df270a0abffJamie Gennis 59252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[4]); 59352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(-1.f, mtx[5]); 59452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[6]); 59552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[7]); 59652226048095c2eb27ede0c3389626df270a0abffJamie Gennis 59752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[8]); 59852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[9]); 59952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[10]); 60052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[11]); 60152226048095c2eb27ede0c3389626df270a0abffJamie Gennis 60252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[12]); 60352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[13]); 60452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[14]); 60552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[15]); 60652226048095c2eb27ede0c3389626df270a0abffJamie Gennis} 60752226048095c2eb27ede0c3389626df270a0abffJamie Gennis 60852226048095c2eb27ede0c3389626df270a0abffJamie GennisTEST_F(SurfaceTextureClientTest, GetTransformMatrixSucceedsAfterFreeingBuffers) { 60952226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_buffer_t* buf[3]; 61052226048095c2eb27ede0c3389626df270a0abffJamie Gennis float mtx[16] = {}; 611583b1b32191992d6ada58b3c61c71932a71c0c4bPablo Ceballos ASSERT_EQ(OK, native_window_api_connect(mANW.get(), NATIVE_WINDOW_API_CPU)); 6128b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 613d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 614d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 6158b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 6168b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 6)); // frees buffers 6178b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->getTransformMatrix(mtx); 61852226048095c2eb27ede0c3389626df270a0abffJamie Gennis 61952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[0]); 62052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[1]); 62152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[2]); 62252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[3]); 62352226048095c2eb27ede0c3389626df270a0abffJamie Gennis 62452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[4]); 62552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(-1.f, mtx[5]); 62652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[6]); 62752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[7]); 62852226048095c2eb27ede0c3389626df270a0abffJamie Gennis 62952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[8]); 63052226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[9]); 63152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[10]); 63252226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[11]); 63352226048095c2eb27ede0c3389626df270a0abffJamie Gennis 63452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[12]); 63552226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[13]); 63652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[14]); 63752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[15]); 63852226048095c2eb27ede0c3389626df270a0abffJamie Gennis} 63952226048095c2eb27ede0c3389626df270a0abffJamie Gennis 64052226048095c2eb27ede0c3389626df270a0abffJamie GennisTEST_F(SurfaceTextureClientTest, GetTransformMatrixSucceedsAfterFreeingBuffersWithCrop) { 64104b00cea67b406c4a971b24b9f91e95c754813edMichael Lentine // Query to see if the image crop extension exists 64204b00cea67b406c4a971b24b9f91e95c754813edMichael Lentine EGLDisplay dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); 64304b00cea67b406c4a971b24b9f91e95c754813edMichael Lentine const char* exts = eglQueryStringImplementationANDROID(dpy, EGL_EXTENSIONS); 64404b00cea67b406c4a971b24b9f91e95c754813edMichael Lentine size_t cropExtLen = strlen(CROP_EXT_STR); 64504b00cea67b406c4a971b24b9f91e95c754813edMichael Lentine size_t extsLen = strlen(exts); 64604b00cea67b406c4a971b24b9f91e95c754813edMichael Lentine bool equal = !strcmp(CROP_EXT_STR, exts); 64704b00cea67b406c4a971b24b9f91e95c754813edMichael Lentine bool atStart = !strncmp(CROP_EXT_STR " ", exts, cropExtLen+1); 64804b00cea67b406c4a971b24b9f91e95c754813edMichael Lentine bool atEnd = (cropExtLen+1) < extsLen && 64904b00cea67b406c4a971b24b9f91e95c754813edMichael Lentine !strcmp(" " CROP_EXT_STR, exts + extsLen - (cropExtLen+1)); 65004b00cea67b406c4a971b24b9f91e95c754813edMichael Lentine bool inMiddle = strstr(exts, " " CROP_EXT_STR " "); 65104b00cea67b406c4a971b24b9f91e95c754813edMichael Lentine bool hasEglAndroidImageCrop = equal || atStart || atEnd || inMiddle; 65204b00cea67b406c4a971b24b9f91e95c754813edMichael Lentine 65352226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_buffer_t* buf[3]; 65452226048095c2eb27ede0c3389626df270a0abffJamie Gennis float mtx[16] = {}; 65552226048095c2eb27ede0c3389626df270a0abffJamie Gennis android_native_rect_t crop; 65652226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.left = 0; 65752226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.top = 0; 65852226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.right = 5; 65952226048095c2eb27ede0c3389626df270a0abffJamie Gennis crop.bottom = 5; 66052226048095c2eb27ede0c3389626df270a0abffJamie Gennis 661583b1b32191992d6ada58b3c61c71932a71c0c4bPablo Ceballos ASSERT_EQ(OK, native_window_api_connect(mANW.get(), NATIVE_WINDOW_API_CPU)); 6628b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 4)); 663f8cebe54576c8100769e2515d4f67bdd013a6927Dan Stoza ASSERT_EQ(OK, native_window_set_buffers_dimensions(mANW.get(), 8, 8)); 664f8cebe54576c8100769e2515d4f67bdd013a6927Dan Stoza ASSERT_EQ(OK, native_window_set_buffers_format(mANW.get(), 0)); 665d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, native_window_dequeue_buffer_and_wait(mANW.get(), &buf[0])); 6668b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_crop(mANW.get(), &crop)); 667d8e812ce6fe9ae0388e98b08456e1d18b9498239Jamie Gennis ASSERT_EQ(OK, mANW->queueBuffer(mANW.get(), buf[0], -1)); 6688b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, mST->updateTexImage()); 6698b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis ASSERT_EQ(OK, native_window_set_buffer_count(mANW.get(), 6)); // frees buffers 6708b69defa2fe2cf6a34b00e322a557d8a4dddea41Jamie Gennis mST->getTransformMatrix(mtx); 67152226048095c2eb27ede0c3389626df270a0abffJamie Gennis 67204b00cea67b406c4a971b24b9f91e95c754813edMichael Lentine // If the egl image crop extension is not present, this accounts for the 67304b00cea67b406c4a971b24b9f91e95c754813edMichael Lentine // .5 texel shrink for each edge that's included in the transform matrix 67404b00cea67b406c4a971b24b9f91e95c754813edMichael Lentine // to avoid texturing outside the crop region. Otherwise the crop is not 67504b00cea67b406c4a971b24b9f91e95c754813edMichael Lentine // included in the transform matrix. 67604b00cea67b406c4a971b24b9f91e95c754813edMichael Lentine EXPECT_EQ(hasEglAndroidImageCrop ? 1 : 0.5, mtx[0]); 67752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[1]); 67852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[2]); 67952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[3]); 68052226048095c2eb27ede0c3389626df270a0abffJamie Gennis 68152226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[4]); 68204b00cea67b406c4a971b24b9f91e95c754813edMichael Lentine EXPECT_EQ(hasEglAndroidImageCrop ? -1 : -0.5, mtx[5]); 68352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[6]); 68452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[7]); 68552226048095c2eb27ede0c3389626df270a0abffJamie Gennis 68652226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[8]); 68752226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[9]); 68852226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[10]); 68952226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[11]); 69052226048095c2eb27ede0c3389626df270a0abffJamie Gennis 69104b00cea67b406c4a971b24b9f91e95c754813edMichael Lentine EXPECT_EQ(hasEglAndroidImageCrop ? 0 : 0.0625f, mtx[12]); 69204b00cea67b406c4a971b24b9f91e95c754813edMichael Lentine EXPECT_EQ(hasEglAndroidImageCrop ? 1 : 0.5625f, mtx[13]); 69352226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(0.f, mtx[14]); 69452226048095c2eb27ede0c3389626df270a0abffJamie Gennis EXPECT_EQ(1.f, mtx[15]); 695134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis} 69652226048095c2eb27ede0c3389626df270a0abffJamie Gennis 697a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis// This test verifies that the buffer format can be queried immediately after 698a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis// it is set. 69907ed1a94bcad9b78b20f74f890d4271099da3a97Jamie GennisTEST_F(SurfaceTextureClientTest, QueryFormatAfterSettingWorks) { 700a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis sp<ANativeWindow> anw(mSTC); 701a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis int fmts[] = { 702a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis // RGBA_8888 should not come first, as it's the default 703a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGBX_8888, 704a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGBA_8888, 705a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGB_888, 706a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_RGB_565, 707a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_BGRA_8888, 708a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis HAL_PIXEL_FORMAT_YV12, 709a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis }; 710a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis 711a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis const int numFmts = (sizeof(fmts) / sizeof(fmts[0])); 712a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis for (int i = 0; i < numFmts; i++) { 713a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis int fmt = -1; 714f8cebe54576c8100769e2515d4f67bdd013a6927Dan Stoza ASSERT_EQ(OK, native_window_set_buffers_dimensions(anw.get(), 0, 0)); 715f8cebe54576c8100769e2515d4f67bdd013a6927Dan Stoza ASSERT_EQ(OK, native_window_set_buffers_format(anw.get(), fmts[i])); 716a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis ASSERT_EQ(OK, anw->query(anw.get(), NATIVE_WINDOW_FORMAT, &fmt)); 717a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis EXPECT_EQ(fmts[i], fmt); 718a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis } 719a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis} 720a6f35dd36e974c67976c6b4411c31b61f30a3853Jamie Gennis 721c8251a06df70de70d45ac477af816dcee7580205Jamie Gennisclass MultiSurfaceTextureClientTest : public ::testing::Test { 722c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 723c8251a06df70de70d45ac477af816dcee7580205Jamie Gennispublic: 724c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis MultiSurfaceTextureClientTest() : 725c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglDisplay(EGL_NO_DISPLAY), 726c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglContext(EGL_NO_CONTEXT) { 727c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int i = 0; i < NUM_SURFACE_TEXTURES; i++) { 728c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglSurfaces[i] = EGL_NO_CONTEXT; 729c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 730c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 731c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 732c8251a06df70de70d45ac477af816dcee7580205Jamie Gennisprotected: 733c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 734c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis enum { NUM_SURFACE_TEXTURES = 32 }; 735c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 736c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis virtual void SetUp() { 737c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); 738c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 739c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_NE(EGL_NO_DISPLAY, mEglDisplay); 740c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 741c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLint majorVersion, minorVersion; 742c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EXPECT_TRUE(eglInitialize(mEglDisplay, &majorVersion, &minorVersion)); 743c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 744c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 745c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLConfig myConfig; 746c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLint numConfigs = 0; 747c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLint configAttribs[] = { 748c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGL_SURFACE_TYPE, EGL_WINDOW_BIT, 749c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGL_NONE 750c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis }; 751c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EXPECT_TRUE(eglChooseConfig(mEglDisplay, configAttribs, &myConfig, 1, 752c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis &numConfigs)); 753c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 754c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 755c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglContext = eglCreateContext(mEglDisplay, myConfig, EGL_NO_CONTEXT, 756c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 0); 757c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 758c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_NE(EGL_NO_CONTEXT, mEglContext); 759c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 760c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int i = 0; i < NUM_SURFACE_TEXTURES; i++) { 7615603a2fbbd1aae74c4635e2f600819fb05d112e0Dan Stoza sp<IGraphicBufferProducer> producer; 7625603a2fbbd1aae74c4635e2f600819fb05d112e0Dan Stoza sp<IGraphicBufferConsumer> consumer; 7635603a2fbbd1aae74c4635e2f600819fb05d112e0Dan Stoza BufferQueue::createBufferQueue(&producer, &consumer); 764e49ba8e2ed8e17156eb00c8fc8e2285df62bc018Dan Stoza sp<GLConsumer> st(new GLConsumer(consumer, i, 765e49ba8e2ed8e17156eb00c8fc8e2285df62bc018Dan Stoza GLConsumer::TEXTURE_EXTERNAL, true, false)); 7665603a2fbbd1aae74c4635e2f600819fb05d112e0Dan Stoza sp<Surface> stc(new Surface(producer)); 767c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglSurfaces[i] = eglCreateWindowSurface(mEglDisplay, myConfig, 768c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis static_cast<ANativeWindow*>(stc.get()), NULL); 769c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_EQ(EGL_SUCCESS, eglGetError()); 770c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis ASSERT_NE(EGL_NO_SURFACE, mEglSurfaces[i]); 771c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 772c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 773c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 774c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis virtual void TearDown() { 775c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, 776c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGL_NO_CONTEXT); 777c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 778c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int i = 0; i < NUM_SURFACE_TEXTURES; i++) { 779c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis if (mEglSurfaces[i] != EGL_NO_SURFACE) { 780c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglDestroySurface(mEglDisplay, mEglSurfaces[i]); 781c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 782c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 783c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 784c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis if (mEglContext != EGL_NO_CONTEXT) { 785c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglDestroyContext(mEglDisplay, mEglContext); 786c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 787c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 788c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis if (mEglDisplay != EGL_NO_DISPLAY) { 789c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglTerminate(mEglDisplay); 790c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 791c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 792c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 793c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLDisplay mEglDisplay; 794c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLSurface mEglSurfaces[NUM_SURFACE_TEXTURES]; 795c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis EGLContext mEglContext; 796c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis}; 797c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 798c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis// XXX: This test is disabled because it causes a hang on some devices. See bug 799c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis// 5015672. 800c8251a06df70de70d45ac477af816dcee7580205Jamie GennisTEST_F(MultiSurfaceTextureClientTest, DISABLED_MakeCurrentBetweenSurfacesWorks) { 801c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int iter = 0; iter < 8; iter++) { 802c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis for (int i = 0; i < NUM_SURFACE_TEXTURES; i++) { 803c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglMakeCurrent(mEglDisplay, mEglSurfaces[i], mEglSurfaces[i], 804c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis mEglContext); 805c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis glClear(GL_COLOR_BUFFER_BIT); 806c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis eglSwapBuffers(mEglDisplay, mEglSurfaces[i]); 807c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 808c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis } 809c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis} 810c8251a06df70de70d45ac477af816dcee7580205Jamie Gennis 81152226048095c2eb27ede0c3389626df270a0abffJamie Gennis} // namespace android 812