Check that AEP features behave correctly in 310/320 shaders.
[platform/upstream/VK-GL-CTS.git] / modules / gles31 / functional / es31fDebugTests.cpp
index e8acd2c..d417705 100644 (file)
 #include "es31fNegativeFragmentApiTests.hpp"
 #include "es31fNegativeVertexArrayApiTests.hpp"
 #include "es31fNegativeStateApiTests.hpp"
+#include "es31fNegativeAtomicCounterTests.hpp"
+#include "es31fNegativeShaderImageLoadStoreTests.hpp"
+#include "es31fNegativeShaderFunctionTests.hpp"
+#include "es31fNegativeShaderDirectiveTests.hpp"
 
 #include "deUniquePtr.hpp"
 #include "deRandom.hpp"
@@ -97,6 +101,12 @@ static const GLenum s_debugSeverities[] =
     GL_DEBUG_SEVERITY_NOTIFICATION,
 };
 
+static bool isKHRDebugSupported (Context& ctx)
+{
+       const bool isES32 = glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+       return isES32 || ctx.getContextInfo().isExtensionSupported("GL_KHR_debug");
+}
+
 class BaseCase;
 
 class DebugMessageTestContext : public NegativeTestContext
@@ -639,7 +649,7 @@ CallbackErrorCase::CallbackErrorCase (Context&                              ctx,
 
 CallbackErrorCase::IterateResult CallbackErrorCase::iterate (void)
 {
-       TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_debug"), "GL_KHR_debug is not supported");
+       TCU_CHECK_AND_THROW(NotSupportedError, isKHRDebugSupported(m_context), "GL_KHR_debug is not supported");
 
        const glw::Functions&   gl              = m_context.getRenderContext().getFunctions();
        tcu::TestLog&                   log             = m_testCtx.getLog();
@@ -708,7 +718,7 @@ LogErrorCase::LogErrorCase (Context&                        ctx,
 
 LogErrorCase::IterateResult LogErrorCase::iterate (void)
 {
-       TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_debug"), "GL_KHR_debug is not supported");
+       TCU_CHECK_AND_THROW(NotSupportedError, isKHRDebugSupported(m_context), "GL_KHR_debug is not supported");
 
        const glw::Functions&   gl              = m_context.getRenderContext().getFunctions();
        tcu::TestLog&                   log             = m_testCtx.getLog();
@@ -914,7 +924,7 @@ FilterCase::FilterCase (Context&                                                    ctx,
 
 FilterCase::IterateResult FilterCase::iterate (void)
 {
-       TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_debug"), "GL_KHR_debug is not supported");
+       TCU_CHECK_AND_THROW(NotSupportedError, isKHRDebugSupported(m_context), "GL_KHR_debug is not supported");
 
        const glw::Functions& gl = m_context.getRenderContext().getFunctions();
 
@@ -1226,7 +1236,7 @@ vector<T> join(const vector<T>& a, const vector<T>&b)
 
 GroupFilterCase::IterateResult GroupFilterCase::iterate (void)
 {
-       TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_debug"), "GL_KHR_debug is not supported");
+       TCU_CHECK_AND_THROW(NotSupportedError, isKHRDebugSupported(m_context), "GL_KHR_debug is not supported");
 
        const glw::Functions&   gl                      = m_context.getRenderContext().getFunctions();
        tcu::TestLog&                   log                     = m_testCtx.getLog();
@@ -1329,7 +1339,7 @@ GroupCase::GroupCase (Context&                            ctx,
 
 GroupCase::IterateResult GroupCase::iterate (void)
 {
-       TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_debug"), "GL_KHR_debug is not supported");
+       TCU_CHECK_AND_THROW(NotSupportedError, isKHRDebugSupported(m_context), "GL_KHR_debug is not supported");
 
        const glw::Functions&   gl              = m_context.getRenderContext().getFunctions();
        tcu::TestLog&                   log             = m_testCtx.getLog();
@@ -1426,7 +1436,7 @@ AsyncCase::AsyncCase (Context&                                                            ctx,
 
 AsyncCase::IterateResult AsyncCase::iterate (void)
 {
-       TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_debug"), "GL_KHR_debug is not supported");
+       TCU_CHECK_AND_THROW(NotSupportedError, isKHRDebugSupported(m_context), "GL_KHR_debug is not supported");
 
        const glw::Functions&   gl                      = m_context.getRenderContext().getFunctions();
        tcu::TestLog&                   log                     = m_testCtx.getLog();
@@ -1639,7 +1649,7 @@ LabelCase::LabelCase (Context&            ctx,
 
 LabelCase::IterateResult LabelCase::iterate (void)
 {
-       TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_debug"), "GL_KHR_debug is not supported");
+       TCU_CHECK_AND_THROW(NotSupportedError, isKHRDebugSupported(m_context), "GL_KHR_debug is not supported");
 
        const glw::Functions&   gl                      = m_context.getRenderContext().getFunctions();
        const char*     const           msg                     = "This is a debug label";
@@ -1783,7 +1793,7 @@ SyncLabelCase::SyncLabelCase (Context& ctx, const char* name, const char* desc)
 
 SyncLabelCase::IterateResult SyncLabelCase::iterate (void)
 {
-       TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_debug"), "GL_KHR_debug is not supported");
+       TCU_CHECK_AND_THROW(NotSupportedError, isKHRDebugSupported(m_context), "GL_KHR_debug is not supported");
 
        const glw::Functions&   gl                      = m_context.getRenderContext().getFunctions();
        const char*     const           msg                     = "This is a debug label";
@@ -1831,7 +1841,7 @@ InitialLabelCase::InitialLabelCase (Context& ctx, const char* name, const char*
 
 InitialLabelCase::IterateResult InitialLabelCase::iterate (void)
 {
-       TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_debug"), "GL_KHR_debug is not supported");
+       TCU_CHECK_AND_THROW(NotSupportedError, isKHRDebugSupported(m_context), "GL_KHR_debug is not supported");
 
        const glw::Functions&   gl                      = m_context.getRenderContext().getFunctions();
        tcu::ResultCollector    result          (m_testCtx.getLog(), " // ERROR: ");
@@ -1901,7 +1911,7 @@ ClearLabelCase::ClearLabelCase (Context& ctx, const char* name, const char* desc
 
 ClearLabelCase::IterateResult ClearLabelCase::iterate (void)
 {
-       TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_debug"), "GL_KHR_debug is not supported");
+       TCU_CHECK_AND_THROW(NotSupportedError, isKHRDebugSupported(m_context), "GL_KHR_debug is not supported");
 
        static const struct
        {
@@ -2005,7 +2015,7 @@ SpecifyWithLengthCase::SpecifyWithLengthCase (Context& ctx, const char* name, co
 
 SpecifyWithLengthCase::IterateResult SpecifyWithLengthCase::iterate (void)
 {
-       TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_debug"), "GL_KHR_debug is not supported");
+       TCU_CHECK_AND_THROW(NotSupportedError, isKHRDebugSupported(m_context), "GL_KHR_debug is not supported");
 
        const glw::Functions&   gl                      = m_context.getRenderContext().getFunctions();
        tcu::ResultCollector    result          (m_testCtx.getLog(), " // ERROR: ");
@@ -2115,7 +2125,7 @@ BufferLimitedLabelCase::BufferLimitedLabelCase (Context& ctx, const char* name,
 
 BufferLimitedLabelCase::IterateResult BufferLimitedLabelCase::iterate (void)
 {
-       TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_debug"), "GL_KHR_debug is not supported");
+       TCU_CHECK_AND_THROW(NotSupportedError, isKHRDebugSupported(m_context), "GL_KHR_debug is not supported");
 
        const glw::Functions&   gl                      = m_context.getRenderContext().getFunctions();
        tcu::ResultCollector    result          (m_testCtx.getLog(), " // ERROR: ");
@@ -2344,7 +2354,7 @@ LabelMaxSizeCase::LabelMaxSizeCase (Context& ctx, const char* name, const char*
 
 LabelMaxSizeCase::IterateResult LabelMaxSizeCase::iterate (void)
 {
-       TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_debug"), "GL_KHR_debug is not supported");
+       TCU_CHECK_AND_THROW(NotSupportedError, isKHRDebugSupported(m_context), "GL_KHR_debug is not supported");
 
        const glw::Functions&   gl                      = m_context.getRenderContext().getFunctions();
        tcu::ResultCollector    result          (m_testCtx.getLog(), " // ERROR: ");
@@ -2471,7 +2481,7 @@ LabelLengthCase::LabelLengthCase (Context& ctx, const char* name, const char* de
 
 LabelLengthCase::IterateResult LabelLengthCase::iterate (void)
 {
-       TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_debug"), "GL_KHR_debug is not supported");
+       TCU_CHECK_AND_THROW(NotSupportedError, isKHRDebugSupported(m_context), "GL_KHR_debug is not supported");
 
        const glw::Functions&   gl                      = m_context.getRenderContext().getFunctions();
        tcu::ResultCollector    result          (m_testCtx.getLog(), " // ERROR: ");
@@ -2581,7 +2591,7 @@ LimitQueryCase::LimitQueryCase (Context&                                          context,
 
 LimitQueryCase::IterateResult LimitQueryCase::iterate (void)
 {
-       TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_debug"), "GL_KHR_debug is not supported");
+       TCU_CHECK_AND_THROW(NotSupportedError, isKHRDebugSupported(m_context), "GL_KHR_debug is not supported");
 
        glu::CallLogWrapper             gl              (m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
        tcu::ResultCollector    result  (m_testCtx.getLog(), " // ERROR: ");
@@ -2631,7 +2641,7 @@ IsEnabledCase::IsEnabledCase (Context&                                                    context,
 
 IsEnabledCase::IterateResult IsEnabledCase::iterate (void)
 {
-       TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_debug"), "GL_KHR_debug is not supported");
+       TCU_CHECK_AND_THROW(NotSupportedError, isKHRDebugSupported(m_context), "GL_KHR_debug is not supported");
 
        glu::CallLogWrapper             gl              (m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
        tcu::ResultCollector    result  (m_testCtx.getLog(), " // ERROR: ");
@@ -2694,7 +2704,7 @@ PositiveIntegerCase::PositiveIntegerCase (Context&                                                        context,
 
 PositiveIntegerCase::IterateResult PositiveIntegerCase::iterate (void)
 {
-       TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_debug"), "GL_KHR_debug is not supported");
+       TCU_CHECK_AND_THROW(NotSupportedError, isKHRDebugSupported(m_context), "GL_KHR_debug is not supported");
 
        glu::CallLogWrapper             gl              (m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
        tcu::ResultCollector    result  (m_testCtx.getLog(), " // ERROR: ");
@@ -2730,7 +2740,7 @@ GroupStackDepthQueryCase::GroupStackDepthQueryCase (Context&                                              context,
 
 GroupStackDepthQueryCase::IterateResult GroupStackDepthQueryCase::iterate (void)
 {
-       TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_debug"), "GL_KHR_debug is not supported");
+       TCU_CHECK_AND_THROW(NotSupportedError, isKHRDebugSupported(m_context), "GL_KHR_debug is not supported");
 
        glu::CallLogWrapper             gl              (m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
        tcu::ResultCollector    result  (m_testCtx.getLog(), " // ERROR: ");
@@ -2775,7 +2785,7 @@ DebugCallbackFunctionCase::DebugCallbackFunctionCase (Context& context, const ch
 DebugCallbackFunctionCase::IterateResult DebugCallbackFunctionCase::iterate (void)
 {
        using namespace gls::StateQueryUtil;
-       TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_debug"), "GL_KHR_debug is not supported");
+       TCU_CHECK_AND_THROW(NotSupportedError, isKHRDebugSupported(m_context), "GL_KHR_debug is not supported");
 
        glu::CallLogWrapper             gl              (m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
        tcu::ResultCollector    result  (m_testCtx.getLog(), " // ERROR: ");
@@ -2814,7 +2824,8 @@ DebugCallbackUserParamCase::DebugCallbackUserParamCase (Context& context, const
 DebugCallbackUserParamCase::IterateResult DebugCallbackUserParamCase::iterate (void)
 {
        using namespace gls::StateQueryUtil;
-       TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_debug"), "GL_KHR_debug is not supported");
+
+       TCU_CHECK_AND_THROW(NotSupportedError, isKHRDebugSupported(m_context), "GL_KHR_debug is not supported");
 
        glu::CallLogWrapper             gl              (m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
        tcu::ResultCollector    result  (m_testCtx.getLog(), " // ERROR: ");
@@ -2897,13 +2908,17 @@ vector<FunctionContainer> wrapCoreFunctions (const vector<NegativeTestShared::Fu
 
 void DebugTests::init (void)
 {
-       const vector<FunctionContainer> bufferFuncs             = wrapCoreFunctions(NegativeTestShared::getNegativeBufferApiTestFunctions());
-       const vector<FunctionContainer> textureFuncs    = wrapCoreFunctions(NegativeTestShared::getNegativeTextureApiTestFunctions());
-       const vector<FunctionContainer> shaderFuncs             = wrapCoreFunctions(NegativeTestShared::getNegativeShaderApiTestFunctions());
-       const vector<FunctionContainer> fragmentFuncs   = wrapCoreFunctions(NegativeTestShared::getNegativeFragmentApiTestFunctions());
-       const vector<FunctionContainer> vaFuncs                 = wrapCoreFunctions(NegativeTestShared::getNegativeVertexArrayApiTestFunctions());
-       const vector<FunctionContainer> stateFuncs              = wrapCoreFunctions(NegativeTestShared::getNegativeStateApiTestFunctions());
-       const vector<FunctionContainer> externalFuncs   = getUserMessageFuncs();
+       const vector<FunctionContainer> bufferFuncs                                     = wrapCoreFunctions(NegativeTestShared::getNegativeBufferApiTestFunctions());
+       const vector<FunctionContainer> textureFuncs                            = wrapCoreFunctions(NegativeTestShared::getNegativeTextureApiTestFunctions());
+       const vector<FunctionContainer> shaderFuncs                                     = wrapCoreFunctions(NegativeTestShared::getNegativeShaderApiTestFunctions());
+       const vector<FunctionContainer> fragmentFuncs                           = wrapCoreFunctions(NegativeTestShared::getNegativeFragmentApiTestFunctions());
+       const vector<FunctionContainer> vaFuncs                                         = wrapCoreFunctions(NegativeTestShared::getNegativeVertexArrayApiTestFunctions());
+       const vector<FunctionContainer> stateFuncs                                      = wrapCoreFunctions(NegativeTestShared::getNegativeStateApiTestFunctions());
+       const vector<FunctionContainer> atomicCounterFuncs                      = wrapCoreFunctions(NegativeTestShared::getNegativeAtomicCounterTestFunctions());
+       const vector<FunctionContainer> shaderImageLoadStoreFuncs       = wrapCoreFunctions(NegativeTestShared::getNegativeShaderImageLoadStoreTestFunctions());
+       const vector<FunctionContainer> shaderFunctionFuncs                     = wrapCoreFunctions(NegativeTestShared::getNegativeShaderFunctionTestFunctions());
+       const vector<FunctionContainer> shaderDirectiveFuncs            = wrapCoreFunctions(NegativeTestShared::getNegativeShaderDirectiveTestFunctions());
+       const vector<FunctionContainer> externalFuncs                           = getUserMessageFuncs();
 
        {
                using namespace gls::StateQueryUtil;
@@ -2994,12 +3009,16 @@ void DebugTests::init (void)
                        tcu::TestCaseGroup* const       host    = new tcu::TestCaseGroup(m_testCtx, "callbacks", "Reporting of standard API errors via callback");
 
                        negative->addChild(host);
-                       host->addChild(createChildCases(CASETYPE_CALLBACK, m_context, "buffer",                 "Negative Buffer API Cases",            bufferFuncs));
-                       host->addChild(createChildCases(CASETYPE_CALLBACK, m_context, "texture",                "Negative Texture API Cases",           textureFuncs));
-                       host->addChild(createChildCases(CASETYPE_CALLBACK, m_context, "shader",                 "Negative Shader API Cases",            shaderFuncs));
-                       host->addChild(createChildCases(CASETYPE_CALLBACK, m_context, "fragment",               "Negative Fragment API Cases",          fragmentFuncs));
-                       host->addChild(createChildCases(CASETYPE_CALLBACK, m_context, "vertex_array",   "Negative Vertex Array API Cases",      vaFuncs));
-                       host->addChild(createChildCases(CASETYPE_CALLBACK, m_context, "state",                  "Negative GL State API Cases",          stateFuncs));
+                       host->addChild(createChildCases(CASETYPE_CALLBACK, m_context, "buffer",                                         "Negative Buffer API Cases",                                            bufferFuncs));
+                       host->addChild(createChildCases(CASETYPE_CALLBACK, m_context, "texture",                                        "Negative Texture API Cases",                                           textureFuncs));
+                       host->addChild(createChildCases(CASETYPE_CALLBACK, m_context, "shader",                                         "Negative Shader API Cases",                                            shaderFuncs));
+                       host->addChild(createChildCases(CASETYPE_CALLBACK, m_context, "fragment",                                       "Negative Fragment API Cases",                                          fragmentFuncs));
+                       host->addChild(createChildCases(CASETYPE_CALLBACK, m_context, "vertex_array",                           "Negative Vertex Array API Cases",                                      vaFuncs));
+                       host->addChild(createChildCases(CASETYPE_CALLBACK, m_context, "state",                                          "Negative GL State API Cases",                                          stateFuncs));
+                       host->addChild(createChildCases(CASETYPE_CALLBACK, m_context, "atomic_counter",                         "Negative Atomic Counter API Cases",                            atomicCounterFuncs));
+                       host->addChild(createChildCases(CASETYPE_CALLBACK, m_context, "shader_image_load_store",        "Negative Shader Image Load and Store API Cases",       shaderImageLoadStoreFuncs));
+                       host->addChild(createChildCases(CASETYPE_CALLBACK, m_context, "shader_function",                        "Negative Shader Function Cases",                                       shaderFunctionFuncs));
+                       host->addChild(createChildCases(CASETYPE_CALLBACK, m_context, "shader_directive",                       "Negative Shader Directive Cases",                                      shaderDirectiveFuncs));
                }
 
                {
@@ -3007,12 +3026,16 @@ void DebugTests::init (void)
 
                        negative->addChild(host);
 
-                       host->addChild(createChildCases(CASETYPE_LOG, m_context, "buffer",                              "Negative Buffer API Cases",            bufferFuncs));
-                       host->addChild(createChildCases(CASETYPE_LOG, m_context, "texture",                             "Negative Texture API Cases",           textureFuncs));
-                       host->addChild(createChildCases(CASETYPE_LOG, m_context, "shader",                              "Negative Shader API Cases",            shaderFuncs));
-                       host->addChild(createChildCases(CASETYPE_LOG, m_context, "fragment",                    "Negative Fragment API Cases",          fragmentFuncs));
-                       host->addChild(createChildCases(CASETYPE_LOG, m_context, "vertex_array",                "Negative Vertex Array API Cases",      vaFuncs));
-                       host->addChild(createChildCases(CASETYPE_LOG, m_context, "state",                               "Negative GL State API Cases",          stateFuncs));
+                       host->addChild(createChildCases(CASETYPE_LOG, m_context, "buffer",                                      "Negative Buffer API Cases",                                            bufferFuncs));
+                       host->addChild(createChildCases(CASETYPE_LOG, m_context, "texture",                                     "Negative Texture API Cases",                                           textureFuncs));
+                       host->addChild(createChildCases(CASETYPE_LOG, m_context, "shader",                                      "Negative Shader API Cases",                                            shaderFuncs));
+                       host->addChild(createChildCases(CASETYPE_LOG, m_context, "fragment",                            "Negative Fragment API Cases",                                          fragmentFuncs));
+                       host->addChild(createChildCases(CASETYPE_LOG, m_context, "vertex_array",                        "Negative Vertex Array API Cases",                                      vaFuncs));
+                       host->addChild(createChildCases(CASETYPE_LOG, m_context, "state",                                       "Negative GL State API Cases",                                          stateFuncs));
+                       host->addChild(createChildCases(CASETYPE_LOG, m_context, "atomic_counter",                      "Negative Atomic Counter API Cases",                            atomicCounterFuncs));
+                       host->addChild(createChildCases(CASETYPE_LOG, m_context, "shader_image_load_store",     "Negative Shader Image Load and Store API Cases",       shaderImageLoadStoreFuncs));
+                       host->addChild(createChildCases(CASETYPE_LOG, m_context, "shader_function",                     "Negative Shader Function Cases",                                       shaderFunctionFuncs));
+                       host->addChild(createChildCases(CASETYPE_LOG, m_context, "shader_directive",            "Negative Shader Directive Cases",                                      shaderDirectiveFuncs));
                }
 
                {
@@ -3020,12 +3043,16 @@ void DebugTests::init (void)
 
                        negative->addChild(host);
 
-                       host->addChild(createChildCases(CASETYPE_GETERROR, m_context, "buffer",                 "Negative Buffer API Cases",            bufferFuncs));
-                       host->addChild(createChildCases(CASETYPE_GETERROR, m_context, "texture",                "Negative Texture API Cases",           textureFuncs));
-                       host->addChild(createChildCases(CASETYPE_GETERROR, m_context, "shader",                 "Negative Shader API Cases",            shaderFuncs));
-                       host->addChild(createChildCases(CASETYPE_GETERROR, m_context, "fragment",               "Negative Fragment API Cases",          fragmentFuncs));
-                       host->addChild(createChildCases(CASETYPE_GETERROR, m_context, "vertex_array",   "Negative Vertex Array API Cases",      vaFuncs));
-                       host->addChild(createChildCases(CASETYPE_GETERROR, m_context, "state",                  "Negative GL State API Cases",          stateFuncs));
+                       host->addChild(createChildCases(CASETYPE_GETERROR, m_context, "buffer",                                         "Negative Buffer API Cases",                                            bufferFuncs));
+                       host->addChild(createChildCases(CASETYPE_GETERROR, m_context, "texture",                                        "Negative Texture API Cases",                                           textureFuncs));
+                       host->addChild(createChildCases(CASETYPE_GETERROR, m_context, "shader",                                         "Negative Shader API Cases",                                            shaderFuncs));
+                       host->addChild(createChildCases(CASETYPE_GETERROR, m_context, "fragment",                                       "Negative Fragment API Cases",                                          fragmentFuncs));
+                       host->addChild(createChildCases(CASETYPE_GETERROR, m_context, "vertex_array",                           "Negative Vertex Array API Cases",                                      vaFuncs));
+                       host->addChild(createChildCases(CASETYPE_GETERROR, m_context, "state",                                          "Negative GL State API Cases",                                          stateFuncs));
+                       host->addChild(createChildCases(CASETYPE_GETERROR, m_context, "atomic_counter",                         "Negative Atomic Counter API Cases",                            atomicCounterFuncs));
+                       host->addChild(createChildCases(CASETYPE_GETERROR, m_context, "shader_image_load_store",        "Negative Shader Image Load and Store API Cases",       shaderImageLoadStoreFuncs));
+                       host->addChild(createChildCases(CASETYPE_GETERROR, m_context, "shader_function",                        "Negative Shader Function Cases",                                       shaderFunctionFuncs));
+                       host->addChild(createChildCases(CASETYPE_GETERROR, m_context, "shader_directive",                       "Negative Shader Directive Cases",                                      shaderDirectiveFuncs));
                }
        }