m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if internalformat is not a color-renderable, depth-renderable, or stencil-renderable format.");
glRenderbufferStorage (GL_RENDERBUFFER, -1, 1, 1);
expectError (GL_INVALID_ENUM);
- glRenderbufferStorage (GL_RENDERBUFFER, GL_RGB16F, 1, 1);
- expectError (GL_INVALID_ENUM);
+
+ if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_color_buffer_half_float")) // GL_EXT_color_buffer_half_float disables error
+ {
+ glRenderbufferStorage (GL_RENDERBUFFER, GL_RGB16F, 1, 1);
+ expectError (GL_INVALID_ENUM);
+ }
+
glRenderbufferStorage (GL_RENDERBUFFER, GL_RGBA8_SNORM, 1, 1);
expectError (GL_INVALID_ENUM);
m_log << TestLog::EndSection;
m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if internalformat is not a color-renderable, depth-renderable, or stencil-renderable format.");
glRenderbufferStorageMultisample (GL_RENDERBUFFER, 2, -1, 1, 1);
expectError (GL_INVALID_ENUM);
- glRenderbufferStorageMultisample (GL_RENDERBUFFER, 2, GL_RGB16F, 1, 1);
- expectError (GL_INVALID_ENUM);
+
+ if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_color_buffer_half_float")) // GL_EXT_color_buffer_half_float disables error
+ {
+ glRenderbufferStorageMultisample (GL_RENDERBUFFER, 2, GL_RGB16F, 1, 1);
+ expectError (GL_INVALID_ENUM);
+ }
+
glRenderbufferStorageMultisample (GL_RENDERBUFFER, 2, GL_RGBA8_SNORM, 1, 1);
expectError (GL_INVALID_ENUM);
m_log << TestLog::EndSection;
glDeleteFramebuffers(1, &fbo);
m_log << tcu::TestLog::EndSection;
- m_log << tcu::TestLog::Section("", "GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
- const char* tfVarying = "gl_Position";
-
- glGenBuffers (1, &buf);
- glGenTransformFeedbacks (1, &tfID);
-
- glUseProgram (program.getProgram());
- glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
- glLinkProgram (program.getProgram());
- glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
- glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
- glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
- glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
- glBeginTransformFeedback (GL_POINTS);
- expectError (GL_NO_ERROR);
-
- glDrawElements (GL_POINTS, 1, GL_UNSIGNED_BYTE, vertices);
- expectError (GL_INVALID_OPERATION);
-
- glPauseTransformFeedback();
- glDrawElements (GL_POINTS, 1, GL_UNSIGNED_BYTE, vertices);
- expectError (GL_NO_ERROR);
-
- glEndTransformFeedback ();
- glDeleteBuffers (1, &buf);
- glDeleteTransformFeedbacks (1, &tfID);
- expectError (GL_NO_ERROR);
- m_log << tcu::TestLog::EndSection;
+ if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
+ {
+ m_log << tcu::TestLog::Section("", "GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
+ const char* tfVarying = "gl_Position";
+
+ glGenBuffers (1, &buf);
+ glGenTransformFeedbacks (1, &tfID);
+
+ glUseProgram (program.getProgram());
+ glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
+ glLinkProgram (program.getProgram());
+ glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
+ glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
+ glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
+ glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
+ glBeginTransformFeedback (GL_POINTS);
+ expectError (GL_NO_ERROR);
+
+ glDrawElements (GL_POINTS, 1, GL_UNSIGNED_BYTE, vertices);
+ expectError (GL_INVALID_OPERATION);
+
+ glPauseTransformFeedback();
+ glDrawElements (GL_POINTS, 1, GL_UNSIGNED_BYTE, vertices);
+ expectError (GL_NO_ERROR);
+
+ glEndTransformFeedback ();
+ glDeleteBuffers (1, &buf);
+ glDeleteTransformFeedbacks (1, &tfID);
+ expectError (GL_NO_ERROR);
+ m_log << tcu::TestLog::EndSection;
+ }
glUseProgram(0);
});
glDeleteFramebuffers(1, &fbo);
m_log << tcu::TestLog::EndSection;
- m_log << tcu::TestLog::Section("", "GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
- const char* tfVarying = "gl_Position";
+ if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
+ {
+ m_log << tcu::TestLog::Section("", "GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
+ const char* tfVarying = "gl_Position";
- glGenBuffers (1, &buf);
- glGenTransformFeedbacks (1, &tfID);
+ glGenBuffers (1, &buf);
+ glGenTransformFeedbacks (1, &tfID);
- glUseProgram (program.getProgram());
- glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
- glLinkProgram (program.getProgram());
- glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
- glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
- glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
- glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
- glBeginTransformFeedback (GL_TRIANGLES);
- expectError (GL_NO_ERROR);
+ glUseProgram (program.getProgram());
+ glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
+ glLinkProgram (program.getProgram());
+ glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
+ glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
+ glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
+ glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
+ glBeginTransformFeedback (GL_TRIANGLES);
+ expectError (GL_NO_ERROR);
- glDrawElements (GL_TRIANGLES, 1, GL_UNSIGNED_BYTE, vertices);
- expectError (GL_INVALID_OPERATION);
+ glDrawElements (GL_TRIANGLES, 1, GL_UNSIGNED_BYTE, vertices);
+ expectError (GL_INVALID_OPERATION);
- glPauseTransformFeedback();
- glDrawElements (GL_TRIANGLES, 1, GL_UNSIGNED_BYTE, vertices);
- expectError (GL_NO_ERROR);
+ glPauseTransformFeedback();
+ glDrawElements (GL_TRIANGLES, 1, GL_UNSIGNED_BYTE, vertices);
+ expectError (GL_NO_ERROR);
- glEndTransformFeedback ();
- glDeleteBuffers (1, &buf);
- glDeleteTransformFeedbacks (1, &tfID);
- expectError (GL_NO_ERROR);
- m_log << tcu::TestLog::EndSection;
+ glEndTransformFeedback ();
+ glDeleteBuffers (1, &buf);
+ glDeleteTransformFeedbacks (1, &tfID);
+ expectError (GL_NO_ERROR);
+ m_log << tcu::TestLog::EndSection;
+ }
glUseProgram(0);
});
glDeleteFramebuffers(1, &fbo);
m_log << tcu::TestLog::EndSection;
- m_log << tcu::TestLog::Section("", "GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
- const char* tfVarying = "gl_Position";
+ if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
+ {
+ m_log << tcu::TestLog::Section("", "GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
+ const char* tfVarying = "gl_Position";
- glGenBuffers (1, &buf);
- glGenTransformFeedbacks (1, &tfID);
+ glGenBuffers (1, &buf);
+ glGenTransformFeedbacks (1, &tfID);
- glUseProgram (program.getProgram());
- glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
- glLinkProgram (program.getProgram());
- glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
- glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
- glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
- glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
- glBeginTransformFeedback (GL_POINTS);
- expectError (GL_NO_ERROR);
+ glUseProgram (program.getProgram());
+ glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
+ glLinkProgram (program.getProgram());
+ glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
+ glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
+ glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
+ glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
+ glBeginTransformFeedback (GL_POINTS);
+ expectError (GL_NO_ERROR);
- glDrawElementsInstanced (GL_POINTS, 1, GL_UNSIGNED_BYTE, vertices, 1);
- expectError (GL_INVALID_OPERATION);
+ glDrawElementsInstanced (GL_POINTS, 1, GL_UNSIGNED_BYTE, vertices, 1);
+ expectError (GL_INVALID_OPERATION);
- glPauseTransformFeedback();
- glDrawElementsInstanced (GL_POINTS, 1, GL_UNSIGNED_BYTE, vertices, 1);
- expectError (GL_NO_ERROR);
+ glPauseTransformFeedback();
+ glDrawElementsInstanced (GL_POINTS, 1, GL_UNSIGNED_BYTE, vertices, 1);
+ expectError (GL_NO_ERROR);
- glEndTransformFeedback ();
- glDeleteBuffers (1, &buf);
- glDeleteTransformFeedbacks (1, &tfID);
- expectError (GL_NO_ERROR);
- m_log << tcu::TestLog::EndSection;
+ glEndTransformFeedback ();
+ glDeleteBuffers (1, &buf);
+ glDeleteTransformFeedbacks (1, &tfID);
+ expectError (GL_NO_ERROR);
+ m_log << tcu::TestLog::EndSection;
+ }
glUseProgram(0);
});
glDeleteFramebuffers(1, &fbo);
m_log << tcu::TestLog::EndSection;
- m_log << tcu::TestLog::Section("", "GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
- const char* tfVarying = "gl_Position";
+ if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
+ {
+ m_log << tcu::TestLog::Section("", "GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
+ const char* tfVarying = "gl_Position";
- glGenBuffers (1, &buf);
- glGenTransformFeedbacks (1, &tfID);
+ glGenBuffers (1, &buf);
+ glGenTransformFeedbacks (1, &tfID);
- glUseProgram (program.getProgram());
- glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
- glLinkProgram (program.getProgram());
- glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
- glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
- glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
- glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
- glBeginTransformFeedback (GL_TRIANGLES);
- expectError (GL_NO_ERROR);
+ glUseProgram (program.getProgram());
+ glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
+ glLinkProgram (program.getProgram());
+ glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
+ glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
+ glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
+ glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
+ glBeginTransformFeedback (GL_TRIANGLES);
+ expectError (GL_NO_ERROR);
- glDrawElementsInstanced (GL_TRIANGLES, 1, GL_UNSIGNED_BYTE, vertices, 1);
- expectError (GL_INVALID_OPERATION);
+ glDrawElementsInstanced (GL_TRIANGLES, 1, GL_UNSIGNED_BYTE, vertices, 1);
+ expectError (GL_INVALID_OPERATION);
- glPauseTransformFeedback();
- glDrawElementsInstanced (GL_TRIANGLES, 1, GL_UNSIGNED_BYTE, vertices, 1);
- expectError (GL_NO_ERROR);
+ glPauseTransformFeedback();
+ glDrawElementsInstanced (GL_TRIANGLES, 1, GL_UNSIGNED_BYTE, vertices, 1);
+ expectError (GL_NO_ERROR);
- glEndTransformFeedback ();
- glDeleteBuffers (1, &buf);
- glDeleteTransformFeedbacks (1, &tfID);
- expectError (GL_NO_ERROR);
- m_log << tcu::TestLog::EndSection;
+ glEndTransformFeedback ();
+ glDeleteBuffers (1, &buf);
+ glDeleteTransformFeedbacks (1, &tfID);
+ expectError (GL_NO_ERROR);
+ m_log << tcu::TestLog::EndSection;
+ }
glUseProgram(0);
});
glDeleteFramebuffers(1, &fbo);
m_log << tcu::TestLog::EndSection;
- m_log << tcu::TestLog::Section("", "GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
- const char* tfVarying = "gl_Position";
+ if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
+ {
+ m_log << tcu::TestLog::Section("", "GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
+ const char* tfVarying = "gl_Position";
- glGenBuffers (1, &buf);
- glGenTransformFeedbacks (1, &tfID);
+ glGenBuffers (1, &buf);
+ glGenTransformFeedbacks (1, &tfID);
- glUseProgram (program.getProgram());
- glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
- glLinkProgram (program.getProgram());
- glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
- glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
- glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
- glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
- glBeginTransformFeedback (GL_POINTS);
- expectError (GL_NO_ERROR);
+ glUseProgram (program.getProgram());
+ glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
+ glLinkProgram (program.getProgram());
+ glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
+ glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
+ glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
+ glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
+ glBeginTransformFeedback (GL_POINTS);
+ expectError (GL_NO_ERROR);
- glDrawRangeElements (GL_POINTS, 0, 1, 1, GL_UNSIGNED_BYTE, vertices);
- expectError (GL_INVALID_OPERATION);
+ glDrawRangeElements (GL_POINTS, 0, 1, 1, GL_UNSIGNED_BYTE, vertices);
+ expectError (GL_INVALID_OPERATION);
- glPauseTransformFeedback();
- glDrawRangeElements (GL_POINTS, 0, 1, 1, GL_UNSIGNED_BYTE, vertices);
- expectError (GL_NO_ERROR);
+ glPauseTransformFeedback();
+ glDrawRangeElements (GL_POINTS, 0, 1, 1, GL_UNSIGNED_BYTE, vertices);
+ expectError (GL_NO_ERROR);
- glEndTransformFeedback ();
- glDeleteBuffers (1, &buf);
- glDeleteTransformFeedbacks (1, &tfID);
- expectError (GL_NO_ERROR);
- m_log << tcu::TestLog::EndSection;
+ glEndTransformFeedback ();
+ glDeleteBuffers (1, &buf);
+ glDeleteTransformFeedbacks (1, &tfID);
+ expectError (GL_NO_ERROR);
+ m_log << tcu::TestLog::EndSection;
+ }
glUseProgram(0);
});
glDeleteFramebuffers(1, &fbo);
m_log << tcu::TestLog::EndSection;
- m_log << tcu::TestLog::Section("", "GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
- const char* tfVarying = "gl_Position";
-
- glGenBuffers (1, &buf);
- glGenTransformFeedbacks (1, &tfID);
-
- glUseProgram (program.getProgram());
- glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
- glLinkProgram (program.getProgram());
- glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
- glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
- glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
- glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
- glBeginTransformFeedback (GL_TRIANGLES);
- expectError (GL_NO_ERROR);
-
- glDrawRangeElements (GL_TRIANGLES, 0, 1, 1, GL_UNSIGNED_BYTE, vertices);
- expectError (GL_INVALID_OPERATION);
-
- glPauseTransformFeedback();
- glDrawRangeElements (GL_TRIANGLES, 0, 1, 1, GL_UNSIGNED_BYTE, vertices);
- expectError (GL_NO_ERROR);
-
- glEndTransformFeedback ();
- glDeleteBuffers (1, &buf);
- glDeleteTransformFeedbacks (1, &tfID);
- expectError (GL_NO_ERROR);
- m_log << tcu::TestLog::EndSection;
+ if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
+ {
+ m_log << tcu::TestLog::Section("", "GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
+ const char* tfVarying = "gl_Position";
+
+ glGenBuffers (1, &buf);
+ glGenTransformFeedbacks (1, &tfID);
+
+ glUseProgram (program.getProgram());
+ glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
+ glLinkProgram (program.getProgram());
+ glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
+ glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
+ glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
+ glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
+ glBeginTransformFeedback (GL_TRIANGLES);
+ expectError (GL_NO_ERROR);
+
+ glDrawRangeElements (GL_TRIANGLES, 0, 1, 1, GL_UNSIGNED_BYTE, vertices);
+ expectError (GL_INVALID_OPERATION);
+
+ glPauseTransformFeedback();
+ glDrawRangeElements (GL_TRIANGLES, 0, 1, 1, GL_UNSIGNED_BYTE, vertices);
+ expectError (GL_NO_ERROR);
+
+ glEndTransformFeedback ();
+ glDeleteBuffers (1, &buf);
+ glDeleteTransformFeedbacks (1, &tfID);
+ expectError (GL_NO_ERROR);
+ m_log << tcu::TestLog::EndSection;
+ }
glUseProgram(0);
});
const glw::Functions& gl = m_context.getRenderContext().getFunctions();
tcu::TestLog& log = m_testCtx.getLog();
- NegativeTestContext context = NegativeTestContext(*this, m_context.getRenderContext(), log, m_results, true);
+ NegativeTestContext context = NegativeTestContext(*this, m_context.getRenderContext(), m_context.getContextInfo(), log, m_results, true);
gl.enable(GL_DEBUG_OUTPUT);
gl.enable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
const glw::Functions& gl = m_context.getRenderContext().getFunctions();
tcu::TestLog& log = m_testCtx.getLog();
- NegativeTestContext context = NegativeTestContext(*this, m_context.getRenderContext(), log, m_results, true);
+ NegativeTestContext context = NegativeTestContext(*this, m_context.getRenderContext(), m_context.getContextInfo(), log, m_results, true);
GLint numMsg = 0;
gl.enable(GL_DEBUG_OUTPUT);
GetErrorCase::IterateResult GetErrorCase::iterate (void)
{
tcu::TestLog& log = m_testCtx.getLog();
- NegativeTestContext context = NegativeTestContext(*this, m_context.getRenderContext(), log, m_results, true);
+ NegativeTestContext context = NegativeTestContext(*this, m_context.getRenderContext(), m_context.getContextInfo(), log, m_results, true);
m_errorFunc(context);
vector<MessageData> FilterCase::genMessages (bool uselog, const string& desc)
{
tcu::TestLog& log = m_testCtx.getLog();
- NegativeTestContext context = NegativeTestContext(*this, m_context.getRenderContext(), log, m_results, uselog);
+ NegativeTestContext context = NegativeTestContext(*this, m_context.getRenderContext(), m_context.getContextInfo(), log, m_results, uselog);
tcu::ScopedLogSection section (log, "message gen", desc);
vector<MessageData> messages;
const glw::Functions& gl = m_context.getRenderContext().getFunctions();
tcu::TestLog& log = m_testCtx.getLog();
- NegativeTestContext context = NegativeTestContext(*this, m_context.getRenderContext(), log, m_results, true);
+ NegativeTestContext context = NegativeTestContext(*this, m_context.getRenderContext(), m_context.getContextInfo(), log, m_results, true);
const int maxWait = 10000; // ms
const int warnWait = 100;
// check the SSBO buffers are of legal size
{
- const int commandBufferSize = m_commandSize * m_numDrawCmds;
- deInt64 maxSSBOSize = 0;
+ const deUint64 drawBufferElementSize = sizeof(tcu::Vec4);
+ const deUint64 indexBufferElementSize = sizeof(deUint32);
+ const int commandBufferSize = m_commandSize * m_numDrawCmds;
+ deInt64 maxSSBOSize = 0;
gl.getInteger64v(GL_MAX_SHADER_STORAGE_BLOCK_SIZE, &maxSSBOSize);
- if (m_computeData && (deInt64)calcDrawBufferSize() > maxSSBOSize)
+ if (m_computeData && (deUint64)calcDrawBufferSize()*drawBufferElementSize > (deUint64)maxSSBOSize)
throw tcu::NotSupportedError("GL_MAX_SHADER_STORAGE_BLOCK_SIZE is too small for vertex attrib buffers");
- if (m_computeIndices && (deInt64)calcIndexBufferSize() > maxSSBOSize)
+ if (m_computeIndices && (deUint64)calcIndexBufferSize()*indexBufferElementSize > (deUint64)maxSSBOSize)
throw tcu::NotSupportedError("GL_MAX_SHADER_STORAGE_BLOCK_SIZE is too small for index buffers");
- if (m_computeCmd && (deInt64)commandBufferSize > maxSSBOSize)
+ if (m_computeCmd && (deUint64)commandBufferSize > (deUint64)maxSSBOSize)
throw tcu::NotSupportedError("GL_MAX_SHADER_STORAGE_BLOCK_SIZE is too small for command buffers");
}
}
#include "es31fNegativeBufferApiTests.hpp"
#include "gluCallLogWrapper.hpp"
+#include "gluContextInfo.hpp"
#include "glwDefs.hpp"
#include "glwEnums.hpp"
ctx.beginSection("GL_INVALID_ENUM is generated if internalformat is not a color-renderable, depth-renderable, or stencil-renderable format.");
ctx.glRenderbufferStorage (GL_RENDERBUFFER, -1, 1, 1);
ctx.expectError (GL_INVALID_ENUM);
- ctx.glRenderbufferStorage (GL_RENDERBUFFER, GL_RGB16F, 1, 1);
- ctx.expectError (GL_INVALID_ENUM);
+
+ if (!ctx.getContextInfo().isExtensionSupported("GL_EXT_color_buffer_half_float")) // GL_EXT_color_buffer_half_float disables error
+ {
+ ctx.glRenderbufferStorage (GL_RENDERBUFFER, GL_RGB16F, 1, 1);
+ ctx.expectError (GL_INVALID_ENUM);
+ }
+
ctx.glRenderbufferStorage (GL_RENDERBUFFER, GL_RGBA8_SNORM, 1, 1);
ctx.expectError (GL_INVALID_ENUM);
ctx.endSection();
ctx.beginSection("GL_INVALID_ENUM is generated if internalformat is not a color-renderable, depth-renderable, or stencil-renderable format.");
ctx.glRenderbufferStorageMultisample (GL_RENDERBUFFER, 2, -1, 1, 1);
ctx.expectError (GL_INVALID_ENUM);
- ctx.glRenderbufferStorageMultisample (GL_RENDERBUFFER, 2, GL_RGB16F, 1, 1);
- ctx.expectError (GL_INVALID_ENUM);
+
+ if (!ctx.getContextInfo().isExtensionSupported("GL_EXT_color_buffer_half_float")) // GL_EXT_color_buffer_half_float disables error
+ {
+ ctx.glRenderbufferStorageMultisample (GL_RENDERBUFFER, 2, GL_RGB16F, 1, 1);
+ ctx.expectError (GL_INVALID_ENUM);
+ }
+
ctx.glRenderbufferStorageMultisample (GL_RENDERBUFFER, 2, GL_RGBA8_SNORM, 1, 1);
ctx.expectError (GL_INVALID_ENUM);
ctx.endSection();
{
}
-NegativeTestContext::NegativeTestContext (ErrorCase& host,
- glu::RenderContext& renderCtx,
- tcu::TestLog& log,
- tcu::ResultCollector& results,
- bool enableLogging_)
+NegativeTestContext::NegativeTestContext (ErrorCase& host,
+ glu::RenderContext& renderCtx,
+ const glu::ContextInfo& ctxInfo,
+ tcu::TestLog& log,
+ tcu::ResultCollector& results,
+ bool enableLogging_)
: glu::CallLogWrapper (renderCtx.getFunctions(), log)
, m_renderCtx (renderCtx)
+ , m_ctxInfo (ctxInfo)
, m_host (host)
, m_results (results)
, m_openSections (0)
class NegativeTestContext : public glu::CallLogWrapper
{
public:
- NegativeTestContext (ErrorCase& host, glu::RenderContext& renderCtx, tcu::TestLog& log, tcu::ResultCollector& results, bool enableLog);
+ NegativeTestContext (ErrorCase& host, glu::RenderContext& renderCtx, const glu::ContextInfo& ctxInfo, tcu::TestLog& log, tcu::ResultCollector& results, bool enableLog);
~NegativeTestContext ();
const tcu::ResultCollector& getResults (void) const;
void fail (const std::string& msg);
int getInteger (glw::GLenum pname) const;
const glu::RenderContext& getRenderContext (void) const { return m_renderCtx; }
+ const glu::ContextInfo& getContextInfo (void) const { return m_ctxInfo; }
void beginSection (const std::string& desc);
void endSection (void);
private:
glu::RenderContext& m_renderCtx;
+ const glu::ContextInfo& m_ctxInfo;
ErrorCase& m_host;
tcu::ResultCollector& m_results;
int m_openSections;
#include "es31fNegativeVertexArrayApiTests.hpp"
#include "gluCallLogWrapper.hpp"
+#include "gluContextInfo.hpp"
#include "gluShaderProgram.hpp"
#include "glwDefs.hpp"
ctx.glDeleteFramebuffers(1, &fbo);
ctx.endSection();
- ctx.beginSection("GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
- const char* tfVarying = "gl_Position";
-
- ctx.glGenBuffers (1, &buf);
- ctx.glGenTransformFeedbacks (1, &tfID);
-
- ctx.glUseProgram (program.getProgram());
- ctx.glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
- ctx.glLinkProgram (program.getProgram());
- ctx.glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
- ctx.glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
- ctx.glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
- ctx.glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
- ctx.glBeginTransformFeedback (GL_POINTS);
- ctx.expectError (GL_NO_ERROR);
-
- ctx.glDrawElements (GL_POINTS, 1, GL_UNSIGNED_BYTE, vertices);
- ctx.expectError (GL_INVALID_OPERATION);
-
- ctx.glPauseTransformFeedback();
- ctx.glDrawElements (GL_POINTS, 1, GL_UNSIGNED_BYTE, vertices);
- ctx.expectError (GL_NO_ERROR);
-
- ctx.glEndTransformFeedback ();
- ctx.glDeleteBuffers (1, &buf);
- ctx.glDeleteTransformFeedbacks (1, &tfID);
- ctx.expectError (GL_NO_ERROR);
- ctx.endSection();
+ if (!ctx.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
+ {
+ ctx.beginSection("GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
+ const char* tfVarying = "gl_Position";
+
+ ctx.glGenBuffers (1, &buf);
+ ctx.glGenTransformFeedbacks (1, &tfID);
+
+ ctx.glUseProgram (program.getProgram());
+ ctx.glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
+ ctx.glLinkProgram (program.getProgram());
+ ctx.glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
+ ctx.glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
+ ctx.glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
+ ctx.glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
+ ctx.glBeginTransformFeedback (GL_POINTS);
+ ctx.expectError (GL_NO_ERROR);
+
+ ctx.glDrawElements (GL_POINTS, 1, GL_UNSIGNED_BYTE, vertices);
+ ctx.expectError (GL_INVALID_OPERATION);
+
+ ctx.glPauseTransformFeedback();
+ ctx.glDrawElements (GL_POINTS, 1, GL_UNSIGNED_BYTE, vertices);
+ ctx.expectError (GL_NO_ERROR);
+
+ ctx.glEndTransformFeedback ();
+ ctx.glDeleteBuffers (1, &buf);
+ ctx.glDeleteTransformFeedbacks (1, &tfID);
+ ctx.expectError (GL_NO_ERROR);
+ ctx.endSection();
+ }
ctx.glUseProgram(0);
}
ctx.glDeleteFramebuffers(1, &fbo);
ctx.endSection();
- ctx.beginSection("GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
- const char* tfVarying = "gl_Position";
-
- ctx.glGenBuffers (1, &buf);
- ctx.glGenTransformFeedbacks (1, &tfID);
-
- ctx.glUseProgram (program.getProgram());
- ctx.glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
- ctx.glLinkProgram (program.getProgram());
- ctx.glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
- ctx.glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
- ctx.glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
- ctx.glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
- ctx.glBeginTransformFeedback (GL_TRIANGLES);
- ctx.expectError (GL_NO_ERROR);
-
- ctx.glDrawElements (GL_TRIANGLES, 1, GL_UNSIGNED_BYTE, vertices);
- ctx.expectError (GL_INVALID_OPERATION);
-
- ctx.glPauseTransformFeedback();
- ctx.glDrawElements (GL_TRIANGLES, 1, GL_UNSIGNED_BYTE, vertices);
- ctx.expectError (GL_NO_ERROR);
-
- ctx.glEndTransformFeedback ();
- ctx.glDeleteBuffers (1, &buf);
- ctx.glDeleteTransformFeedbacks (1, &tfID);
- ctx.expectError (GL_NO_ERROR);
- ctx.endSection();
+ if (!ctx.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
+ {
+ ctx.beginSection("GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
+ const char* tfVarying = "gl_Position";
+
+ ctx.glGenBuffers (1, &buf);
+ ctx.glGenTransformFeedbacks (1, &tfID);
+
+ ctx.glUseProgram (program.getProgram());
+ ctx.glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
+ ctx.glLinkProgram (program.getProgram());
+ ctx.glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
+ ctx.glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
+ ctx.glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
+ ctx.glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
+ ctx.glBeginTransformFeedback (GL_TRIANGLES);
+ ctx.expectError (GL_NO_ERROR);
+
+ ctx.glDrawElements (GL_TRIANGLES, 1, GL_UNSIGNED_BYTE, vertices);
+ ctx.expectError (GL_INVALID_OPERATION);
+
+ ctx.glPauseTransformFeedback ();
+ ctx.glDrawElements (GL_TRIANGLES, 1, GL_UNSIGNED_BYTE, vertices);
+ ctx.expectError (GL_NO_ERROR);
+
+ ctx.glEndTransformFeedback ();
+ ctx.glDeleteBuffers (1, &buf);
+ ctx.glDeleteTransformFeedbacks (1, &tfID);
+ ctx.expectError (GL_NO_ERROR);
+ ctx.endSection ();
+ }
ctx.glUseProgram(0);
}
ctx.glDeleteFramebuffers(1, &fbo);
ctx.endSection();
- ctx.beginSection("GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
- const char* tfVarying = "gl_Position";
-
- ctx.glGenBuffers (1, &buf);
- ctx.glGenTransformFeedbacks (1, &tfID);
-
- ctx.glUseProgram (program.getProgram());
- ctx.glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
- ctx.glLinkProgram (program.getProgram());
- ctx.glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
- ctx.glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
- ctx.glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
- ctx.glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
- ctx.glBeginTransformFeedback (GL_POINTS);
- ctx.expectError (GL_NO_ERROR);
-
- ctx.glDrawElementsInstanced (GL_POINTS, 1, GL_UNSIGNED_BYTE, vertices, 1);
- ctx.expectError (GL_INVALID_OPERATION);
-
- ctx.glPauseTransformFeedback();
- ctx.glDrawElementsInstanced (GL_POINTS, 1, GL_UNSIGNED_BYTE, vertices, 1);
- ctx.expectError (GL_NO_ERROR);
-
- ctx.glEndTransformFeedback ();
- ctx.glDeleteBuffers (1, &buf);
- ctx.glDeleteTransformFeedbacks (1, &tfID);
- ctx.expectError (GL_NO_ERROR);
- ctx.endSection();
+ if (!ctx.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
+ {
+ ctx.beginSection("GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
+ const char* tfVarying = "gl_Position";
+
+ ctx.glGenBuffers (1, &buf);
+ ctx.glGenTransformFeedbacks (1, &tfID);
+
+ ctx.glUseProgram (program.getProgram());
+ ctx.glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
+ ctx.glLinkProgram (program.getProgram());
+ ctx.glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
+ ctx.glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
+ ctx.glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
+ ctx.glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
+ ctx.glBeginTransformFeedback (GL_POINTS);
+ ctx.expectError (GL_NO_ERROR);
+
+ ctx.glDrawElementsInstanced (GL_POINTS, 1, GL_UNSIGNED_BYTE, vertices, 1);
+ ctx.expectError (GL_INVALID_OPERATION);
+
+ ctx.glPauseTransformFeedback();
+ ctx.glDrawElementsInstanced (GL_POINTS, 1, GL_UNSIGNED_BYTE, vertices, 1);
+ ctx.expectError (GL_NO_ERROR);
+
+ ctx.glEndTransformFeedback ();
+ ctx.glDeleteBuffers (1, &buf);
+ ctx.glDeleteTransformFeedbacks (1, &tfID);
+ ctx.expectError (GL_NO_ERROR);
+ ctx.endSection();
+ }
ctx.glUseProgram(0);
}
ctx.glDeleteFramebuffers(1, &fbo);
ctx.endSection();
- ctx.beginSection("GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
- const char* tfVarying = "gl_Position";
-
- ctx.glGenBuffers (1, &buf);
- ctx.glGenTransformFeedbacks (1, &tfID);
-
- ctx.glUseProgram (program.getProgram());
- ctx.glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
- ctx.glLinkProgram (program.getProgram());
- ctx.glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
- ctx.glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
- ctx.glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
- ctx.glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
- ctx.glBeginTransformFeedback (GL_TRIANGLES);
- ctx.expectError (GL_NO_ERROR);
-
- ctx.glDrawElementsInstanced (GL_TRIANGLES, 1, GL_UNSIGNED_BYTE, vertices, 1);
- ctx.expectError (GL_INVALID_OPERATION);
-
- ctx.glPauseTransformFeedback();
- ctx.glDrawElementsInstanced (GL_TRIANGLES, 1, GL_UNSIGNED_BYTE, vertices, 1);
- ctx.expectError (GL_NO_ERROR);
-
- ctx.glEndTransformFeedback ();
- ctx.glDeleteBuffers (1, &buf);
- ctx.glDeleteTransformFeedbacks (1, &tfID);
- ctx.expectError (GL_NO_ERROR);
- ctx.endSection();
+ if (!ctx.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
+ {
+ ctx.beginSection("GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
+ const char* tfVarying = "gl_Position";
+
+ ctx.glGenBuffers (1, &buf);
+ ctx.glGenTransformFeedbacks (1, &tfID);
+
+ ctx.glUseProgram (program.getProgram());
+ ctx.glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
+ ctx.glLinkProgram (program.getProgram());
+ ctx.glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
+ ctx.glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
+ ctx.glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
+ ctx.glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
+ ctx.glBeginTransformFeedback (GL_TRIANGLES);
+ ctx.expectError (GL_NO_ERROR);
+
+ ctx.glDrawElementsInstanced (GL_TRIANGLES, 1, GL_UNSIGNED_BYTE, vertices, 1);
+ ctx.expectError (GL_INVALID_OPERATION);
+
+ ctx.glPauseTransformFeedback();
+ ctx.glDrawElementsInstanced (GL_TRIANGLES, 1, GL_UNSIGNED_BYTE, vertices, 1);
+ ctx.expectError (GL_NO_ERROR);
+
+ ctx.glEndTransformFeedback ();
+ ctx.glDeleteBuffers (1, &buf);
+ ctx.glDeleteTransformFeedbacks (1, &tfID);
+ ctx.expectError (GL_NO_ERROR);
+ ctx.endSection();
+ }
ctx.glUseProgram(0);
}
ctx.glDeleteFramebuffers(1, &fbo);
ctx.endSection();
- ctx.beginSection("GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
- const char* tfVarying = "gl_Position";
-
- ctx.glGenBuffers (1, &buf);
- ctx.glGenTransformFeedbacks (1, &tfID);
-
- ctx.glUseProgram (program.getProgram());
- ctx.glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
- ctx.glLinkProgram (program.getProgram());
- ctx.glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
- ctx.glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
- ctx.glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
- ctx.glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
- ctx.glBeginTransformFeedback (GL_POINTS);
- ctx.expectError (GL_NO_ERROR);
-
- ctx.glDrawRangeElements (GL_POINTS, 0, 1, 1, GL_UNSIGNED_BYTE, vertices);
- ctx.expectError (GL_INVALID_OPERATION);
-
- ctx.glPauseTransformFeedback();
- ctx.glDrawRangeElements (GL_POINTS, 0, 1, 1, GL_UNSIGNED_BYTE, vertices);
- ctx.expectError (GL_NO_ERROR);
-
- ctx.glEndTransformFeedback ();
- ctx.glDeleteBuffers (1, &buf);
- ctx.glDeleteTransformFeedbacks (1, &tfID);
- ctx.expectError (GL_NO_ERROR);
- ctx.endSection();
+ if (!ctx.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
+ {
+ ctx.beginSection("GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
+ const char* tfVarying = "gl_Position";
+
+ ctx.glGenBuffers (1, &buf);
+ ctx.glGenTransformFeedbacks (1, &tfID);
+
+ ctx.glUseProgram (program.getProgram());
+ ctx.glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
+ ctx.glLinkProgram (program.getProgram());
+ ctx.glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
+ ctx.glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
+ ctx.glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
+ ctx.glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
+ ctx.glBeginTransformFeedback (GL_POINTS);
+ ctx.expectError (GL_NO_ERROR);
+
+ ctx.glDrawRangeElements (GL_POINTS, 0, 1, 1, GL_UNSIGNED_BYTE, vertices);
+ ctx.expectError (GL_INVALID_OPERATION);
+
+ ctx.glPauseTransformFeedback();
+ ctx.glDrawRangeElements (GL_POINTS, 0, 1, 1, GL_UNSIGNED_BYTE, vertices);
+ ctx.expectError (GL_NO_ERROR);
+
+ ctx.glEndTransformFeedback ();
+ ctx.glDeleteBuffers (1, &buf);
+ ctx.glDeleteTransformFeedbacks (1, &tfID);
+ ctx.expectError (GL_NO_ERROR);
+ ctx.endSection();
+ }
ctx.glUseProgram(0);
}
ctx.glDeleteFramebuffers(1, &fbo);
ctx.endSection();
- ctx.beginSection("GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
- const char* tfVarying = "gl_Position";
-
- ctx.glGenBuffers (1, &buf);
- ctx.glGenTransformFeedbacks (1, &tfID);
-
- ctx.glUseProgram (program.getProgram());
- ctx.glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
- ctx.glLinkProgram (program.getProgram());
- ctx.glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
- ctx.glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
- ctx.glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
- ctx.glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
- ctx.glBeginTransformFeedback (GL_TRIANGLES);
- ctx.expectError (GL_NO_ERROR);
-
- ctx.glDrawRangeElements (GL_TRIANGLES, 0, 1, 1, GL_UNSIGNED_BYTE, vertices);
- ctx.expectError (GL_INVALID_OPERATION);
-
- ctx.glPauseTransformFeedback();
- ctx.glDrawRangeElements (GL_TRIANGLES, 0, 1, 1, GL_UNSIGNED_BYTE, vertices);
- ctx.expectError (GL_NO_ERROR);
-
- ctx.glEndTransformFeedback ();
- ctx.glDeleteBuffers (1, &buf);
- ctx.glDeleteTransformFeedbacks (1, &tfID);
- ctx.expectError (GL_NO_ERROR);
- ctx.endSection();
+ if (!ctx.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader")) // GL_EXT_geometry_shader removes error
+ {
+ ctx.beginSection("GL_INVALID_OPERATION is generated if transform feedback is active and not paused.");
+ const char* tfVarying = "gl_Position";
+
+ ctx.glGenBuffers (1, &buf);
+ ctx.glGenTransformFeedbacks (1, &tfID);
+
+ ctx.glUseProgram (program.getProgram());
+ ctx.glTransformFeedbackVaryings (program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
+ ctx.glLinkProgram (program.getProgram());
+ ctx.glBindTransformFeedback (GL_TRANSFORM_FEEDBACK, tfID);
+ ctx.glBindBuffer (GL_TRANSFORM_FEEDBACK_BUFFER, buf);
+ ctx.glBufferData (GL_TRANSFORM_FEEDBACK_BUFFER, 32, DE_NULL, GL_DYNAMIC_DRAW);
+ ctx.glBindBufferBase (GL_TRANSFORM_FEEDBACK_BUFFER, 0, buf);
+ ctx.glBeginTransformFeedback (GL_TRIANGLES);
+ ctx.expectError (GL_NO_ERROR);
+
+ ctx.glDrawRangeElements (GL_TRIANGLES, 0, 1, 1, GL_UNSIGNED_BYTE, vertices);
+ ctx.expectError (GL_INVALID_OPERATION);
+
+ ctx.glPauseTransformFeedback();
+ ctx.glDrawRangeElements (GL_TRIANGLES, 0, 1, 1, GL_UNSIGNED_BYTE, vertices);
+ ctx.expectError (GL_NO_ERROR);
+
+ ctx.glEndTransformFeedback ();
+ ctx.glDeleteBuffers (1, &buf);
+ ctx.glDeleteTransformFeedbacks (1, &tfID);
+ ctx.expectError (GL_NO_ERROR);
+ ctx.endSection();
+ }
ctx.glUseProgram(0);
}