@@ -219,7 +219,6 @@ TEST_P(TransformFeedbackTest, RecordAndDraw)
219219
220220 const GLfloat vertices[] = {
221221 -1 .0f , 1 .0f , 0 .5f , -1 .0f , -1 .0f , 0 .5f , 1 .0f , -1 .0f , 0 .5f ,
222-
223222 -1 .0f , 1 .0f , 0 .5f , 1 .0f , -1 .0f , 0 .5f , 1 .0f , 1 .0f , 0 .5f ,
224223 };
225224
@@ -1671,6 +1670,47 @@ TEST_P(TransformFeedbackTest, EndWithDifferentProgramContextSwitch)
16711670 ASSERT_GL_NO_ERROR ();
16721671}
16731672
1673+ // Test an out of memory event.
1674+ TEST_P (TransformFeedbackTest, BufferOutOfMemory)
1675+ {
1676+ // The GL back-end throws an internal error that we can't deal with in this test.
1677+ ANGLE_SKIP_TEST_IF (IsOpenGL ());
1678+
1679+ glClearColor (0 .0f , 0 .0f , 0 .0f , 0 .0f );
1680+ glClear (GL_COLOR_BUFFER_BIT);
1681+
1682+ // Set the program's transform feedback varyings (just gl_Position)
1683+ std::vector<std::string> tfVaryings;
1684+ tfVaryings.push_back (" gl_Position" );
1685+ compileDefaultProgram (tfVaryings, GL_INTERLEAVED_ATTRIBS);
1686+
1687+ GLint positionLocation = glGetAttribLocation (mProgram , essl1_shaders::PositionAttrib ());
1688+ const GLfloat vertices[] = {-1 .0f , -0 .5f , 0 .0f , 0 .5f , 1 .0f };
1689+
1690+ glVertexAttribPointer (positionLocation, 3 , GL_FLOAT, GL_FALSE, 0 , vertices);
1691+ glEnableVertexAttribArray (positionLocation);
1692+
1693+ // Draw normally.
1694+ glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0 , mTransformFeedbackBuffer );
1695+ glUseProgram (mProgram );
1696+ glBeginTransformFeedback (GL_POINTS);
1697+ glDrawArrays (GL_POINTS, 0 , 5 );
1698+ glEndTransformFeedback ();
1699+ ASSERT_GL_NO_ERROR ();
1700+
1701+ // Attempt to generate OOM and begin XFB.
1702+ constexpr GLsizeiptr kLargeSize = std::numeric_limits<GLsizeiptr>::max ();
1703+ glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, kLargeSize , nullptr , GL_STATIC_DRAW);
1704+
1705+ // It's not spec guaranteed to return OOM here.
1706+ GLenum err = glGetError ();
1707+ EXPECT_TRUE (err == GL_NO_ERROR || err == GL_OUT_OF_MEMORY);
1708+
1709+ glBeginTransformFeedback (GL_POINTS);
1710+ glDrawArrays (GL_POINTS, 0 , 5 );
1711+ glEndTransformFeedback ();
1712+ }
1713+
16741714// Use this to select which configurations (e.g. which renderer, which GLES major version) these
16751715// tests should be run against.
16761716ANGLE_INSTANTIATE_TEST_ES3 (TransformFeedbackTest);
0 commit comments