1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2019 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker
7*8975f5c5SAndroid Build Coastguard Worker // TextureExternalUpdateTest.cpp: Tests for GL_ANGLE_texture_external_update
8*8975f5c5SAndroid Build Coastguard Worker
9*8975f5c5SAndroid Build Coastguard Worker #include "test_utils/ANGLETest.h"
10*8975f5c5SAndroid Build Coastguard Worker #include "test_utils/gl_raii.h"
11*8975f5c5SAndroid Build Coastguard Worker
12*8975f5c5SAndroid Build Coastguard Worker namespace angle
13*8975f5c5SAndroid Build Coastguard Worker {
14*8975f5c5SAndroid Build Coastguard Worker
15*8975f5c5SAndroid Build Coastguard Worker class TextureExternalUpdateTest : public ANGLETest<>
16*8975f5c5SAndroid Build Coastguard Worker {};
17*8975f5c5SAndroid Build Coastguard Worker
18*8975f5c5SAndroid Build Coastguard Worker // Test basic usage of glInvalidateTextureANGLE
TEST_P(TextureExternalUpdateTest,Invalidate)19*8975f5c5SAndroid Build Coastguard Worker TEST_P(TextureExternalUpdateTest, Invalidate)
20*8975f5c5SAndroid Build Coastguard Worker {
21*8975f5c5SAndroid Build Coastguard Worker ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_ANGLE_texture_external_update"));
22*8975f5c5SAndroid Build Coastguard Worker
23*8975f5c5SAndroid Build Coastguard Worker glInvalidateTextureANGLE(GL_TEXTURE_2D);
24*8975f5c5SAndroid Build Coastguard Worker EXPECT_GL_NO_ERROR();
25*8975f5c5SAndroid Build Coastguard Worker
26*8975f5c5SAndroid Build Coastguard Worker glInvalidateTextureANGLE(GL_TEXTURE_EXTERNAL_OES);
27*8975f5c5SAndroid Build Coastguard Worker if (EnsureGLExtensionEnabled("GL_OES_EGL_image_external"))
28*8975f5c5SAndroid Build Coastguard Worker {
29*8975f5c5SAndroid Build Coastguard Worker EXPECT_GL_NO_ERROR();
30*8975f5c5SAndroid Build Coastguard Worker }
31*8975f5c5SAndroid Build Coastguard Worker else
32*8975f5c5SAndroid Build Coastguard Worker {
33*8975f5c5SAndroid Build Coastguard Worker EXPECT_GL_ERROR(GL_INVALID_ENUM);
34*8975f5c5SAndroid Build Coastguard Worker }
35*8975f5c5SAndroid Build Coastguard Worker }
36*8975f5c5SAndroid Build Coastguard Worker
37*8975f5c5SAndroid Build Coastguard Worker // Test basic usage of glTexImage2DExternalANGLE
TEST_P(TextureExternalUpdateTest,TexImage2DExternal)38*8975f5c5SAndroid Build Coastguard Worker TEST_P(TextureExternalUpdateTest, TexImage2DExternal)
39*8975f5c5SAndroid Build Coastguard Worker {
40*8975f5c5SAndroid Build Coastguard Worker ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_ANGLE_texture_external_update"));
41*8975f5c5SAndroid Build Coastguard Worker
42*8975f5c5SAndroid Build Coastguard Worker GLenum bindingPoint = GL_TEXTURE_2D;
43*8975f5c5SAndroid Build Coastguard Worker if (EnsureGLExtensionEnabled("GL_OES_EGL_image_external"))
44*8975f5c5SAndroid Build Coastguard Worker {
45*8975f5c5SAndroid Build Coastguard Worker // If external textures are available, try calling glTexImage2DExternalANGLE on them instead
46*8975f5c5SAndroid Build Coastguard Worker // because it would be disallowed for regular glTexImage2D calls.
47*8975f5c5SAndroid Build Coastguard Worker bindingPoint = GL_TEXTURE_EXTERNAL_OES;
48*8975f5c5SAndroid Build Coastguard Worker }
49*8975f5c5SAndroid Build Coastguard Worker
50*8975f5c5SAndroid Build Coastguard Worker GLTexture texture;
51*8975f5c5SAndroid Build Coastguard Worker glBindTexture(bindingPoint, texture);
52*8975f5c5SAndroid Build Coastguard Worker
53*8975f5c5SAndroid Build Coastguard Worker glTexImage2DExternalANGLE(bindingPoint, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE);
54*8975f5c5SAndroid Build Coastguard Worker EXPECT_GL_NO_ERROR();
55*8975f5c5SAndroid Build Coastguard Worker
56*8975f5c5SAndroid Build Coastguard Worker // No data to verify because the texture has not actually been modified externally
57*8975f5c5SAndroid Build Coastguard Worker }
58*8975f5c5SAndroid Build Coastguard Worker
59*8975f5c5SAndroid Build Coastguard Worker // Test the native ID query
TEST_P(TextureExternalUpdateTest,NativeID)60*8975f5c5SAndroid Build Coastguard Worker TEST_P(TextureExternalUpdateTest, NativeID)
61*8975f5c5SAndroid Build Coastguard Worker {
62*8975f5c5SAndroid Build Coastguard Worker ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_ANGLE_texture_external_update"));
63*8975f5c5SAndroid Build Coastguard Worker
64*8975f5c5SAndroid Build Coastguard Worker GLTexture texture;
65*8975f5c5SAndroid Build Coastguard Worker glBindTexture(GL_TEXTURE_2D, texture);
66*8975f5c5SAndroid Build Coastguard Worker
67*8975f5c5SAndroid Build Coastguard Worker GLint nativeId = 0;
68*8975f5c5SAndroid Build Coastguard Worker glGetTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_NATIVE_ID_ANGLE, &nativeId);
69*8975f5c5SAndroid Build Coastguard Worker EXPECT_GL_NO_ERROR();
70*8975f5c5SAndroid Build Coastguard Worker EXPECT_NE(0, nativeId);
71*8975f5c5SAndroid Build Coastguard Worker }
72*8975f5c5SAndroid Build Coastguard Worker
73*8975f5c5SAndroid Build Coastguard Worker // Use this to select which configurations (e.g. which renderer, which GLES major version) these
74*8975f5c5SAndroid Build Coastguard Worker // tests should be run against.
75*8975f5c5SAndroid Build Coastguard Worker ANGLE_INSTANTIATE_TEST_ES2_AND_ES3(TextureExternalUpdateTest);
76*8975f5c5SAndroid Build Coastguard Worker
77*8975f5c5SAndroid Build Coastguard Worker } // namespace angle
78