KHR-GL42.shader_atomic_counters.negative-uniform
KHR-GL42.shader_atomic_counters.negative-array
KHR-GL42.shader_atomic_counters.negative-arithmetic
+KHR-GL42.shader_atomic_counters.negative-large-offset
KHR-GL42.shader_image_load_store.basic-api-get
KHR-GL42.shader_image_load_store.basic-api-bind
KHR-GL42.shader_image_load_store.basic-api-barrier
KHR-GL43.shader_atomic_counters.negative-uniform
KHR-GL43.shader_atomic_counters.negative-array
KHR-GL43.shader_atomic_counters.negative-arithmetic
+KHR-GL43.shader_atomic_counters.negative-large-offset
KHR-GL43.shader_image_load_store.basic-api-get
KHR-GL43.shader_image_load_store.basic-api-bind
KHR-GL43.shader_image_load_store.basic-api-barrier
KHR-GL44.shader_atomic_counters.negative-uniform
KHR-GL44.shader_atomic_counters.negative-array
KHR-GL44.shader_atomic_counters.negative-arithmetic
+KHR-GL44.shader_atomic_counters.negative-large-offset
KHR-GL44.shader_image_load_store.basic-api-get
KHR-GL44.shader_image_load_store.basic-api-bind
KHR-GL44.shader_image_load_store.basic-api-barrier
KHR-GL45.shader_atomic_counters.negative-uniform
KHR-GL45.shader_atomic_counters.negative-array
KHR-GL45.shader_atomic_counters.negative-arithmetic
+KHR-GL45.shader_atomic_counters.negative-large-offset
KHR-GL45.shader_atomic_counters.negative-unsized-array
KHR-GL45.shader_image_load_store.basic-api-get
KHR-GL45.shader_image_load_store.basic-api-bind
KHR-GL46.shader_atomic_counters.negative-uniform
KHR-GL46.shader_atomic_counters.negative-array
KHR-GL46.shader_atomic_counters.negative-arithmetic
+KHR-GL46.shader_atomic_counters.negative-large-offset
KHR-GL46.shader_atomic_counters.negative-unsized-array
KHR-GL46.shader_image_load_store.basic-api-get
KHR-GL46.shader_image_load_store.basic-api-bind
KHR-GL42.shader_atomic_counters.negative-uniform
KHR-GL42.shader_atomic_counters.negative-array
KHR-GL42.shader_atomic_counters.negative-arithmetic
+KHR-GL42.shader_atomic_counters.negative-large-offset
KHR-GL42.shader_image_load_store.basic-api-get
KHR-GL42.shader_image_load_store.basic-api-bind
KHR-GL42.shader_image_load_store.basic-api-barrier
KHR-GL43.shader_atomic_counters.negative-uniform
KHR-GL43.shader_atomic_counters.negative-array
KHR-GL43.shader_atomic_counters.negative-arithmetic
+KHR-GL43.shader_atomic_counters.negative-large-offset
KHR-GL43.shader_image_load_store.basic-api-get
KHR-GL43.shader_image_load_store.basic-api-bind
KHR-GL43.shader_image_load_store.basic-api-barrier
KHR-GL44.shader_atomic_counters.negative-uniform
KHR-GL44.shader_atomic_counters.negative-array
KHR-GL44.shader_atomic_counters.negative-arithmetic
+KHR-GL44.shader_atomic_counters.negative-large-offset
KHR-GL44.shader_image_load_store.basic-api-get
KHR-GL44.shader_image_load_store.basic-api-bind
KHR-GL44.shader_image_load_store.basic-api-barrier
KHR-GL45.shader_atomic_counters.negative-uniform
KHR-GL45.shader_atomic_counters.negative-array
KHR-GL45.shader_atomic_counters.negative-arithmetic
+KHR-GL45.shader_atomic_counters.negative-large-offset
KHR-GL45.shader_atomic_counters.negative-unsized-array
KHR-GL45.shader_image_load_store.basic-api-get
KHR-GL45.shader_image_load_store.basic-api-bind
KHR-GL46.shader_atomic_counters.negative-uniform
KHR-GL46.shader_atomic_counters.negative-array
KHR-GL46.shader_atomic_counters.negative-arithmetic
+KHR-GL46.shader_atomic_counters.negative-large-offset
KHR-GL46.shader_atomic_counters.negative-unsized-array
KHR-GL46.shader_image_load_store.basic-api-get
KHR-GL46.shader_image_load_store.basic-api-bind
KHR-GLES31.core.shader_atomic_counters.negative-uniform
KHR-GLES31.core.shader_atomic_counters.negative-array
KHR-GLES31.core.shader_atomic_counters.negative-arithmetic
+KHR-GLES31.core.shader_atomic_counters.negative-large-offset
KHR-GLES31.core.shader_atomic_counters.negative-unsized-array
KHR-GLES31.core.texture_gather.api-enums
KHR-GLES31.core.texture_gather.gather-glsl-compile
KHR-GLES31.core.shader_atomic_counters.negative-uniform
KHR-GLES31.core.shader_atomic_counters.negative-array
KHR-GLES31.core.shader_atomic_counters.negative-arithmetic
+KHR-GLES31.core.shader_atomic_counters.negative-large-offset
KHR-GLES31.core.shader_atomic_counters.negative-unsized-array
KHR-GLES31.core.texture_gather.api-enums
KHR-GLES31.core.texture_gather.gather-glsl-compile
KHR-GLES31.core.shader_atomic_counters.negative-uniform
KHR-GLES31.core.shader_atomic_counters.negative-array
KHR-GLES31.core.shader_atomic_counters.negative-arithmetic
+KHR-GLES31.core.shader_atomic_counters.negative-large-offset
KHR-GLES31.core.shader_atomic_counters.negative-unsized-array
KHR-GLES31.core.texture_gather.api-enums
KHR-GLES31.core.texture_gather.gather-glsl-compile
virtual long Run()
{
-
// create program
const char* glsl_vs = "#version 420 core" NL "layout(location = 0) in vec4 i_vertex;" NL "void main() {" NL
" gl_Position = i_vertex;" NL "}";
}
};
+class NegativeLargeOffset : public SACSubcaseBase
+{
+ virtual std::string Title()
+ {
+ return NL "GLSL errors";
+ }
+
+ virtual std::string Purpose()
+ {
+ return NL "Verify that it is compile-time error to declare an atomic counter whose offset \n"
+ "is such that the buffer containing it would be larger than MaxAtomicCounterBufferSiz.";
+ }
+
+ virtual long Run()
+ {
+ GLint maxSize;
+ glGetIntegerv(GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE, &maxSize);
+
+ std::ostringstream os;
+ os << "#version 420 core" NL "layout(location = 0) out uvec4 o_color;" NL
+ "layout(binding = 0, offset = " << maxSize << ") uniform atomic_uint ac_counter_fs;" NL
+ "void main() {" NL " o_color = uvec4(atomicCounterIncrement(ac_counter_fs)); " NL " }";
+ std::string source = os.str();
+ const char* glsl_fs = source.c_str();
+
+ GLuint sh = glCreateShader(GL_FRAGMENT_SHADER);
+ glShaderSource(sh, 1, &glsl_fs, NULL);
+ glCompileShader(sh);
+ GLint status_comp;
+ glGetShaderiv(sh, GL_COMPILE_STATUS, &status_comp);
+ glDeleteShader(sh);
+
+ if (status_comp == GL_TRUE)
+ {
+ m_context.getTestContext().getLog()
+ << tcu::TestLog::Message << "Expected error during fragment shader compilation."
+ << tcu::TestLog::EndMessage;
+ return ERROR;
+ }
+
+ return NO_ERROR;
+ }
+
+ virtual long Cleanup()
+ {
+ return NO_ERROR;
+ }
+};
+
class AdvancedManyDrawCalls2 : public SACSubcaseBase
{
addChild(new TestSubcase(m_context, "negative-uniform", TestSubcase::Create<NegativeUniform>));
addChild(new TestSubcase(m_context, "negative-array", TestSubcase::Create<NegativeArray>));
addChild(new TestSubcase(m_context, "negative-arithmetic", TestSubcase::Create<NegativeArithmetic>));
+ addChild(new TestSubcase(m_context, "negative-large-offset", TestSubcase::Create<NegativeLargeOffset>));
if(contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 5)))
addChild(new TestSubcase(m_context, "negative-unsized-array", TestSubcase::Create<NegativeUnsizedArray>));
virtual std::string Purpose()
{
- return NL "Verify that it is compile-time error to declare an unsized array of atomic_uint..";
+ return NL "Verify that it is compile-time error to declare an unsized array of atomic_uint.";
}
virtual std::string Method()
}
};
+class NegativeLargeOffset : public SACSubcaseBase
+{
+ virtual std::string Title()
+ {
+ return NL "GLSL errors";
+ }
+
+ virtual std::string Purpose()
+ {
+ return NL "Verify that it is compile-time error to declare an atomic counter whose offset \n"
+ "is such that the buffer containing it would be larger than MaxAtomicCounterBufferSiz.";
+ }
+
+ virtual long Run()
+ {
+ GLint maxSize;
+ glGetIntegerv(GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE, &maxSize);
+
+ std::ostringstream os;
+ os << "#version 310 es" NL "layout(location = 0) out uvec4 o_color;" NL
+ "layout(binding = 0, offset = " << maxSize << ") uniform atomic_uint ac_counter_fs;" NL
+ "void main() {" NL " o_color = uvec4(atomicCounterIncrement(ac_counter_fs)); " NL " }";
+ std::string source = os.str();
+ const char* glsl_fs = source.c_str();
+
+ GLuint sh = glCreateShader(GL_FRAGMENT_SHADER);
+ glShaderSource(sh, 1, &glsl_fs, NULL);
+ glCompileShader(sh);
+ GLint status_comp;
+ glGetShaderiv(sh, GL_COMPILE_STATUS, &status_comp);
+ glDeleteShader(sh);
+
+ if (status_comp == GL_TRUE)
+ {
+ m_context.getTestContext().getLog()
+ << tcu::TestLog::Message << "Expected error during fragment shader compilation."
+ << tcu::TestLog::EndMessage;
+ return ERROR;
+ }
+
+ return NO_ERROR;
+ }
+};
+
class AdvancedManyDrawCalls2 : public SACSubcaseBase
{
addChild(new TestSubcase(m_context, "negative-uniform", TestSubcase::Create<NegativeUniform>));
addChild(new TestSubcase(m_context, "negative-array", TestSubcase::Create<NegativeArray>));
addChild(new TestSubcase(m_context, "negative-arithmetic", TestSubcase::Create<NegativeArithmetic>));
+ addChild(new TestSubcase(m_context, "negative-large-offset", TestSubcase::Create<NegativeLargeOffset>));
addChild(new TestSubcase(m_context, "negative-unsized-array", TestSubcase::Create<NegativeUnsizedArray>));
}
}