xref: /aosp_15_r20/external/angle/src/tests/egl_tests/EGLSurfacelessContextTest.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2017 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 // EGLSurfacelessContextTest.cpp:
8*8975f5c5SAndroid Build Coastguard Worker //   Tests for the EGL_KHR_surfaceless_context and GL_OES_surfaceless_context
9*8975f5c5SAndroid Build Coastguard Worker 
10*8975f5c5SAndroid Build Coastguard Worker #include <gtest/gtest.h>
11*8975f5c5SAndroid Build Coastguard Worker 
12*8975f5c5SAndroid Build Coastguard Worker #include "test_utils/ANGLETest.h"
13*8975f5c5SAndroid Build Coastguard Worker #include "test_utils/angle_test_configs.h"
14*8975f5c5SAndroid Build Coastguard Worker #include "test_utils/gl_raii.h"
15*8975f5c5SAndroid Build Coastguard Worker 
16*8975f5c5SAndroid Build Coastguard Worker using namespace angle;
17*8975f5c5SAndroid Build Coastguard Worker 
18*8975f5c5SAndroid Build Coastguard Worker namespace
19*8975f5c5SAndroid Build Coastguard Worker {
20*8975f5c5SAndroid Build Coastguard Worker 
21*8975f5c5SAndroid Build Coastguard Worker class EGLSurfacelessContextTest : public ANGLETest<>
22*8975f5c5SAndroid Build Coastguard Worker {
23*8975f5c5SAndroid Build Coastguard Worker   public:
EGLSurfacelessContextTest()24*8975f5c5SAndroid Build Coastguard Worker     EGLSurfacelessContextTest() : mDisplay(0) {}
25*8975f5c5SAndroid Build Coastguard Worker 
testSetUp()26*8975f5c5SAndroid Build Coastguard Worker     void testSetUp() override
27*8975f5c5SAndroid Build Coastguard Worker     {
28*8975f5c5SAndroid Build Coastguard Worker         EGLAttrib dispattrs[3] = {EGL_PLATFORM_ANGLE_TYPE_ANGLE, GetParam().getRenderer(),
29*8975f5c5SAndroid Build Coastguard Worker                                   EGL_NONE};
30*8975f5c5SAndroid Build Coastguard Worker         mDisplay               = eglGetPlatformDisplay(EGL_PLATFORM_ANGLE_ANGLE,
31*8975f5c5SAndroid Build Coastguard Worker                                                        reinterpret_cast<void *>(EGL_DEFAULT_DISPLAY), dispattrs);
32*8975f5c5SAndroid Build Coastguard Worker         ASSERT_TRUE(mDisplay != EGL_NO_DISPLAY);
33*8975f5c5SAndroid Build Coastguard Worker 
34*8975f5c5SAndroid Build Coastguard Worker         ASSERT_EGL_TRUE(eglInitialize(mDisplay, nullptr, nullptr));
35*8975f5c5SAndroid Build Coastguard Worker 
36*8975f5c5SAndroid Build Coastguard Worker         int nConfigs = 0;
37*8975f5c5SAndroid Build Coastguard Worker         ASSERT_EGL_TRUE(eglGetConfigs(mDisplay, nullptr, 0, &nConfigs));
38*8975f5c5SAndroid Build Coastguard Worker         ASSERT_TRUE(nConfigs != 0);
39*8975f5c5SAndroid Build Coastguard Worker 
40*8975f5c5SAndroid Build Coastguard Worker         int nReturnedConfigs = 0;
41*8975f5c5SAndroid Build Coastguard Worker         std::vector<EGLConfig> configs(nConfigs);
42*8975f5c5SAndroid Build Coastguard Worker         ASSERT_EGL_TRUE(eglGetConfigs(mDisplay, configs.data(), nConfigs, &nReturnedConfigs));
43*8975f5c5SAndroid Build Coastguard Worker         ASSERT_TRUE(nConfigs == nReturnedConfigs);
44*8975f5c5SAndroid Build Coastguard Worker 
45*8975f5c5SAndroid Build Coastguard Worker         for (auto config : configs)
46*8975f5c5SAndroid Build Coastguard Worker         {
47*8975f5c5SAndroid Build Coastguard Worker             EGLint surfaceType;
48*8975f5c5SAndroid Build Coastguard Worker             eglGetConfigAttrib(mDisplay, config, EGL_SURFACE_TYPE, &surfaceType);
49*8975f5c5SAndroid Build Coastguard Worker             if (surfaceType & EGL_PBUFFER_BIT)
50*8975f5c5SAndroid Build Coastguard Worker             {
51*8975f5c5SAndroid Build Coastguard Worker                 mConfig           = config;
52*8975f5c5SAndroid Build Coastguard Worker                 mSupportsPbuffers = true;
53*8975f5c5SAndroid Build Coastguard Worker                 break;
54*8975f5c5SAndroid Build Coastguard Worker             }
55*8975f5c5SAndroid Build Coastguard Worker         }
56*8975f5c5SAndroid Build Coastguard Worker 
57*8975f5c5SAndroid Build Coastguard Worker         if (!mConfig)
58*8975f5c5SAndroid Build Coastguard Worker         {
59*8975f5c5SAndroid Build Coastguard Worker             mConfig = configs[0];
60*8975f5c5SAndroid Build Coastguard Worker         }
61*8975f5c5SAndroid Build Coastguard Worker 
62*8975f5c5SAndroid Build Coastguard Worker         ASSERT_NE(nullptr, mConfig);
63*8975f5c5SAndroid Build Coastguard Worker     }
64*8975f5c5SAndroid Build Coastguard Worker 
testTearDown()65*8975f5c5SAndroid Build Coastguard Worker     void testTearDown() override
66*8975f5c5SAndroid Build Coastguard Worker     {
67*8975f5c5SAndroid Build Coastguard Worker         eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
68*8975f5c5SAndroid Build Coastguard Worker 
69*8975f5c5SAndroid Build Coastguard Worker         if (mContext != EGL_NO_CONTEXT)
70*8975f5c5SAndroid Build Coastguard Worker         {
71*8975f5c5SAndroid Build Coastguard Worker             eglDestroyContext(mDisplay, mContext);
72*8975f5c5SAndroid Build Coastguard Worker         }
73*8975f5c5SAndroid Build Coastguard Worker 
74*8975f5c5SAndroid Build Coastguard Worker         if (mPbuffer != EGL_NO_SURFACE)
75*8975f5c5SAndroid Build Coastguard Worker         {
76*8975f5c5SAndroid Build Coastguard Worker             eglDestroySurface(mDisplay, mPbuffer);
77*8975f5c5SAndroid Build Coastguard Worker         }
78*8975f5c5SAndroid Build Coastguard Worker 
79*8975f5c5SAndroid Build Coastguard Worker         eglTerminate(mDisplay);
80*8975f5c5SAndroid Build Coastguard Worker     }
81*8975f5c5SAndroid Build Coastguard Worker 
82*8975f5c5SAndroid Build Coastguard Worker   protected:
createContext()83*8975f5c5SAndroid Build Coastguard Worker     EGLContext createContext()
84*8975f5c5SAndroid Build Coastguard Worker     {
85*8975f5c5SAndroid Build Coastguard Worker         const EGLint contextAttribs[] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE};
86*8975f5c5SAndroid Build Coastguard Worker 
87*8975f5c5SAndroid Build Coastguard Worker         mContext = eglCreateContext(mDisplay, mConfig, EGL_NO_CONTEXT, contextAttribs);
88*8975f5c5SAndroid Build Coastguard Worker         EXPECT_TRUE(mContext != EGL_NO_CONTEXT);
89*8975f5c5SAndroid Build Coastguard Worker         return mContext;
90*8975f5c5SAndroid Build Coastguard Worker     }
91*8975f5c5SAndroid Build Coastguard Worker 
createPbuffer(int width,int height)92*8975f5c5SAndroid Build Coastguard Worker     EGLSurface createPbuffer(int width, int height)
93*8975f5c5SAndroid Build Coastguard Worker     {
94*8975f5c5SAndroid Build Coastguard Worker         if (!mSupportsPbuffers)
95*8975f5c5SAndroid Build Coastguard Worker         {
96*8975f5c5SAndroid Build Coastguard Worker             return EGL_NO_SURFACE;
97*8975f5c5SAndroid Build Coastguard Worker         }
98*8975f5c5SAndroid Build Coastguard Worker 
99*8975f5c5SAndroid Build Coastguard Worker         const EGLint pbufferAttribs[] = {
100*8975f5c5SAndroid Build Coastguard Worker             EGL_WIDTH, 500, EGL_HEIGHT, 500, EGL_NONE,
101*8975f5c5SAndroid Build Coastguard Worker         };
102*8975f5c5SAndroid Build Coastguard Worker         mPbuffer = eglCreatePbufferSurface(mDisplay, mConfig, pbufferAttribs);
103*8975f5c5SAndroid Build Coastguard Worker         EXPECT_TRUE(mPbuffer != EGL_NO_SURFACE);
104*8975f5c5SAndroid Build Coastguard Worker         return mPbuffer;
105*8975f5c5SAndroid Build Coastguard Worker     }
106*8975f5c5SAndroid Build Coastguard Worker 
createFramebuffer(GLFramebuffer * fbo,GLTexture * tex) const107*8975f5c5SAndroid Build Coastguard Worker     void createFramebuffer(GLFramebuffer *fbo, GLTexture *tex) const
108*8975f5c5SAndroid Build Coastguard Worker     {
109*8975f5c5SAndroid Build Coastguard Worker         glBindFramebuffer(GL_FRAMEBUFFER, fbo->get());
110*8975f5c5SAndroid Build Coastguard Worker 
111*8975f5c5SAndroid Build Coastguard Worker         glBindTexture(GL_TEXTURE_2D, tex->get());
112*8975f5c5SAndroid Build Coastguard Worker         glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 500, 500, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
113*8975f5c5SAndroid Build Coastguard Worker 
114*8975f5c5SAndroid Build Coastguard Worker         glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex->get(), 0);
115*8975f5c5SAndroid Build Coastguard Worker         ASSERT_GL_FRAMEBUFFER_COMPLETE(GL_FRAMEBUFFER);
116*8975f5c5SAndroid Build Coastguard Worker     }
117*8975f5c5SAndroid Build Coastguard Worker 
checkExtension(bool verbose=true) const118*8975f5c5SAndroid Build Coastguard Worker     bool checkExtension(bool verbose = true) const
119*8975f5c5SAndroid Build Coastguard Worker     {
120*8975f5c5SAndroid Build Coastguard Worker         if (!IsEGLDisplayExtensionEnabled(mDisplay, "EGL_KHR_surfaceless_context"))
121*8975f5c5SAndroid Build Coastguard Worker         {
122*8975f5c5SAndroid Build Coastguard Worker             if (verbose)
123*8975f5c5SAndroid Build Coastguard Worker             {
124*8975f5c5SAndroid Build Coastguard Worker                 std::cout << "Test skipped because EGL_KHR_surfaceless_context is not available."
125*8975f5c5SAndroid Build Coastguard Worker                           << std::endl;
126*8975f5c5SAndroid Build Coastguard Worker             }
127*8975f5c5SAndroid Build Coastguard Worker             return false;
128*8975f5c5SAndroid Build Coastguard Worker         }
129*8975f5c5SAndroid Build Coastguard Worker         return true;
130*8975f5c5SAndroid Build Coastguard Worker     }
131*8975f5c5SAndroid Build Coastguard Worker 
132*8975f5c5SAndroid Build Coastguard Worker     EGLContext mContext    = EGL_NO_CONTEXT;
133*8975f5c5SAndroid Build Coastguard Worker     EGLSurface mPbuffer    = EGL_NO_SURFACE;
134*8975f5c5SAndroid Build Coastguard Worker     bool mSupportsPbuffers = false;
135*8975f5c5SAndroid Build Coastguard Worker     EGLConfig mConfig      = 0;
136*8975f5c5SAndroid Build Coastguard Worker     EGLDisplay mDisplay    = EGL_NO_DISPLAY;
137*8975f5c5SAndroid Build Coastguard Worker };
138*8975f5c5SAndroid Build Coastguard Worker 
139*8975f5c5SAndroid Build Coastguard Worker // Test surfaceless MakeCurrent returns the correct value.
TEST_P(EGLSurfacelessContextTest,MakeCurrentSurfaceless)140*8975f5c5SAndroid Build Coastguard Worker TEST_P(EGLSurfacelessContextTest, MakeCurrentSurfaceless)
141*8975f5c5SAndroid Build Coastguard Worker {
142*8975f5c5SAndroid Build Coastguard Worker     EGLContext context = createContext();
143*8975f5c5SAndroid Build Coastguard Worker 
144*8975f5c5SAndroid Build Coastguard Worker     if (eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, context))
145*8975f5c5SAndroid Build Coastguard Worker     {
146*8975f5c5SAndroid Build Coastguard Worker         ASSERT_TRUE(checkExtension(false));
147*8975f5c5SAndroid Build Coastguard Worker     }
148*8975f5c5SAndroid Build Coastguard Worker     else
149*8975f5c5SAndroid Build Coastguard Worker     {
150*8975f5c5SAndroid Build Coastguard Worker         // The extension allows EGL_BAD_MATCH with the extension too, but ANGLE
151*8975f5c5SAndroid Build Coastguard Worker         // shouldn't do that.
152*8975f5c5SAndroid Build Coastguard Worker         ASSERT_FALSE(checkExtension(false));
153*8975f5c5SAndroid Build Coastguard Worker     }
154*8975f5c5SAndroid Build Coastguard Worker }
155*8975f5c5SAndroid Build Coastguard Worker 
156*8975f5c5SAndroid Build Coastguard Worker // Test that the scissor and viewport are set correctly
TEST_P(EGLSurfacelessContextTest,DefaultScissorAndViewport)157*8975f5c5SAndroid Build Coastguard Worker TEST_P(EGLSurfacelessContextTest, DefaultScissorAndViewport)
158*8975f5c5SAndroid Build Coastguard Worker {
159*8975f5c5SAndroid Build Coastguard Worker     if (!checkExtension())
160*8975f5c5SAndroid Build Coastguard Worker     {
161*8975f5c5SAndroid Build Coastguard Worker         return;
162*8975f5c5SAndroid Build Coastguard Worker     }
163*8975f5c5SAndroid Build Coastguard Worker 
164*8975f5c5SAndroid Build Coastguard Worker     EGLContext context = createContext();
165*8975f5c5SAndroid Build Coastguard Worker     ASSERT_EGL_TRUE(eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, context));
166*8975f5c5SAndroid Build Coastguard Worker 
167*8975f5c5SAndroid Build Coastguard Worker     GLint scissor[4] = {1, 2, 3, 4};
168*8975f5c5SAndroid Build Coastguard Worker     glGetIntegerv(GL_SCISSOR_BOX, scissor);
169*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
170*8975f5c5SAndroid Build Coastguard Worker     ASSERT_EQ(0, scissor[0]);
171*8975f5c5SAndroid Build Coastguard Worker     ASSERT_EQ(0, scissor[1]);
172*8975f5c5SAndroid Build Coastguard Worker     ASSERT_EQ(0, scissor[2]);
173*8975f5c5SAndroid Build Coastguard Worker     ASSERT_EQ(0, scissor[3]);
174*8975f5c5SAndroid Build Coastguard Worker 
175*8975f5c5SAndroid Build Coastguard Worker     GLint viewport[4] = {1, 2, 3, 4};
176*8975f5c5SAndroid Build Coastguard Worker     glGetIntegerv(GL_VIEWPORT, viewport);
177*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
178*8975f5c5SAndroid Build Coastguard Worker     ASSERT_EQ(0, viewport[0]);
179*8975f5c5SAndroid Build Coastguard Worker     ASSERT_EQ(0, viewport[1]);
180*8975f5c5SAndroid Build Coastguard Worker     ASSERT_EQ(0, viewport[2]);
181*8975f5c5SAndroid Build Coastguard Worker     ASSERT_EQ(0, viewport[3]);
182*8975f5c5SAndroid Build Coastguard Worker }
183*8975f5c5SAndroid Build Coastguard Worker 
184*8975f5c5SAndroid Build Coastguard Worker // Test the CheckFramebufferStatus returns the correct value.
TEST_P(EGLSurfacelessContextTest,CheckFramebufferStatus)185*8975f5c5SAndroid Build Coastguard Worker TEST_P(EGLSurfacelessContextTest, CheckFramebufferStatus)
186*8975f5c5SAndroid Build Coastguard Worker {
187*8975f5c5SAndroid Build Coastguard Worker     if (!checkExtension())
188*8975f5c5SAndroid Build Coastguard Worker     {
189*8975f5c5SAndroid Build Coastguard Worker         return;
190*8975f5c5SAndroid Build Coastguard Worker     }
191*8975f5c5SAndroid Build Coastguard Worker 
192*8975f5c5SAndroid Build Coastguard Worker     EGLContext context = createContext();
193*8975f5c5SAndroid Build Coastguard Worker     ASSERT_EGL_TRUE(eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, context));
194*8975f5c5SAndroid Build Coastguard Worker 
195*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GLENUM_EQ(GL_FRAMEBUFFER_UNDEFINED_OES, glCheckFramebufferStatus(GL_FRAMEBUFFER));
196*8975f5c5SAndroid Build Coastguard Worker 
197*8975f5c5SAndroid Build Coastguard Worker     GLFramebuffer fbo;
198*8975f5c5SAndroid Build Coastguard Worker     GLTexture tex;
199*8975f5c5SAndroid Build Coastguard Worker     createFramebuffer(&fbo, &tex);
200*8975f5c5SAndroid Build Coastguard Worker     glBindFramebuffer(GL_FRAMEBUFFER, fbo.get());
201*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_FRAMEBUFFER_COMPLETE(GL_FRAMEBUFFER);
202*8975f5c5SAndroid Build Coastguard Worker }
203*8975f5c5SAndroid Build Coastguard Worker 
204*8975f5c5SAndroid Build Coastguard Worker // Test that clearing and readpixels work when done in an FBO.
TEST_P(EGLSurfacelessContextTest,ClearReadPixelsInFBO)205*8975f5c5SAndroid Build Coastguard Worker TEST_P(EGLSurfacelessContextTest, ClearReadPixelsInFBO)
206*8975f5c5SAndroid Build Coastguard Worker {
207*8975f5c5SAndroid Build Coastguard Worker     if (!checkExtension())
208*8975f5c5SAndroid Build Coastguard Worker     {
209*8975f5c5SAndroid Build Coastguard Worker         return;
210*8975f5c5SAndroid Build Coastguard Worker     }
211*8975f5c5SAndroid Build Coastguard Worker 
212*8975f5c5SAndroid Build Coastguard Worker     EGLContext context = createContext();
213*8975f5c5SAndroid Build Coastguard Worker     ASSERT_EGL_TRUE(eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, context));
214*8975f5c5SAndroid Build Coastguard Worker 
215*8975f5c5SAndroid Build Coastguard Worker     GLFramebuffer fbo;
216*8975f5c5SAndroid Build Coastguard Worker     GLTexture tex;
217*8975f5c5SAndroid Build Coastguard Worker     createFramebuffer(&fbo, &tex);
218*8975f5c5SAndroid Build Coastguard Worker     glBindFramebuffer(GL_FRAMEBUFFER, fbo.get());
219*8975f5c5SAndroid Build Coastguard Worker 
220*8975f5c5SAndroid Build Coastguard Worker     glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
221*8975f5c5SAndroid Build Coastguard Worker     glClear(GL_COLOR_BUFFER_BIT);
222*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
223*8975f5c5SAndroid Build Coastguard Worker 
224*8975f5c5SAndroid Build Coastguard Worker     EXPECT_PIXEL_COLOR_EQ(250, 250, GLColor::red);
225*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
226*8975f5c5SAndroid Build Coastguard Worker }
227*8975f5c5SAndroid Build Coastguard Worker 
228*8975f5c5SAndroid Build Coastguard Worker // Test clear+readpixels in an FBO in surfaceless and in the default FBO in a pbuffer
TEST_P(EGLSurfacelessContextTest,Switcheroo)229*8975f5c5SAndroid Build Coastguard Worker TEST_P(EGLSurfacelessContextTest, Switcheroo)
230*8975f5c5SAndroid Build Coastguard Worker {
231*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(!checkExtension());
232*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(!mSupportsPbuffers);
233*8975f5c5SAndroid Build Coastguard Worker 
234*8975f5c5SAndroid Build Coastguard Worker     // Fails on NVIDIA Shield TV (http://anglebug.com/42263498)
235*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(IsAndroid() && IsNVIDIA());
236*8975f5c5SAndroid Build Coastguard Worker 
237*8975f5c5SAndroid Build Coastguard Worker     EGLContext context = createContext();
238*8975f5c5SAndroid Build Coastguard Worker     EGLSurface pbuffer = createPbuffer(500, 500);
239*8975f5c5SAndroid Build Coastguard Worker 
240*8975f5c5SAndroid Build Coastguard Worker     // We need to make the context current to do the one time setup of the FBO
241*8975f5c5SAndroid Build Coastguard Worker     ASSERT_EGL_TRUE(eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, context));
242*8975f5c5SAndroid Build Coastguard Worker     GLFramebuffer fbo;
243*8975f5c5SAndroid Build Coastguard Worker     GLTexture tex;
244*8975f5c5SAndroid Build Coastguard Worker     createFramebuffer(&fbo, &tex);
245*8975f5c5SAndroid Build Coastguard Worker     glBindFramebuffer(GL_FRAMEBUFFER, fbo.get());
246*8975f5c5SAndroid Build Coastguard Worker 
247*8975f5c5SAndroid Build Coastguard Worker     for (int i = 0; i < 4; ++i)
248*8975f5c5SAndroid Build Coastguard Worker     {
249*8975f5c5SAndroid Build Coastguard Worker         // Clear to red in the FBO in surfaceless mode
250*8975f5c5SAndroid Build Coastguard Worker         ASSERT_EGL_TRUE(eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, context));
251*8975f5c5SAndroid Build Coastguard Worker 
252*8975f5c5SAndroid Build Coastguard Worker         glBindFramebuffer(GL_FRAMEBUFFER, fbo.get());
253*8975f5c5SAndroid Build Coastguard Worker         glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
254*8975f5c5SAndroid Build Coastguard Worker         glClear(GL_COLOR_BUFFER_BIT);
255*8975f5c5SAndroid Build Coastguard Worker         ASSERT_GL_NO_ERROR();
256*8975f5c5SAndroid Build Coastguard Worker 
257*8975f5c5SAndroid Build Coastguard Worker         EXPECT_PIXEL_COLOR_EQ(250, 250, GLColor::red);
258*8975f5c5SAndroid Build Coastguard Worker         ASSERT_GL_NO_ERROR();
259*8975f5c5SAndroid Build Coastguard Worker 
260*8975f5c5SAndroid Build Coastguard Worker         // Clear to green in the pbuffer
261*8975f5c5SAndroid Build Coastguard Worker         ASSERT_EGL_TRUE(eglMakeCurrent(mDisplay, pbuffer, pbuffer, context));
262*8975f5c5SAndroid Build Coastguard Worker 
263*8975f5c5SAndroid Build Coastguard Worker         glBindFramebuffer(GL_FRAMEBUFFER, 0);
264*8975f5c5SAndroid Build Coastguard Worker         glClearColor(0.0f, 1.0f, 0.0f, 1.0f);
265*8975f5c5SAndroid Build Coastguard Worker         glClear(GL_COLOR_BUFFER_BIT);
266*8975f5c5SAndroid Build Coastguard Worker         ASSERT_GL_NO_ERROR();
267*8975f5c5SAndroid Build Coastguard Worker 
268*8975f5c5SAndroid Build Coastguard Worker         EXPECT_PIXEL_COLOR_EQ(250, 250, GLColor::green);
269*8975f5c5SAndroid Build Coastguard Worker         ASSERT_GL_NO_ERROR();
270*8975f5c5SAndroid Build Coastguard Worker     }
271*8975f5c5SAndroid Build Coastguard Worker }
272*8975f5c5SAndroid Build Coastguard Worker 
273*8975f5c5SAndroid Build Coastguard Worker }  // anonymous namespace
274*8975f5c5SAndroid Build Coastguard Worker 
275*8975f5c5SAndroid Build Coastguard Worker ANGLE_INSTANTIATE_TEST(EGLSurfacelessContextTest,
276*8975f5c5SAndroid Build Coastguard Worker                        WithNoFixture(ES2_D3D9()),
277*8975f5c5SAndroid Build Coastguard Worker                        WithNoFixture(ES2_D3D11()),
278*8975f5c5SAndroid Build Coastguard Worker                        WithNoFixture(ES2_METAL()),
279*8975f5c5SAndroid Build Coastguard Worker                        WithNoFixture(ES2_OPENGL()),
280*8975f5c5SAndroid Build Coastguard Worker                        WithNoFixture(ES2_OPENGLES()),
281*8975f5c5SAndroid Build Coastguard Worker                        WithNoFixture(ES2_VULKAN()));
282