Hash :
857880e5
Author :
Date :
2019-05-27T13:39:15
GL: Add extensions to enable hardware video decode on Android. The Android SurfaceTexture API has to be initialized with a texture id which Chrome has to query from an ANGLE external texture. It also rebinds and sets the texture dimensions on calls to SurfaceTexture.updateTexImage so ANGLE must be notified about these changes so that state tracking and validation continue to function. BUG=967410 Change-Id: I92e9077f75835b088da3a8caffb3ff40e9ad0361 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1630293 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
//
// Copyright The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// TextureExternalUpdateTest.cpp: Tests for GL_ANGLE_texture_external_update
#include "test_utils/ANGLETest.h"
#include "test_utils/gl_raii.h"
namespace angle
{
class TextureExternalUpdateTest : public ANGLETest
{};
// Test basic usage of glInvalidateTextureANGLE
TEST_P(TextureExternalUpdateTest, Invalidate)
{
ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_ANGLE_texture_external_update"));
glInvalidateTextureANGLE(GL_TEXTURE_2D);
EXPECT_GL_NO_ERROR();
glInvalidateTextureANGLE(GL_TEXTURE_EXTERNAL_OES);
if (EnsureGLExtensionEnabled("GL_OES_EGL_image_external"))
{
EXPECT_GL_NO_ERROR();
}
else
{
EXPECT_GL_ERROR(GL_INVALID_ENUM);
}
}
// Test basic usage of glTexImage2DExternalANGLE
TEST_P(TextureExternalUpdateTest, TexImage2DExternal)
{
ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_ANGLE_texture_external_update"));
GLenum bindingPoint = GL_TEXTURE_2D;
if (EnsureGLExtensionEnabled("GL_OES_EGL_image_external"))
{
// If external textures are available, try calling glTexImage2DExternalANGLE on them instead
// because it would be disallowed for regular glTexImage2D calls.
bindingPoint = GL_TEXTURE_EXTERNAL_OES;
}
GLTexture texture;
glBindTexture(bindingPoint, texture);
glTexImage2DExternalANGLE(bindingPoint, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE);
EXPECT_GL_NO_ERROR();
// No data to verify because the texture has not actually been modified externally
}
// Test the native ID query
TEST_P(TextureExternalUpdateTest, NativeID)
{
ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_ANGLE_texture_external_update"));
GLTexture texture;
glBindTexture(GL_TEXTURE_2D, texture);
GLint nativeId = 0;
glGetTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_NATIVE_ID_ANGLE, &nativeId);
EXPECT_GL_NO_ERROR();
EXPECT_NE(0, nativeId);
}
// Use this to select which configurations (e.g. which renderer, which GLES major version) these
// tests should be run against.
ANGLE_INSTANTIATE_TEST(TextureExternalUpdateTest,
ES2_D3D9(),
ES2_D3D11(),
ES3_D3D11(),
ES2_OPENGL(),
ES3_OPENGL(),
ES2_OPENGLES(),
ES3_OPENGLES(),
ES2_VULKAN());
} // namespace angle