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