Added a test to confirm that the transform hint is being respected.

Bug: 7162482
Change-Id: I892fe962f8cf2759ff951b4f5065b9ac2732c3d1
This commit is contained in:
Andy McFadden 2012-09-14 17:21:46 -07:00
parent 6905205c8d
commit 71f683ac8d
1 changed files with 53 additions and 0 deletions

View File

@ -1414,6 +1414,59 @@ protected:
EGLContext mProducerEglContext;
};
TEST_F(SurfaceTextureGLToGLTest, TransformHintGetsRespected) {
const uint32_t texWidth = 32;
const uint32_t texHeight = 64;
mST->setDefaultBufferSize(texWidth, texHeight);
mST->setTransformHint(NATIVE_WINDOW_TRANSFORM_ROT_90);
// This test requires 3 buffers to avoid deadlock because we're
// both producer and consumer, and only using one thread.
mST->setDefaultMaxBufferCount(3);
// Do the producer side of things
EXPECT_TRUE(eglMakeCurrent(mEglDisplay, mProducerEglSurface,
mProducerEglSurface, mProducerEglContext));
ASSERT_EQ(EGL_SUCCESS, eglGetError());
// Start a buffer with our chosen size and transform hint moving
// through the system.
glClear(GL_COLOR_BUFFER_BIT); // give the driver something to do
eglSwapBuffers(mEglDisplay, mProducerEglSurface);
mST->updateTexImage(); // consume it
// Swap again.
glClear(GL_COLOR_BUFFER_BIT);
eglSwapBuffers(mEglDisplay, mProducerEglSurface);
mST->updateTexImage();
// The current buffer should either show the effects of the transform
// hint (in the form of an inverse transform), or show that the
// transform hint has been ignored.
sp<GraphicBuffer> buf = mST->getCurrentBuffer();
if (mST->getCurrentTransform() == NATIVE_WINDOW_TRANSFORM_ROT_270) {
ASSERT_EQ(texWidth, buf->getHeight());
ASSERT_EQ(texHeight, buf->getWidth());
} else {
ASSERT_EQ(texWidth, buf->getWidth());
ASSERT_EQ(texHeight, buf->getHeight());
}
// Reset the transform hint and confirm that it takes.
mST->setTransformHint(0);
glClear(GL_COLOR_BUFFER_BIT);
eglSwapBuffers(mEglDisplay, mProducerEglSurface);
mST->updateTexImage();
glClear(GL_COLOR_BUFFER_BIT);
eglSwapBuffers(mEglDisplay, mProducerEglSurface);
mST->updateTexImage();
buf = mST->getCurrentBuffer();
ASSERT_EQ((uint32_t) 0, mST->getCurrentTransform());
ASSERT_EQ(texWidth, buf->getWidth());
ASSERT_EQ(texHeight, buf->getHeight());
}
TEST_F(SurfaceTextureGLToGLTest, TexturingFromGLFilledRGBABufferPow2) {
const int texWidth = 64;
const int texHeight = 64;