Commit 3755c48d by Olli Etuaho Committed by Commit Bot

Fix multiview transform feedback test

The multiview transform feedback test was not compliant with the GLES spec for transform feedback. The issue had to do with this part of section 2.15.2 of GLES 3.0.5 spec: "The error INVALID_OPERATION is also generated by BeginTransformFeedback if no binding points would be used, either because no program object is active or because the active program object has specified no output variables to record." Fix this. BUG=angleproject:2184 TEST=angle_end2end_tests on NVIDIA 387.92 drivers Change-Id: I24816d2c24df0072179f21ead892bd2c9ba696d2 Reviewed-on: https://chromium-review.googlesource.com/718702 Commit-Queue: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 42975644
......@@ -706,15 +706,21 @@ TEST_P(MultiviewDrawValidationTest, ActiveTransformFeedback)
const GLint viewportOffsets[4] = {0, 0, 2, 0};
const std::string &vsSource =
"#version 300 es\n"
"void main()\n"
"{}\n";
R"(#version 300 es
out float tfVarying;
void main()
{
tfVarying = 1.0;
})";
const std::string &fsSource =
"#version 300 es\n"
"precision mediump float;\n"
"void main()\n"
"{}\n";
ANGLE_GL_PROGRAM(program, vsSource, fsSource);
R"(#version 300 es
precision mediump float;
void main()
{})";
std::vector<std::string> tfVaryings;
tfVaryings.push_back(std::string("tfVarying"));
ANGLE_GL_PROGRAM_TRANSFORM_FEEDBACK(program, vsSource, fsSource, tfVaryings,
GL_SEPARATE_ATTRIBS);
glUseProgram(program);
GLBuffer tbo;
......@@ -723,6 +729,9 @@ TEST_P(MultiviewDrawValidationTest, ActiveTransformFeedback)
GLTransformFeedback transformFeedback;
glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, transformFeedback);
glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, tbo);
glBeginTransformFeedback(GL_TRIANGLES);
ASSERT_GL_NO_ERROR();
......
......@@ -95,6 +95,15 @@ class GLProgram
mHandle = CompileProgram(vertexShader, fragmentShader);
}
void makeRasterWithTransformFeedback(const std::string &vertexShader,
const std::string &fragmentShader,
const std::vector<std::string> &tfVaryings,
GLenum bufferMode)
{
mHandle = CompileProgramWithTransformFeedback(vertexShader, fragmentShader, tfVaryings,
bufferMode);
}
void makeBinaryOES(const std::vector<uint8_t> &binary, GLenum binaryFormat)
{
mHandle = LoadBinaryProgramOES(binary, binaryFormat);
......@@ -125,6 +134,11 @@ class GLProgram
name.makeRaster(vertex, fragment); \
ASSERT_TRUE(name.valid());
#define ANGLE_GL_PROGRAM_TRANSFORM_FEEDBACK(name, vertex, fragment, tfVaryings, bufferMode) \
priv::GLProgram name; \
name.makeRasterWithTransformFeedback(vertex, fragment, tfVaryings, bufferMode); \
ASSERT_TRUE(name.valid());
#define ANGLE_GL_COMPUTE_PROGRAM(name, compute) \
priv::GLProgram name; \
name.makeCompute(compute); \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment