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) ...@@ -706,15 +706,21 @@ TEST_P(MultiviewDrawValidationTest, ActiveTransformFeedback)
const GLint viewportOffsets[4] = {0, 0, 2, 0}; const GLint viewportOffsets[4] = {0, 0, 2, 0};
const std::string &vsSource = const std::string &vsSource =
"#version 300 es\n" R"(#version 300 es
"void main()\n" out float tfVarying;
"{}\n"; void main()
{
tfVarying = 1.0;
})";
const std::string &fsSource = const std::string &fsSource =
"#version 300 es\n" R"(#version 300 es
"precision mediump float;\n" precision mediump float;
"void main()\n" void main()
"{}\n"; {})";
ANGLE_GL_PROGRAM(program, vsSource, fsSource); 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); glUseProgram(program);
GLBuffer tbo; GLBuffer tbo;
...@@ -723,6 +729,9 @@ TEST_P(MultiviewDrawValidationTest, ActiveTransformFeedback) ...@@ -723,6 +729,9 @@ TEST_P(MultiviewDrawValidationTest, ActiveTransformFeedback)
GLTransformFeedback transformFeedback; GLTransformFeedback transformFeedback;
glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, transformFeedback); glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, transformFeedback);
glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, tbo);
glBeginTransformFeedback(GL_TRIANGLES); glBeginTransformFeedback(GL_TRIANGLES);
ASSERT_GL_NO_ERROR(); ASSERT_GL_NO_ERROR();
......
...@@ -95,6 +95,15 @@ class GLProgram ...@@ -95,6 +95,15 @@ class GLProgram
mHandle = CompileProgram(vertexShader, fragmentShader); 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) void makeBinaryOES(const std::vector<uint8_t> &binary, GLenum binaryFormat)
{ {
mHandle = LoadBinaryProgramOES(binary, binaryFormat); mHandle = LoadBinaryProgramOES(binary, binaryFormat);
...@@ -125,6 +134,11 @@ class GLProgram ...@@ -125,6 +134,11 @@ class GLProgram
name.makeRaster(vertex, fragment); \ name.makeRaster(vertex, fragment); \
ASSERT_TRUE(name.valid()); 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) \ #define ANGLE_GL_COMPUTE_PROGRAM(name, compute) \
priv::GLProgram name; \ priv::GLProgram name; \
name.makeCompute(compute); \ 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