xref: /aosp_15_r20/external/angle/src/tests/gl_tests/TextureExternalUpdateTest.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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