Merge "Fix uniform precision qualifier mismatch in GLES3 conditional tests."
authorMika Isojarvi <misojarvi@google.com>
Thu, 4 Feb 2016 19:09:27 +0000 (19:09 +0000)
committerAndroid (Google) Code Review <android-gerrit@google.com>
Thu, 4 Feb 2016 19:09:27 +0000 (19:09 +0000)
105 files changed:
Android.mk
CMakeLists.txt
android/cts/master/com.drawelements.deqp.egl.xml
android/cts/master/com.drawelements.deqp.gles2.xml
android/cts/master/com.drawelements.deqp.gles3.xml
android/cts/master/com.drawelements.deqp.gles31.xml
android/cts/master/egl-master.txt
android/cts/master/gles2-master.txt
android/cts/master/gles3-565-no-depth-no-stencil.txt
android/cts/master/gles3-master.txt
android/cts/master/gles31-master.txt
android/cts/master/src/egl-internal-api-tests.txt [new file with mode: 0644]
android/cts/master/src/egl-test-issues.txt [new file with mode: 0644]
android/cts/master/src/gles2-failures.txt
android/cts/master/src/gles2-test-issues.txt
android/cts/master/src/gles3-test-issues.txt
android/cts/master/src/gles31-test-issues.txt
android/cts/mnc/com.drawelements.deqp.gles31.xml
android/cts/mnc/gles31-master.txt
android/cts/mnc/src/gles31-master.txt
data/gles2/shaders/loops.test
external/vulkancts/modules/vulkan/api/vktApiCommandBuffersTests.cpp
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
framework/common/tcuImageIO.cpp
framework/egl/egluStaticES20Library.inl
framework/egl/egluStaticES30Library.inl
framework/opengl/gluCallLogUtil.inl
framework/opengl/gluCallLogWrapper.inl
framework/opengl/gluCallLogWrapperApi.inl
framework/opengl/gluES3PlusWrapperContext.cpp
framework/opengl/gluES3PlusWrapperFuncs.inl
framework/opengl/gluQueryUtil.inl
framework/opengl/gluRenderContext.cpp
framework/opengl/gluStateReset.cpp
framework/opengl/gluStrUtil.inl
framework/opengl/gluStrUtilPrototypes.inl
framework/opengl/wrapper/glwApi.inl
framework/opengl/wrapper/glwEnums.inl
framework/opengl/wrapper/glwFunctionTypes.inl
framework/opengl/wrapper/glwFunctions.inl
framework/opengl/wrapper/glwImpl.inl
framework/opengl/wrapper/glwInitES20.inl
framework/opengl/wrapper/glwInitES20Direct.inl
framework/opengl/wrapper/glwInitES30.inl
framework/opengl/wrapper/glwInitES30Direct.inl
framework/opengl/wrapper/glwInitES31.inl
framework/opengl/wrapper/glwInitES31Direct.inl
framework/opengl/wrapper/glwInitES32.inl [new file with mode: 0644]
framework/opengl/wrapper/glwInitES32Direct.inl [new file with mode: 0644]
framework/opengl/wrapper/glwInitExtES.inl
framework/opengl/wrapper/glwInitExtGL.inl
framework/opengl/wrapper/glwInitFunctions.cpp
framework/opengl/wrapper/glwInitFunctions.hpp
framework/opengl/wrapper/glwInitGL30.inl
framework/opengl/wrapper/glwInitGL31.inl
framework/opengl/wrapper/glwInitGL32.inl
framework/opengl/wrapper/glwInitGL33.inl
framework/opengl/wrapper/glwInitGL40.inl
framework/opengl/wrapper/glwInitGL41.inl
framework/opengl/wrapper/glwInitGL42.inl
framework/opengl/wrapper/glwInitGL43.inl
framework/opengl/wrapper/glwInitGL44.inl
framework/opengl/wrapper/glwInitGL45.inl
framework/platform/null/tcuNullRenderContextFuncs.inl
framework/platform/null/tcuNullRenderContextInitFuncs.inl
modules/egl/teglAndroidUtil.cpp
modules/egl/teglNegativeApiTests.cpp
modules/gles2/functional/es2fDitheringTests.cpp
modules/gles3/functional/es3fASTCDecompressionCases.cpp
modules/gles3/functional/es3fDitheringTests.cpp
modules/gles3/functional/es3fFboTestCase.cpp
modules/gles3/functional/es3fNegativeBufferApiTests.cpp
modules/gles3/functional/es3fNegativeShaderApiTests.cpp
modules/gles31/functional/CMakeLists.txt
modules/gles31/functional/es31fAdvancedBlendTests.cpp
modules/gles31/functional/es31fBooleanStateQueryTests.cpp
modules/gles31/functional/es31fCopyImageTests.cpp
modules/gles31/functional/es31fDebugTests.cpp
modules/gles31/functional/es31fDrawBuffersIndexedTests.cpp
modules/gles31/functional/es31fFboColorbufferTests.cpp
modules/gles31/functional/es31fFboTestCase.cpp
modules/gles31/functional/es31fGeometryShaderTests.cpp
modules/gles31/functional/es31fIndexedStateQueryTests.cpp
modules/gles31/functional/es31fIntegerStateQueryTests.cpp
modules/gles31/functional/es31fInternalFormatQueryTests.cpp
modules/gles31/functional/es31fNegativeAtomicCounterTests.cpp [new file with mode: 0644]
modules/gles31/functional/es31fNegativeAtomicCounterTests.hpp [new file with mode: 0644]
modules/gles31/functional/es31fNegativeFragmentApiTests.cpp
modules/gles31/functional/es31fNegativeShaderApiTests.cpp
modules/gles31/functional/es31fNegativeShaderImageLoadStoreTests.cpp [new file with mode: 0644]
modules/gles31/functional/es31fNegativeShaderImageLoadStoreTests.hpp [new file with mode: 0644]
modules/gles31/functional/es31fNegativeStateApiTests.cpp
modules/gles31/functional/es31fNegativeTestShared.cpp
modules/gles31/functional/es31fNegativeTestShared.hpp
modules/gles31/functional/es31fNegativeTextureApiTests.cpp
modules/gles31/functional/es31fNegativeVertexArrayApiTests.cpp
modules/gles31/functional/es31fOpaqueTypeIndexingTests.cpp
modules/gles31/functional/es31fPrimitiveBoundingBoxTests.cpp
modules/gles31/functional/es31fProgramStateQueryTests.cpp
modules/gles31/functional/es31fShaderHelperInvocationTests.cpp
modules/gles31/functional/es31fShaderTextureSizeTests.cpp
modules/gles31/functional/es31fTessellationTests.cpp
modules/gles31/tes31Context.cpp
scripts/build_android_mustpass.py
scripts/opengl/src_util.py

index 808a7b5..c3820ac 100644 (file)
@@ -567,9 +567,11 @@ LOCAL_SRC_FILES := \
        modules/gles31/functional/es31fLayoutBindingTests.cpp \
        modules/gles31/functional/es31fMultisampleShaderRenderCase.cpp \
        modules/gles31/functional/es31fMultisampleTests.cpp \
+       modules/gles31/functional/es31fNegativeAtomicCounterTests.cpp \
        modules/gles31/functional/es31fNegativeBufferApiTests.cpp \
        modules/gles31/functional/es31fNegativeFragmentApiTests.cpp \
        modules/gles31/functional/es31fNegativeShaderApiTests.cpp \
+       modules/gles31/functional/es31fNegativeShaderImageLoadStoreTests.cpp \
        modules/gles31/functional/es31fNegativeStateApiTests.cpp \
        modules/gles31/functional/es31fNegativeTestShared.cpp \
        modules/gles31/functional/es31fNegativeTextureApiTests.cpp \
index fdd9d17..da4b5bf 100644 (file)
@@ -66,7 +66,7 @@ endif ()
 include_directories(${ZLIB_INCLUDE_PATH})
 
 # libpng
-find_path(PNG_INCLUDE_PATH     libpng.h)
+find_path(PNG_INCLUDE_PATH     png.h)
 find_library(PNG_LIBRARY       png)
 
 if (NOT PNG_INCLUDE_PATH OR NOT PNG_LIBRARY)
index 47f672b..dd0fc89 100644 (file)
                                        <Test name="create_image_gles2_renderbuffer_stencil_index8">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="create_image_gles2_android_native_rgb565">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="create_image_gles2_android_native_rgb8">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="create_image_gles2_android_native_rgba4">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="create_image_gles2_android_native_rgb5_a1">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="create_image_gles2_android_native_rgba8">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
                                        <Test name="image_target_gles2_tex2d">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
                                        <Test name="gles2_renderbuffer_stencil_stencil_buffer">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="gles2_android_native_rgb565_texture">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="gles2_android_native_rgb565_read_pixels">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="gles2_android_native_rgb8_texture">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="gles2_android_native_rgb8_read_pixels">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="gles2_android_native_rgba4_texture">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="gles2_android_native_rgba4_read_pixels">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="gles2_android_native_rgb5_a1_texture">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="gles2_android_native_rgb5_a1_read_pixels">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="gles2_android_native_rgba8_texture">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="gles2_android_native_rgba8_read_pixels">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
                                </TestCase>
                                <TestCase name="modify">
                                        <Test name="tex_rgb8_tex_subimage_rgb8">
                                        <Test name="renderbuffer_stencil_renderbuffer_clear_stencil">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="android_native_rgb565_tex_subimage_rgb8">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="android_native_rgb565_tex_subimage_rgb565">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="android_native_rgb565_renderbuffer_clear_color">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="android_native_rgb8_tex_subimage_rgb8">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="android_native_rgb8_tex_subimage_rgb565">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="android_native_rgb8_renderbuffer_clear_color">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="android_native_rgba4_tex_subimage_rgba8">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="android_native_rgba4_tex_subimage_rgba5_a1">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="android_native_rgba4_tex_subimage_rgba4">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="android_native_rgba4_renderbuffer_clear_color">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="android_native_rgb5_a1_tex_subimage_rgba8">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="android_native_rgb5_a1_tex_subimage_rgba5_a1">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="android_native_rgb5_a1_tex_subimage_rgba4">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="android_native_rgb5_a1_renderbuffer_clear_color">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="android_native_rgba8_tex_subimage_rgba8">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="android_native_rgba8_tex_subimage_rgba5_a1">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="android_native_rgba8_tex_subimage_rgba4">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="android_native_rgba8_renderbuffer_clear_color">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
                                </TestCase>
                                <TestCase name="render_multiple_contexts">
                                        <Test name="gles2_texture_rgb8_texture">
                                        <Test name="gles2_renderbuffer_stencil_stencil_buffer">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="gles2_android_native_rgb565_texture">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="gles2_android_native_rgb565_read_pixels">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="gles2_android_native_rgb8_texture">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="gles2_android_native_rgb8_read_pixels">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="gles2_android_native_rgba4_texture">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="gles2_android_native_rgba4_read_pixels">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="gles2_android_native_rgb5_a1_texture">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="gles2_android_native_rgb5_a1_read_pixels">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="gles2_android_native_rgba8_texture">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
-                                       <Test name="gles2_android_native_rgba8_read_pixels">
-                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                       </Test>
                                </TestCase>
                        </TestSuite>
                        <TestSuite name="sharing">
                                <Test name="get_configs">
                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                </Test>
-                               <Test name="get_display">
-                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                               </Test>
                                <Test name="initialize">
                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                </Test>
                                <Test name="pixmap">
                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                </Test>
-                               <Test name="window">
-                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                               </Test>
                                <Test name="single_window">
                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                </Test>
                                <Test name="pbuffer_pixmap">
                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                </Test>
-                               <Test name="pbuffer_window">
-                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                               </Test>
                                <Test name="pbuffer_single_window">
                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                </Test>
                                <Test name="pbuffer_context">
                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                </Test>
-                               <Test name="pixmap_window">
-                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                               </Test>
                                <Test name="pixmap_single_window">
                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                </Test>
                                <Test name="pixmap_context">
                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                </Test>
-                               <Test name="window_context">
-                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                               </Test>
                                <Test name="single_window_context">
                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                </Test>
-                               <Test name="pbuffer_pixmap_window">
-                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                               </Test>
                                <Test name="pbuffer_pixmap_single_window">
                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                </Test>
                                <Test name="pbuffer_pixmap_context">
                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                </Test>
-                               <Test name="pbuffer_window_context">
-                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                               </Test>
                                <Test name="pbuffer_single_window_context">
                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                </Test>
-                               <Test name="pixmap_window_context">
-                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                               </Test>
                                <Test name="pixmap_single_window_context">
                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                </Test>
-                               <Test name="pbuffer_pixmap_window_context">
-                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                               </Test>
                                <Test name="pbuffer_pixmap_single_window_context">
                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                </Test>
index 6e8a503..5a7f0da 100644 (file)
                                                </TestCase>
                                        </TestSuite>
                                </TestSuite>
-                               <TestSuite name="units">
-                                       <TestSuite name="2_units">
-                                               <TestCase name="only_2d">
-                                                       <Test name="0">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="1">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="2">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="3">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="4">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="5">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="6">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="7">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="8">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="9">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                               </TestCase>
-                                               <TestCase name="only_cube">
-                                                       <Test name="2">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="4">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="5">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="6">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="7">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="8">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                               </TestCase>
-                                               <TestCase name="mixed">
-                                                       <Test name="3">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="4">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="6">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="7">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="8">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="9">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                               </TestCase>
-                                       </TestSuite>
-                                       <TestSuite name="4_units">
-                                               <TestCase name="only_2d">
-                                                       <Test name="0">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="1">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="2">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="3">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="4">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="5">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="6">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="7">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="8">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="9">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                               </TestCase>
-                                               <TestCase name="only_cube">
-                                                       <Test name="0">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="1">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="2">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="3">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="4">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="5">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="6">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="7">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="8">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="9">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                               </TestCase>
-                                               <TestCase name="mixed">
-                                                       <Test name="0">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="1">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="2">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="3">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="4">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="5">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="7">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="8">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="9">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                               </TestCase>
-                                       </TestSuite>
-                                       <TestSuite name="8_units">
-                                               <TestCase name="only_2d">
-                                                       <Test name="0">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="1">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="2">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="3">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="4">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="5">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="6">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="7">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="8">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="9">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                               </TestCase>
-                                               <TestCase name="only_cube">
-                                                       <Test name="0">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="1">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="2">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="3">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="4">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="5">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="6">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="7">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="8">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="9">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                               </TestCase>
-                                               <TestCase name="mixed">
-                                                       <Test name="0">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="1">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="2">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="3">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="4">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="5">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="6">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="7">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="8">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="9">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                               </TestCase>
-                                       </TestSuite>
-                                       <TestSuite name="all_units">
-                                               <TestCase name="only_2d">
-                                                       <Test name="0">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="1">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="2">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="3">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="4">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="5">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="6">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="7">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="8">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="9">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                               </TestCase>
-                                               <TestCase name="only_cube">
-                                                       <Test name="0">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="1">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="2">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="3">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="4">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="5">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="6">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="7">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="8">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="9">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                               </TestCase>
-                                               <TestCase name="mixed">
-                                                       <Test name="0">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="1">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="2">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="3">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="4">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="5">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="6">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="7">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="8">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                                       <Test name="9">
-                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-                                                       </Test>
-                                               </TestCase>
-                                       </TestSuite>
-                               </TestSuite>
                        </TestSuite>
                        <TestSuite name="fragment_ops">
                                <TestCase name="depth">
                        </TestSuite>
                        <TestSuite name="dither">
                                <TestCase name="disabled">
+                                       <Test name="gradient_white">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="gradient_red">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="gradient_green">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="gradient_blue">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="gradient_alpha">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
                                        <Test name="unicolored_quad_white">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
index 58032fb..ce42d24 100644 (file)
                        </TestSuite>
                        <TestSuite name="dither">
                                <TestCase name="disabled">
+                                       <Test name="gradient_white">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               <TestInstance glconfig="rgb565d0s0ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="gradient_red">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               <TestInstance glconfig="rgb565d0s0ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="gradient_green">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               <TestInstance glconfig="rgb565d0s0ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="gradient_blue">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               <TestInstance glconfig="rgb565d0s0ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="gradient_alpha">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               <TestInstance glconfig="rgb565d0s0ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
                                        <Test name="unicolored_quad_white">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                <TestInstance glconfig="rgb565d0s0ms0" rotation="unspecified" surfacetype="window"/>
index 72145a2..d190c37 100644 (file)
                                                <Test name="lines_4_samples_fwidth">
                                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                </Test>
+                                               <Test name="wide_lines_4_samples_dfdx">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="wide_lines_4_samples_dfdy">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="wide_lines_4_samples_fwidth">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
                                                <Test name="points_4_samples_dfdx">
                                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                </Test>
                                                <Test name="lines_8_samples_fwidth">
                                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                </Test>
+                                               <Test name="wide_lines_8_samples_dfdx">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="wide_lines_8_samples_dfdy">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="wide_lines_8_samples_fwidth">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
                                                <Test name="points_8_samples_dfdx">
                                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                </Test>
                                                <Test name="lines_max_samples_fwidth">
                                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                </Test>
+                                               <Test name="wide_lines_max_samples_dfdx">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="wide_lines_max_samples_dfdy">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="wide_lines_max_samples_fwidth">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
                                                <Test name="points_max_samples_dfdx">
                                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                </Test>
                                        <Test name="sample_mask_getfloat">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
+                                       <Test name="sample_shading_isenabled">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="sample_shading_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="sample_shading_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="sample_shading_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="sample_shading_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="debug_output_isenabled">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="debug_output_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="debug_output_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="debug_output_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="debug_output_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="debug_output_synchronous_isenabled">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="debug_output_synchronous_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="debug_output_synchronous_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="debug_output_synchronous_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="debug_output_synchronous_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
                                </TestCase>
                                <TestCase name="integer">
                                        <Test name="max_color_texture_samples_getboolean">
                                        <Test name="texture_binding_cube_map_array_getfloat">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
+                                       <Test name="texture_binding_buffer_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="texture_binding_buffer_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="texture_binding_buffer_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="texture_binding_buffer_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
                                        <Test name="max_vertex_attrib_relative_offset_getboolean">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
                                        <Test name="max_program_texture_gather_offset_getfloat">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                               </TestCase>
-                               <TestCase name="indexed">
-                                       <Test name="sample_mask_value_getbooleani_v">
+                                       <Test name="max_framebuffer_layers_getboolean">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="sample_mask_value_getintegeri_v">
+                                       <Test name="max_framebuffer_layers_getinteger">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="sample_mask_value_getinteger64i_v">
+                                       <Test name="max_framebuffer_layers_getinteger64">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="max_compute_work_group_count_getbooleani_v">
+                                       <Test name="max_framebuffer_layers_getfloat">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="max_compute_work_group_count_getintegeri_v">
+                                       <Test name="fragment_interpolation_offset_bits_getboolean">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="max_compute_work_group_count_getinteger64i_v">
+                                       <Test name="fragment_interpolation_offset_bits_getinteger">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="max_compute_work_group_size_getbooleani_v">
+                                       <Test name="fragment_interpolation_offset_bits_getinteger64">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="max_compute_work_group_size_getintegeri_v">
+                                       <Test name="fragment_interpolation_offset_bits_getfloat">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="max_compute_work_group_size_getinteger64i_v">
+                                       <Test name="max_texture_buffer_size_getboolean">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="atomic_counter_buffer_binding_getbooleani_v">
+                                       <Test name="max_texture_buffer_size_getinteger">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="atomic_counter_buffer_binding_getintegeri_v">
+                                       <Test name="max_texture_buffer_size_getinteger64">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="atomic_counter_buffer_binding_getinteger64i_v">
+                                       <Test name="max_texture_buffer_size_getfloat">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="atomic_counter_buffer_start_getbooleani_v">
+                                       <Test name="texture_buffer_offset_alignment_getboolean">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="atomic_counter_buffer_start_getintegeri_v">
+                                       <Test name="texture_buffer_offset_alignment_getinteger">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="atomic_counter_buffer_start_getinteger64i_v">
+                                       <Test name="texture_buffer_offset_alignment_getinteger64">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="atomic_counter_buffer_size_getbooleani_v">
+                                       <Test name="texture_buffer_offset_alignment_getfloat">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="atomic_counter_buffer_size_getintegeri_v">
+                                       <Test name="max_tess_gen_level_getboolean">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="atomic_counter_buffer_size_getinteger64i_v">
+                                       <Test name="max_tess_gen_level_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_gen_level_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_gen_level_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_patch_vertices_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_patch_vertices_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_patch_vertices_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_patch_vertices_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_patch_components_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_patch_components_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_patch_components_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_patch_components_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_uniform_components_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_uniform_components_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_uniform_components_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_uniform_components_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_texture_image_units_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_texture_image_units_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_texture_image_units_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_texture_image_units_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_output_components_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_output_components_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_output_components_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_output_components_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_total_output_components_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_total_output_components_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_total_output_components_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_total_output_components_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_input_components_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_input_components_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_input_components_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_input_components_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_uniform_blocks_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_uniform_blocks_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_uniform_blocks_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_uniform_blocks_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_atomic_counter_buffers_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_atomic_counter_buffers_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_atomic_counter_buffers_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_atomic_counter_buffers_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_atomic_counters_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_atomic_counters_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_atomic_counters_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_atomic_counters_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_shader_storage_blocks_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_shader_storage_blocks_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_shader_storage_blocks_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_shader_storage_blocks_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_uniform_components_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_uniform_components_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_uniform_components_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_uniform_components_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_texture_image_units_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_texture_image_units_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_texture_image_units_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_texture_image_units_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_output_components_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_output_components_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_output_components_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_output_components_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_input_components_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_input_components_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_input_components_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_input_components_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_uniform_blocks_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_uniform_blocks_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_uniform_blocks_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_uniform_blocks_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_atomic_counter_buffers_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_atomic_counter_buffers_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_atomic_counter_buffers_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_atomic_counter_buffers_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_atomic_counters_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_atomic_counters_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_atomic_counters_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_atomic_counters_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_shader_storage_blocks_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_shader_storage_blocks_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_shader_storage_blocks_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_shader_storage_blocks_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_uniform_components_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_uniform_components_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_uniform_components_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_uniform_components_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_uniform_blocks_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_uniform_blocks_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_uniform_blocks_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_uniform_blocks_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_input_components_getboolean">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="shader_storager_buffer_binding_getbooleani_v">
+                                       <Test name="max_geometry_input_components_getinteger">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="shader_storager_buffer_binding_getintegeri_v">
+                                       <Test name="max_geometry_input_components_getinteger64">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="shader_storager_buffer_binding_getinteger64i_v">
+                                       <Test name="max_geometry_input_components_getfloat">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="shader_storager_buffer_start_getbooleani_v">
+                                       <Test name="max_geometry_output_components_getboolean">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="shader_storager_buffer_start_getintegeri_v">
+                                       <Test name="max_geometry_output_components_getinteger">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="shader_storager_buffer_start_getinteger64i_v">
+                                       <Test name="max_geometry_output_components_getinteger64">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="shader_storager_buffer_size_getbooleani_v">
+                                       <Test name="max_geometry_output_components_getfloat">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="shader_storager_buffer_size_getintegeri_v">
+                                       <Test name="max_geometry_output_vertices_getboolean">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="shader_storager_buffer_size_getinteger64i_v">
+                                       <Test name="max_geometry_output_vertices_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_output_vertices_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_output_vertices_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_total_output_components_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_total_output_components_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_total_output_components_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_total_output_components_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_texture_image_units_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_texture_image_units_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_texture_image_units_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_texture_image_units_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_shader_invocations_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_shader_invocations_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_shader_invocations_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_shader_invocations_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_atomic_counter_buffers_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_atomic_counter_buffers_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_atomic_counter_buffers_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_atomic_counter_buffers_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_atomic_counters_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_atomic_counters_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_atomic_counters_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_atomic_counters_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_shader_storage_blocks_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_shader_storage_blocks_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_shader_storage_blocks_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_shader_storage_blocks_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_image_uniforms_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_image_uniforms_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_image_uniforms_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_control_image_uniforms_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_image_uniforms_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_image_uniforms_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_image_uniforms_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_tess_evaluation_image_uniforms_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_image_uniforms_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_image_uniforms_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_image_uniforms_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_geometry_image_uniforms_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="debug_logged_messages_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="debug_logged_messages_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="debug_logged_messages_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="debug_logged_messages_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="debug_next_logged_message_length_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="debug_next_logged_message_length_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="debug_next_logged_message_length_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="debug_next_logged_message_length_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="debug_group_stack_depth_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="debug_group_stack_depth_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="debug_group_stack_depth_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="debug_group_stack_depth_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_debug_message_length_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_debug_message_length_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_debug_message_length_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_debug_message_length_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_debug_logged_messages_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_debug_logged_messages_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_debug_logged_messages_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_debug_logged_messages_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_debug_group_stack_depth_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_debug_group_stack_depth_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_debug_group_stack_depth_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_debug_group_stack_depth_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_label_length_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_label_length_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_label_length_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_label_length_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="texture_buffer_binding_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="texture_buffer_binding_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="texture_buffer_binding_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="texture_buffer_binding_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_combined_tess_control_uniform_components_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_combined_tess_control_uniform_components_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_combined_tess_control_uniform_components_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_combined_tess_control_uniform_components_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_combined_tess_evaluation_uniform_components_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_combined_tess_evaluation_uniform_components_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_combined_tess_evaluation_uniform_components_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_combined_tess_evaluation_uniform_components_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_combined_geometry_uniform_components_getboolean">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_combined_geometry_uniform_components_getinteger">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_combined_geometry_uniform_components_getinteger64">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_combined_geometry_uniform_components_getfloat">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                               </TestCase>
+                               <TestCase name="indexed">
+                                       <Test name="sample_mask_value_getbooleani_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="sample_mask_value_getintegeri_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="sample_mask_value_getinteger64i_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_compute_work_group_count_getbooleani_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_compute_work_group_count_getintegeri_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_compute_work_group_count_getinteger64i_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_compute_work_group_size_getbooleani_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_compute_work_group_size_getintegeri_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="max_compute_work_group_size_getinteger64i_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="atomic_counter_buffer_binding_getbooleani_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="atomic_counter_buffer_binding_getintegeri_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="atomic_counter_buffer_binding_getinteger64i_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="atomic_counter_buffer_start_getbooleani_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="atomic_counter_buffer_start_getintegeri_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="atomic_counter_buffer_start_getinteger64i_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="atomic_counter_buffer_size_getbooleani_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="atomic_counter_buffer_size_getintegeri_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="atomic_counter_buffer_size_getinteger64i_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="shader_storage_buffer_binding_getbooleani_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="shader_storage_buffer_binding_getintegeri_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="shader_storage_buffer_binding_getinteger64i_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="shader_storage_buffer_start_getbooleani_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="shader_storage_buffer_start_getintegeri_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="shader_storage_buffer_start_getinteger64i_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="shader_storage_buffer_size_getbooleani_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="shader_storage_buffer_size_getintegeri_v">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="shader_storage_buffer_size_getinteger64i_v">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
                                        <Test name="image_binding_name_getbooleani_v">
                                                <Test name="rgba32ui_samples">
                                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                </Test>
+                                               <Test name="r16f_samples">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="rg16f_samples">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="rgba16f_samples">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="r32f_samples">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="rg32f_samples">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="rgba32f_samples">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="r11f_g11f_b10f_samples">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
                                                <Test name="depth_component16_samples">
                                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                </Test>
                                                <Test name="rgba32ui_samples">
                                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                </Test>
+                                               <Test name="r16f_samples">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="rg16f_samples">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="rgba16f_samples">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="r32f_samples">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="rg32f_samples">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="rgba32f_samples">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="r11f_g11f_b10f_samples">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
                                                <Test name="depth_component16_samples">
                                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                </Test>
                                                <Test name="rgba32ui_samples">
                                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                </Test>
+                                               <Test name="r16f_samples">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="rg16f_samples">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="rgba16f_samples">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="r32f_samples">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="rg32f_samples">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="rgba32f_samples">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
+                                               <Test name="r11f_g11f_b10f_samples">
+                                                       <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                               </Test>
                                                <Test name="depth_component16_samples">
                                                        <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                </Test>
                                        <Test name="active_atomic_counter_buffers_get_programiv">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
+                                       <Test name="geometry_shader_state_get_programiv">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
+                                       <Test name="tesselation_shader_state_get_programiv">
+                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                       </Test>
                                        <Test name="info_log_vertex_fragment_link_fail">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
                                                        <Test name="compressedteximage2d_invalid_size">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="compressedteximage2d_neg_size">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="compressedteximage2d_invalid_width_height">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="compressedteximage2d_invalid_buffer_target">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="copytexsubimage2d_invalid_target">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="copytexsubimage2d_read_buffer_is_none">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="copytexsubimage2d_texture_internalformat">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="copytexsubimage2d_neg_level">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="texparameterfv">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="texparameterIiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="texparameterIuiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="compressedtexsubimage2d">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="compressedteximage3d_invalid_size">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="compressedteximage3d_invalid_width_height">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="compressedteximage3d_invalid_format">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="compressedteximage3d_invalid_buffer_target">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="get_sampler_parameterfv">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="get_sampler_parameterIiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="get_sampler_parameterIuiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="sampler_parameteri">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="sampler_parameterfv">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="sampler_parameterIiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="sampler_parameterIuiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="get_attrib_location">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="transform_feedback_varyings">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="compile_compute_shader">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="link_compute_shader">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                </TestCase>
                                                <TestCase name="fragment">
                                                        <Test name="scissor">
                                                        <Test name="blend_equation">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="blend_equationi">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="blend_equation_separate">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="blend_equation_separatei">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="blend_func">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="blend_funci">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="blend_func_separate">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="blend_func_separatei">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="cull_face">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="vertex_attrib_i_pointer">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="vertex_attrib_format">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="vertex_attrib_i_format">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="enable_vertex_attrib_array">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="draw_elements">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="draw_elements_base_vertex">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="draw_elements_invalid_program">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="draw_elements_instanced_incomplete_primitive">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="draw_elements_instanced_base_vertex">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="draw_range_elements">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="draw_range_elements_incomplete_primitive">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="draw_range_elements_base_vertex">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                </TestCase>
                                                <TestCase name="state">
                                                        <Test name="enable">
                                                        <Test name="get_integeri_v">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="get_booleani_v">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="get_integer64i_v">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="hint">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="enablei">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="disablei">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="get_tex_parameteriiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="get_tex_parameteriuiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="get_nuniformfv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="get_nuniformiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="get_nuniformuiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="is_enabledi">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                               </TestCase>
+                                               <TestCase name="atomic_counter">
+                                                       <Test name="atomic_max_counter_bindings">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="atomic_precision">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="atomic_binding_offset_overlap">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="atomic_binding_omitted">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="atomic_struct">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="atomic_body_write">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="atomic_body_declare">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                               </TestCase>
+                                               <TestCase name="shader_image_load_store">
+                                                       <Test name="image_store">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="image_load">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="image_atomic">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="image_atomic_exchange">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                </TestCase>
                                        </TestSuite>
                                        <TestSuite name="log">
                                                        <Test name="compressedteximage2d_invalid_size">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="compressedteximage2d_neg_size">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="compressedteximage2d_invalid_width_height">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="compressedteximage2d_invalid_buffer_target">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="copytexsubimage2d_invalid_target">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="copytexsubimage2d_read_buffer_is_none">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="copytexsubimage2d_texture_internalformat">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="copytexsubimage2d_neg_level">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="texparameterfv">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="texparameterIiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="texparameterIuiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="compressedtexsubimage2d">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="compressedteximage3d_invalid_size">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="compressedteximage3d_invalid_width_height">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="compressedteximage3d_invalid_format">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="compressedteximage3d_invalid_buffer_target">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="get_sampler_parameterfv">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="get_sampler_parameterIiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="get_sampler_parameterIuiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="sampler_parameteri">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="sampler_parameterfv">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="sampler_parameterIiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="sampler_parameterIuiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="get_attrib_location">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="transform_feedback_varyings">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="compile_compute_shader">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="link_compute_shader">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                </TestCase>
                                                <TestCase name="fragment">
                                                        <Test name="scissor">
                                                        <Test name="blend_equation">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="blend_equationi">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="blend_equation_separate">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="blend_equation_separatei">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="blend_func">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="blend_funci">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="blend_func_separate">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="blend_func_separatei">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="cull_face">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="vertex_attrib_i_pointer">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="vertex_attrib_format">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="vertex_attrib_i_format">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="enable_vertex_attrib_array">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="draw_elements">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="draw_elements_base_vertex">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="draw_elements_invalid_program">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="draw_elements_instanced_incomplete_primitive">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="draw_elements_instanced_base_vertex">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="draw_range_elements">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="draw_range_elements_incomplete_primitive">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="draw_range_elements_base_vertex">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                </TestCase>
                                                <TestCase name="state">
                                                        <Test name="enable">
                                                        <Test name="get_integeri_v">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="get_booleani_v">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="get_integer64i_v">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="hint">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="enablei">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="disablei">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="get_tex_parameteriiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="get_tex_parameteriuiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="get_nuniformfv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="get_nuniformiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="get_nuniformuiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="is_enabledi">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                               </TestCase>
+                                               <TestCase name="atomic_counter">
+                                                       <Test name="atomic_max_counter_bindings">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="atomic_precision">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="atomic_binding_offset_overlap">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="atomic_binding_omitted">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="atomic_struct">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="atomic_body_write">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="atomic_body_declare">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                               </TestCase>
+                                               <TestCase name="shader_image_load_store">
+                                                       <Test name="image_store">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="image_load">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="image_atomic">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="image_atomic_exchange">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                </TestCase>
                                        </TestSuite>
                                        <TestSuite name="get_error">
                                                        <Test name="compressedteximage2d_invalid_size">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="compressedteximage2d_neg_size">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="compressedteximage2d_invalid_width_height">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="compressedteximage2d_invalid_buffer_target">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="copytexsubimage2d_invalid_target">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="copytexsubimage2d_read_buffer_is_none">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="copytexsubimage2d_texture_internalformat">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="copytexsubimage2d_neg_level">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="texparameterfv">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="texparameterIiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="texparameterIuiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="compressedtexsubimage2d">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="compressedteximage3d_invalid_size">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="compressedteximage3d_invalid_width_height">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="compressedteximage3d_invalid_format">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="compressedteximage3d_invalid_buffer_target">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="get_sampler_parameterfv">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="get_sampler_parameterIiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="get_sampler_parameterIuiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="sampler_parameteri">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="sampler_parameterfv">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="sampler_parameterIiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="sampler_parameterIuiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="get_attrib_location">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="transform_feedback_varyings">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="compile_compute_shader">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="link_compute_shader">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                </TestCase>
                                                <TestCase name="fragment">
                                                        <Test name="scissor">
                                                        <Test name="blend_equation">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="blend_equationi">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="blend_equation_separate">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="blend_equation_separatei">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="blend_func">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="blend_funci">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="blend_func_separate">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="blend_func_separatei">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="cull_face">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="vertex_attrib_i_pointer">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="vertex_attrib_format">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="vertex_attrib_i_format">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="enable_vertex_attrib_array">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="draw_elements">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="draw_elements_base_vertex">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="draw_elements_invalid_program">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="draw_elements_instanced_incomplete_primitive">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="draw_elements_instanced_base_vertex">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="draw_range_elements">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="draw_range_elements_incomplete_primitive">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="draw_range_elements_base_vertex">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                </TestCase>
                                                <TestCase name="state">
                                                        <Test name="enable">
                                                        <Test name="get_integeri_v">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="get_booleani_v">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                        <Test name="get_integer64i_v">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
                                                        <Test name="hint">
                                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                                        </Test>
+                                                       <Test name="enablei">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="disablei">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="get_tex_parameteriiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="get_tex_parameteriuiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="get_nuniformfv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="get_nuniformiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="get_nuniformuiv">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="is_enabledi">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                               </TestCase>
+                                               <TestCase name="atomic_counter">
+                                                       <Test name="atomic_max_counter_bindings">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="atomic_precision">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="atomic_binding_offset_overlap">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="atomic_binding_omitted">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="atomic_struct">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="atomic_body_write">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="atomic_body_declare">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                               </TestCase>
+                                               <TestCase name="shader_image_load_store">
+                                                       <Test name="image_store">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="image_load">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="image_atomic">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
+                                                       <Test name="image_atomic_exchange">
+                                                               <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
+                                                       </Test>
                                                </TestCase>
                                        </TestSuite>
                                </TestSuite>
index df9f6cd..2f76b88 100644 (file)
@@ -946,11 +946,6 @@ dEQP-EGL.functional.image.api.create_image_gles2_renderbuffer_rgba4
 dEQP-EGL.functional.image.api.create_image_gles2_renderbuffer_rgb5_a1
 dEQP-EGL.functional.image.api.create_image_gles2_renderbuffer_rgb565
 dEQP-EGL.functional.image.api.create_image_gles2_renderbuffer_stencil_index8
-dEQP-EGL.functional.image.api.create_image_gles2_android_native_rgb565
-dEQP-EGL.functional.image.api.create_image_gles2_android_native_rgb8
-dEQP-EGL.functional.image.api.create_image_gles2_android_native_rgba4
-dEQP-EGL.functional.image.api.create_image_gles2_android_native_rgb5_a1
-dEQP-EGL.functional.image.api.create_image_gles2_android_native_rgba8
 dEQP-EGL.functional.image.api.image_target_gles2_tex2d
 dEQP-EGL.functional.image.api.image_target_gles2_renderbuffer
 dEQP-EGL.functional.image.create.gles2_texture_rgb8_texture
@@ -995,16 +990,6 @@ dEQP-EGL.functional.image.create.gles2_renderbuffer_rgb565_texture
 dEQP-EGL.functional.image.create.gles2_renderbuffer_rgb565_read_pixels
 dEQP-EGL.functional.image.create.gles2_renderbuffer_depth16_depth_buffer
 dEQP-EGL.functional.image.create.gles2_renderbuffer_stencil_stencil_buffer
-dEQP-EGL.functional.image.create.gles2_android_native_rgb565_texture
-dEQP-EGL.functional.image.create.gles2_android_native_rgb565_read_pixels
-dEQP-EGL.functional.image.create.gles2_android_native_rgb8_texture
-dEQP-EGL.functional.image.create.gles2_android_native_rgb8_read_pixels
-dEQP-EGL.functional.image.create.gles2_android_native_rgba4_texture
-dEQP-EGL.functional.image.create.gles2_android_native_rgba4_read_pixels
-dEQP-EGL.functional.image.create.gles2_android_native_rgb5_a1_texture
-dEQP-EGL.functional.image.create.gles2_android_native_rgb5_a1_read_pixels
-dEQP-EGL.functional.image.create.gles2_android_native_rgba8_texture
-dEQP-EGL.functional.image.create.gles2_android_native_rgba8_read_pixels
 dEQP-EGL.functional.image.modify.tex_rgb8_tex_subimage_rgb8
 dEQP-EGL.functional.image.modify.tex_rgb8_tex_subimage_rgb565
 dEQP-EGL.functional.image.modify.tex_rgb8_renderbuffer_clear_color
@@ -1036,24 +1021,6 @@ dEQP-EGL.functional.image.modify.renderbuffer_rgb565_tex_subimage_rgb565
 dEQP-EGL.functional.image.modify.renderbuffer_rgb565_renderbuffer_clear_color
 dEQP-EGL.functional.image.modify.renderbuffer_depth16_renderbuffer_clear_depth
 dEQP-EGL.functional.image.modify.renderbuffer_stencil_renderbuffer_clear_stencil
-dEQP-EGL.functional.image.modify.android_native_rgb565_tex_subimage_rgb8
-dEQP-EGL.functional.image.modify.android_native_rgb565_tex_subimage_rgb565
-dEQP-EGL.functional.image.modify.android_native_rgb565_renderbuffer_clear_color
-dEQP-EGL.functional.image.modify.android_native_rgb8_tex_subimage_rgb8
-dEQP-EGL.functional.image.modify.android_native_rgb8_tex_subimage_rgb565
-dEQP-EGL.functional.image.modify.android_native_rgb8_renderbuffer_clear_color
-dEQP-EGL.functional.image.modify.android_native_rgba4_tex_subimage_rgba8
-dEQP-EGL.functional.image.modify.android_native_rgba4_tex_subimage_rgba5_a1
-dEQP-EGL.functional.image.modify.android_native_rgba4_tex_subimage_rgba4
-dEQP-EGL.functional.image.modify.android_native_rgba4_renderbuffer_clear_color
-dEQP-EGL.functional.image.modify.android_native_rgb5_a1_tex_subimage_rgba8
-dEQP-EGL.functional.image.modify.android_native_rgb5_a1_tex_subimage_rgba5_a1
-dEQP-EGL.functional.image.modify.android_native_rgb5_a1_tex_subimage_rgba4
-dEQP-EGL.functional.image.modify.android_native_rgb5_a1_renderbuffer_clear_color
-dEQP-EGL.functional.image.modify.android_native_rgba8_tex_subimage_rgba8
-dEQP-EGL.functional.image.modify.android_native_rgba8_tex_subimage_rgba5_a1
-dEQP-EGL.functional.image.modify.android_native_rgba8_tex_subimage_rgba4
-dEQP-EGL.functional.image.modify.android_native_rgba8_renderbuffer_clear_color
 dEQP-EGL.functional.image.render_multiple_contexts.gles2_texture_rgb8_texture
 dEQP-EGL.functional.image.render_multiple_contexts.gles2_texture_rgb8_read_pixels
 dEQP-EGL.functional.image.render_multiple_contexts.gles2_texture_rgb565_texture
@@ -1096,16 +1063,6 @@ dEQP-EGL.functional.image.render_multiple_contexts.gles2_renderbuffer_rgb565_tex
 dEQP-EGL.functional.image.render_multiple_contexts.gles2_renderbuffer_rgb565_read_pixels
 dEQP-EGL.functional.image.render_multiple_contexts.gles2_renderbuffer_depth16_depth_buffer
 dEQP-EGL.functional.image.render_multiple_contexts.gles2_renderbuffer_stencil_stencil_buffer
-dEQP-EGL.functional.image.render_multiple_contexts.gles2_android_native_rgb565_texture
-dEQP-EGL.functional.image.render_multiple_contexts.gles2_android_native_rgb565_read_pixels
-dEQP-EGL.functional.image.render_multiple_contexts.gles2_android_native_rgb8_texture
-dEQP-EGL.functional.image.render_multiple_contexts.gles2_android_native_rgb8_read_pixels
-dEQP-EGL.functional.image.render_multiple_contexts.gles2_android_native_rgba4_texture
-dEQP-EGL.functional.image.render_multiple_contexts.gles2_android_native_rgba4_read_pixels
-dEQP-EGL.functional.image.render_multiple_contexts.gles2_android_native_rgb5_a1_texture
-dEQP-EGL.functional.image.render_multiple_contexts.gles2_android_native_rgb5_a1_read_pixels
-dEQP-EGL.functional.image.render_multiple_contexts.gles2_android_native_rgba8_texture
-dEQP-EGL.functional.image.render_multiple_contexts.gles2_android_native_rgba8_read_pixels
 dEQP-EGL.functional.sharing.gles2.context.create_destroy
 dEQP-EGL.functional.sharing.gles2.context.create_destroy_mixed
 dEQP-EGL.functional.sharing.gles2.buffer.create_delete
@@ -2390,7 +2347,6 @@ dEQP-EGL.functional.negative_api.destroy_context
 dEQP-EGL.functional.negative_api.destroy_surface
 dEQP-EGL.functional.negative_api.get_config_attrib
 dEQP-EGL.functional.negative_api.get_configs
-dEQP-EGL.functional.negative_api.get_display
 dEQP-EGL.functional.negative_api.initialize
 dEQP-EGL.functional.negative_api.make_current
 dEQP-EGL.functional.negative_api.get_current_context
@@ -2434,26 +2390,18 @@ dEQP-EGL.functional.fence_sync.invalid.wait_server_invalid_flag
 dEQP-EGL.functional.multithread.config
 dEQP-EGL.functional.multithread.pbuffer
 dEQP-EGL.functional.multithread.pixmap
-dEQP-EGL.functional.multithread.window
 dEQP-EGL.functional.multithread.single_window
 dEQP-EGL.functional.multithread.context
 dEQP-EGL.functional.multithread.pbuffer_pixmap
-dEQP-EGL.functional.multithread.pbuffer_window
 dEQP-EGL.functional.multithread.pbuffer_single_window
 dEQP-EGL.functional.multithread.pbuffer_context
-dEQP-EGL.functional.multithread.pixmap_window
 dEQP-EGL.functional.multithread.pixmap_single_window
 dEQP-EGL.functional.multithread.pixmap_context
-dEQP-EGL.functional.multithread.window_context
 dEQP-EGL.functional.multithread.single_window_context
-dEQP-EGL.functional.multithread.pbuffer_pixmap_window
 dEQP-EGL.functional.multithread.pbuffer_pixmap_single_window
 dEQP-EGL.functional.multithread.pbuffer_pixmap_context
-dEQP-EGL.functional.multithread.pbuffer_window_context
 dEQP-EGL.functional.multithread.pbuffer_single_window_context
-dEQP-EGL.functional.multithread.pixmap_window_context
 dEQP-EGL.functional.multithread.pixmap_single_window_context
-dEQP-EGL.functional.multithread.pbuffer_pixmap_window_context
 dEQP-EGL.functional.multithread.pbuffer_pixmap_single_window_context
 dEQP-EGL.functional.get_proc_address.extension.egl_android_blob_cache
 dEQP-EGL.functional.get_proc_address.extension.egl_android_native_fence_sync
index 129417a..e5156c1 100644 (file)
@@ -9055,117 +9055,6 @@ dEQP-GLES2.functional.texture.vertex.2d.wrap.repeat_mirror
 dEQP-GLES2.functional.texture.vertex.2d.wrap.mirror_clamp
 dEQP-GLES2.functional.texture.vertex.2d.wrap.mirror_repeat
 dEQP-GLES2.functional.texture.vertex.2d.wrap.mirror_mirror
-dEQP-GLES2.functional.texture.units.2_units.only_2d.0
-dEQP-GLES2.functional.texture.units.2_units.only_2d.1
-dEQP-GLES2.functional.texture.units.2_units.only_2d.2
-dEQP-GLES2.functional.texture.units.2_units.only_2d.3
-dEQP-GLES2.functional.texture.units.2_units.only_2d.4
-dEQP-GLES2.functional.texture.units.2_units.only_2d.5
-dEQP-GLES2.functional.texture.units.2_units.only_2d.6
-dEQP-GLES2.functional.texture.units.2_units.only_2d.7
-dEQP-GLES2.functional.texture.units.2_units.only_2d.8
-dEQP-GLES2.functional.texture.units.2_units.only_2d.9
-dEQP-GLES2.functional.texture.units.2_units.only_cube.2
-dEQP-GLES2.functional.texture.units.2_units.only_cube.4
-dEQP-GLES2.functional.texture.units.2_units.only_cube.5
-dEQP-GLES2.functional.texture.units.2_units.only_cube.6
-dEQP-GLES2.functional.texture.units.2_units.only_cube.7
-dEQP-GLES2.functional.texture.units.2_units.only_cube.8
-dEQP-GLES2.functional.texture.units.2_units.mixed.3
-dEQP-GLES2.functional.texture.units.2_units.mixed.4
-dEQP-GLES2.functional.texture.units.2_units.mixed.6
-dEQP-GLES2.functional.texture.units.2_units.mixed.7
-dEQP-GLES2.functional.texture.units.2_units.mixed.8
-dEQP-GLES2.functional.texture.units.2_units.mixed.9
-dEQP-GLES2.functional.texture.units.4_units.only_2d.0
-dEQP-GLES2.functional.texture.units.4_units.only_2d.1
-dEQP-GLES2.functional.texture.units.4_units.only_2d.2
-dEQP-GLES2.functional.texture.units.4_units.only_2d.3
-dEQP-GLES2.functional.texture.units.4_units.only_2d.4
-dEQP-GLES2.functional.texture.units.4_units.only_2d.5
-dEQP-GLES2.functional.texture.units.4_units.only_2d.6
-dEQP-GLES2.functional.texture.units.4_units.only_2d.7
-dEQP-GLES2.functional.texture.units.4_units.only_2d.8
-dEQP-GLES2.functional.texture.units.4_units.only_2d.9
-dEQP-GLES2.functional.texture.units.4_units.only_cube.0
-dEQP-GLES2.functional.texture.units.4_units.only_cube.1
-dEQP-GLES2.functional.texture.units.4_units.only_cube.2
-dEQP-GLES2.functional.texture.units.4_units.only_cube.3
-dEQP-GLES2.functional.texture.units.4_units.only_cube.4
-dEQP-GLES2.functional.texture.units.4_units.only_cube.5
-dEQP-GLES2.functional.texture.units.4_units.only_cube.6
-dEQP-GLES2.functional.texture.units.4_units.only_cube.7
-dEQP-GLES2.functional.texture.units.4_units.only_cube.8
-dEQP-GLES2.functional.texture.units.4_units.only_cube.9
-dEQP-GLES2.functional.texture.units.4_units.mixed.0
-dEQP-GLES2.functional.texture.units.4_units.mixed.1
-dEQP-GLES2.functional.texture.units.4_units.mixed.2
-dEQP-GLES2.functional.texture.units.4_units.mixed.3
-dEQP-GLES2.functional.texture.units.4_units.mixed.4
-dEQP-GLES2.functional.texture.units.4_units.mixed.5
-dEQP-GLES2.functional.texture.units.4_units.mixed.7
-dEQP-GLES2.functional.texture.units.4_units.mixed.8
-dEQP-GLES2.functional.texture.units.4_units.mixed.9
-dEQP-GLES2.functional.texture.units.8_units.only_2d.0
-dEQP-GLES2.functional.texture.units.8_units.only_2d.1
-dEQP-GLES2.functional.texture.units.8_units.only_2d.2
-dEQP-GLES2.functional.texture.units.8_units.only_2d.3
-dEQP-GLES2.functional.texture.units.8_units.only_2d.4
-dEQP-GLES2.functional.texture.units.8_units.only_2d.5
-dEQP-GLES2.functional.texture.units.8_units.only_2d.6
-dEQP-GLES2.functional.texture.units.8_units.only_2d.7
-dEQP-GLES2.functional.texture.units.8_units.only_2d.8
-dEQP-GLES2.functional.texture.units.8_units.only_2d.9
-dEQP-GLES2.functional.texture.units.8_units.only_cube.0
-dEQP-GLES2.functional.texture.units.8_units.only_cube.1
-dEQP-GLES2.functional.texture.units.8_units.only_cube.2
-dEQP-GLES2.functional.texture.units.8_units.only_cube.3
-dEQP-GLES2.functional.texture.units.8_units.only_cube.4
-dEQP-GLES2.functional.texture.units.8_units.only_cube.5
-dEQP-GLES2.functional.texture.units.8_units.only_cube.6
-dEQP-GLES2.functional.texture.units.8_units.only_cube.7
-dEQP-GLES2.functional.texture.units.8_units.only_cube.8
-dEQP-GLES2.functional.texture.units.8_units.only_cube.9
-dEQP-GLES2.functional.texture.units.8_units.mixed.0
-dEQP-GLES2.functional.texture.units.8_units.mixed.1
-dEQP-GLES2.functional.texture.units.8_units.mixed.2
-dEQP-GLES2.functional.texture.units.8_units.mixed.3
-dEQP-GLES2.functional.texture.units.8_units.mixed.4
-dEQP-GLES2.functional.texture.units.8_units.mixed.5
-dEQP-GLES2.functional.texture.units.8_units.mixed.6
-dEQP-GLES2.functional.texture.units.8_units.mixed.7
-dEQP-GLES2.functional.texture.units.8_units.mixed.8
-dEQP-GLES2.functional.texture.units.8_units.mixed.9
-dEQP-GLES2.functional.texture.units.all_units.only_2d.0
-dEQP-GLES2.functional.texture.units.all_units.only_2d.1
-dEQP-GLES2.functional.texture.units.all_units.only_2d.2
-dEQP-GLES2.functional.texture.units.all_units.only_2d.3
-dEQP-GLES2.functional.texture.units.all_units.only_2d.4
-dEQP-GLES2.functional.texture.units.all_units.only_2d.5
-dEQP-GLES2.functional.texture.units.all_units.only_2d.6
-dEQP-GLES2.functional.texture.units.all_units.only_2d.7
-dEQP-GLES2.functional.texture.units.all_units.only_2d.8
-dEQP-GLES2.functional.texture.units.all_units.only_2d.9
-dEQP-GLES2.functional.texture.units.all_units.only_cube.0
-dEQP-GLES2.functional.texture.units.all_units.only_cube.1
-dEQP-GLES2.functional.texture.units.all_units.only_cube.2
-dEQP-GLES2.functional.texture.units.all_units.only_cube.3
-dEQP-GLES2.functional.texture.units.all_units.only_cube.4
-dEQP-GLES2.functional.texture.units.all_units.only_cube.5
-dEQP-GLES2.functional.texture.units.all_units.only_cube.6
-dEQP-GLES2.functional.texture.units.all_units.only_cube.7
-dEQP-GLES2.functional.texture.units.all_units.only_cube.8
-dEQP-GLES2.functional.texture.units.all_units.only_cube.9
-dEQP-GLES2.functional.texture.units.all_units.mixed.0
-dEQP-GLES2.functional.texture.units.all_units.mixed.1
-dEQP-GLES2.functional.texture.units.all_units.mixed.2
-dEQP-GLES2.functional.texture.units.all_units.mixed.3
-dEQP-GLES2.functional.texture.units.all_units.mixed.4
-dEQP-GLES2.functional.texture.units.all_units.mixed.5
-dEQP-GLES2.functional.texture.units.all_units.mixed.6
-dEQP-GLES2.functional.texture.units.all_units.mixed.7
-dEQP-GLES2.functional.texture.units.all_units.mixed.8
-dEQP-GLES2.functional.texture.units.all_units.mixed.9
 dEQP-GLES2.functional.fragment_ops.depth.cmp_always
 dEQP-GLES2.functional.fragment_ops.depth.cmp_never
 dEQP-GLES2.functional.fragment_ops.depth.cmp_equal
@@ -12968,6 +12857,11 @@ dEQP-GLES2.functional.depth_range.compare.one_to_one
 dEQP-GLES2.functional.depth_range.compare.clamp_near
 dEQP-GLES2.functional.depth_range.compare.clamp_far
 dEQP-GLES2.functional.depth_range.compare.clamp_both
+dEQP-GLES2.functional.dither.disabled.gradient_white
+dEQP-GLES2.functional.dither.disabled.gradient_red
+dEQP-GLES2.functional.dither.disabled.gradient_green
+dEQP-GLES2.functional.dither.disabled.gradient_blue
+dEQP-GLES2.functional.dither.disabled.gradient_alpha
 dEQP-GLES2.functional.dither.disabled.unicolored_quad_white
 dEQP-GLES2.functional.dither.disabled.unicolored_quad_red
 dEQP-GLES2.functional.dither.disabled.unicolored_quad_green
index c4c7aae..f86d1fb 100644 (file)
@@ -2173,6 +2173,11 @@ dEQP-GLES3.functional.read_pixels.skip.choose_0_3
 dEQP-GLES3.functional.read_pixels.skip.choose_3_0
 dEQP-GLES3.functional.read_pixels.skip.choose_3_3
 dEQP-GLES3.functional.read_pixels.skip.choose_3_5
+dEQP-GLES3.functional.dither.disabled.gradient_white
+dEQP-GLES3.functional.dither.disabled.gradient_red
+dEQP-GLES3.functional.dither.disabled.gradient_green
+dEQP-GLES3.functional.dither.disabled.gradient_blue
+dEQP-GLES3.functional.dither.disabled.gradient_alpha
 dEQP-GLES3.functional.dither.disabled.unicolored_quad_white
 dEQP-GLES3.functional.dither.disabled.unicolored_quad_red
 dEQP-GLES3.functional.dither.disabled.unicolored_quad_green
index 19d052f..abe4ac0 100644 (file)
@@ -38968,6 +38968,11 @@ dEQP-GLES3.functional.read_pixels.skip.choose_0_3
 dEQP-GLES3.functional.read_pixels.skip.choose_3_0
 dEQP-GLES3.functional.read_pixels.skip.choose_3_3
 dEQP-GLES3.functional.read_pixels.skip.choose_3_5
+dEQP-GLES3.functional.dither.disabled.gradient_white
+dEQP-GLES3.functional.dither.disabled.gradient_red
+dEQP-GLES3.functional.dither.disabled.gradient_green
+dEQP-GLES3.functional.dither.disabled.gradient_blue
+dEQP-GLES3.functional.dither.disabled.gradient_alpha
 dEQP-GLES3.functional.dither.disabled.unicolored_quad_white
 dEQP-GLES3.functional.dither.disabled.unicolored_quad_red
 dEQP-GLES3.functional.dither.disabled.unicolored_quad_green
index d7f3cc2..b4aba06 100644 (file)
@@ -4064,6 +4064,9 @@ dEQP-GLES31.functional.shaders.helper_invocation.derivate.triangles_4_samples_fw
 dEQP-GLES31.functional.shaders.helper_invocation.derivate.lines_4_samples_dfdx
 dEQP-GLES31.functional.shaders.helper_invocation.derivate.lines_4_samples_dfdy
 dEQP-GLES31.functional.shaders.helper_invocation.derivate.lines_4_samples_fwidth
+dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_lines_4_samples_dfdx
+dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_lines_4_samples_dfdy
+dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_lines_4_samples_fwidth
 dEQP-GLES31.functional.shaders.helper_invocation.derivate.points_4_samples_dfdx
 dEQP-GLES31.functional.shaders.helper_invocation.derivate.points_4_samples_dfdy
 dEQP-GLES31.functional.shaders.helper_invocation.derivate.points_4_samples_fwidth
@@ -4076,6 +4079,9 @@ dEQP-GLES31.functional.shaders.helper_invocation.derivate.triangles_8_samples_fw
 dEQP-GLES31.functional.shaders.helper_invocation.derivate.lines_8_samples_dfdx
 dEQP-GLES31.functional.shaders.helper_invocation.derivate.lines_8_samples_dfdy
 dEQP-GLES31.functional.shaders.helper_invocation.derivate.lines_8_samples_fwidth
+dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_lines_8_samples_dfdx
+dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_lines_8_samples_dfdy
+dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_lines_8_samples_fwidth
 dEQP-GLES31.functional.shaders.helper_invocation.derivate.points_8_samples_dfdx
 dEQP-GLES31.functional.shaders.helper_invocation.derivate.points_8_samples_dfdy
 dEQP-GLES31.functional.shaders.helper_invocation.derivate.points_8_samples_fwidth
@@ -4088,6 +4094,9 @@ dEQP-GLES31.functional.shaders.helper_invocation.derivate.triangles_max_samples_
 dEQP-GLES31.functional.shaders.helper_invocation.derivate.lines_max_samples_dfdx
 dEQP-GLES31.functional.shaders.helper_invocation.derivate.lines_max_samples_dfdy
 dEQP-GLES31.functional.shaders.helper_invocation.derivate.lines_max_samples_fwidth
+dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_lines_max_samples_dfdx
+dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_lines_max_samples_dfdy
+dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_lines_max_samples_fwidth
 dEQP-GLES31.functional.shaders.helper_invocation.derivate.points_max_samples_dfdx
 dEQP-GLES31.functional.shaders.helper_invocation.derivate.points_max_samples_dfdy
 dEQP-GLES31.functional.shaders.helper_invocation.derivate.points_max_samples_fwidth
@@ -12539,6 +12548,21 @@ dEQP-GLES31.functional.state_query.boolean.sample_mask_getboolean
 dEQP-GLES31.functional.state_query.boolean.sample_mask_getinteger
 dEQP-GLES31.functional.state_query.boolean.sample_mask_getinteger64
 dEQP-GLES31.functional.state_query.boolean.sample_mask_getfloat
+dEQP-GLES31.functional.state_query.boolean.sample_shading_isenabled
+dEQP-GLES31.functional.state_query.boolean.sample_shading_getboolean
+dEQP-GLES31.functional.state_query.boolean.sample_shading_getinteger
+dEQP-GLES31.functional.state_query.boolean.sample_shading_getinteger64
+dEQP-GLES31.functional.state_query.boolean.sample_shading_getfloat
+dEQP-GLES31.functional.state_query.boolean.debug_output_isenabled
+dEQP-GLES31.functional.state_query.boolean.debug_output_getboolean
+dEQP-GLES31.functional.state_query.boolean.debug_output_getinteger
+dEQP-GLES31.functional.state_query.boolean.debug_output_getinteger64
+dEQP-GLES31.functional.state_query.boolean.debug_output_getfloat
+dEQP-GLES31.functional.state_query.boolean.debug_output_synchronous_isenabled
+dEQP-GLES31.functional.state_query.boolean.debug_output_synchronous_getboolean
+dEQP-GLES31.functional.state_query.boolean.debug_output_synchronous_getinteger
+dEQP-GLES31.functional.state_query.boolean.debug_output_synchronous_getinteger64
+dEQP-GLES31.functional.state_query.boolean.debug_output_synchronous_getfloat
 dEQP-GLES31.functional.state_query.integer.max_color_texture_samples_getboolean
 dEQP-GLES31.functional.state_query.integer.max_color_texture_samples_getinteger
 dEQP-GLES31.functional.state_query.integer.max_color_texture_samples_getinteger64
@@ -12563,6 +12587,10 @@ dEQP-GLES31.functional.state_query.integer.texture_binding_cube_map_array_getboo
 dEQP-GLES31.functional.state_query.integer.texture_binding_cube_map_array_getinteger
 dEQP-GLES31.functional.state_query.integer.texture_binding_cube_map_array_getinteger64
 dEQP-GLES31.functional.state_query.integer.texture_binding_cube_map_array_getfloat
+dEQP-GLES31.functional.state_query.integer.texture_binding_buffer_getboolean
+dEQP-GLES31.functional.state_query.integer.texture_binding_buffer_getinteger
+dEQP-GLES31.functional.state_query.integer.texture_binding_buffer_getinteger64
+dEQP-GLES31.functional.state_query.integer.texture_binding_buffer_getfloat
 dEQP-GLES31.functional.state_query.integer.max_vertex_attrib_relative_offset_getboolean
 dEQP-GLES31.functional.state_query.integer.max_vertex_attrib_relative_offset_getinteger
 dEQP-GLES31.functional.state_query.integer.max_vertex_attrib_relative_offset_getinteger64
@@ -12767,6 +12795,202 @@ dEQP-GLES31.functional.state_query.integer.max_program_texture_gather_offset_get
 dEQP-GLES31.functional.state_query.integer.max_program_texture_gather_offset_getinteger
 dEQP-GLES31.functional.state_query.integer.max_program_texture_gather_offset_getinteger64
 dEQP-GLES31.functional.state_query.integer.max_program_texture_gather_offset_getfloat
+dEQP-GLES31.functional.state_query.integer.max_framebuffer_layers_getboolean
+dEQP-GLES31.functional.state_query.integer.max_framebuffer_layers_getinteger
+dEQP-GLES31.functional.state_query.integer.max_framebuffer_layers_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_framebuffer_layers_getfloat
+dEQP-GLES31.functional.state_query.integer.fragment_interpolation_offset_bits_getboolean
+dEQP-GLES31.functional.state_query.integer.fragment_interpolation_offset_bits_getinteger
+dEQP-GLES31.functional.state_query.integer.fragment_interpolation_offset_bits_getinteger64
+dEQP-GLES31.functional.state_query.integer.fragment_interpolation_offset_bits_getfloat
+dEQP-GLES31.functional.state_query.integer.max_texture_buffer_size_getboolean
+dEQP-GLES31.functional.state_query.integer.max_texture_buffer_size_getinteger
+dEQP-GLES31.functional.state_query.integer.max_texture_buffer_size_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_texture_buffer_size_getfloat
+dEQP-GLES31.functional.state_query.integer.texture_buffer_offset_alignment_getboolean
+dEQP-GLES31.functional.state_query.integer.texture_buffer_offset_alignment_getinteger
+dEQP-GLES31.functional.state_query.integer.texture_buffer_offset_alignment_getinteger64
+dEQP-GLES31.functional.state_query.integer.texture_buffer_offset_alignment_getfloat
+dEQP-GLES31.functional.state_query.integer.max_tess_gen_level_getboolean
+dEQP-GLES31.functional.state_query.integer.max_tess_gen_level_getinteger
+dEQP-GLES31.functional.state_query.integer.max_tess_gen_level_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_tess_gen_level_getfloat
+dEQP-GLES31.functional.state_query.integer.max_patch_vertices_getboolean
+dEQP-GLES31.functional.state_query.integer.max_patch_vertices_getinteger
+dEQP-GLES31.functional.state_query.integer.max_patch_vertices_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_patch_vertices_getfloat
+dEQP-GLES31.functional.state_query.integer.max_tess_patch_components_getboolean
+dEQP-GLES31.functional.state_query.integer.max_tess_patch_components_getinteger
+dEQP-GLES31.functional.state_query.integer.max_tess_patch_components_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_tess_patch_components_getfloat
+dEQP-GLES31.functional.state_query.integer.max_tess_control_uniform_components_getboolean
+dEQP-GLES31.functional.state_query.integer.max_tess_control_uniform_components_getinteger
+dEQP-GLES31.functional.state_query.integer.max_tess_control_uniform_components_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_tess_control_uniform_components_getfloat
+dEQP-GLES31.functional.state_query.integer.max_tess_control_texture_image_units_getboolean
+dEQP-GLES31.functional.state_query.integer.max_tess_control_texture_image_units_getinteger
+dEQP-GLES31.functional.state_query.integer.max_tess_control_texture_image_units_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_tess_control_texture_image_units_getfloat
+dEQP-GLES31.functional.state_query.integer.max_tess_control_output_components_getboolean
+dEQP-GLES31.functional.state_query.integer.max_tess_control_output_components_getinteger
+dEQP-GLES31.functional.state_query.integer.max_tess_control_output_components_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_tess_control_output_components_getfloat
+dEQP-GLES31.functional.state_query.integer.max_tess_control_total_output_components_getboolean
+dEQP-GLES31.functional.state_query.integer.max_tess_control_total_output_components_getinteger
+dEQP-GLES31.functional.state_query.integer.max_tess_control_total_output_components_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_tess_control_total_output_components_getfloat
+dEQP-GLES31.functional.state_query.integer.max_tess_control_input_components_getboolean
+dEQP-GLES31.functional.state_query.integer.max_tess_control_input_components_getinteger
+dEQP-GLES31.functional.state_query.integer.max_tess_control_input_components_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_tess_control_input_components_getfloat
+dEQP-GLES31.functional.state_query.integer.max_tess_control_uniform_blocks_getboolean
+dEQP-GLES31.functional.state_query.integer.max_tess_control_uniform_blocks_getinteger
+dEQP-GLES31.functional.state_query.integer.max_tess_control_uniform_blocks_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_tess_control_uniform_blocks_getfloat
+dEQP-GLES31.functional.state_query.integer.max_tess_control_atomic_counter_buffers_getboolean
+dEQP-GLES31.functional.state_query.integer.max_tess_control_atomic_counter_buffers_getinteger
+dEQP-GLES31.functional.state_query.integer.max_tess_control_atomic_counter_buffers_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_tess_control_atomic_counter_buffers_getfloat
+dEQP-GLES31.functional.state_query.integer.max_tess_control_atomic_counters_getboolean
+dEQP-GLES31.functional.state_query.integer.max_tess_control_atomic_counters_getinteger
+dEQP-GLES31.functional.state_query.integer.max_tess_control_atomic_counters_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_tess_control_atomic_counters_getfloat
+dEQP-GLES31.functional.state_query.integer.max_tess_control_shader_storage_blocks_getboolean
+dEQP-GLES31.functional.state_query.integer.max_tess_control_shader_storage_blocks_getinteger
+dEQP-GLES31.functional.state_query.integer.max_tess_control_shader_storage_blocks_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_tess_control_shader_storage_blocks_getfloat
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_uniform_components_getboolean
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_uniform_components_getinteger
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_uniform_components_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_uniform_components_getfloat
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_texture_image_units_getboolean
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_texture_image_units_getinteger
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_texture_image_units_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_texture_image_units_getfloat
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_output_components_getboolean
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_output_components_getinteger
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_output_components_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_output_components_getfloat
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_input_components_getboolean
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_input_components_getinteger
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_input_components_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_input_components_getfloat
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_uniform_blocks_getboolean
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_uniform_blocks_getinteger
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_uniform_blocks_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_uniform_blocks_getfloat
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_atomic_counter_buffers_getboolean
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_atomic_counter_buffers_getinteger
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_atomic_counter_buffers_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_atomic_counter_buffers_getfloat
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_atomic_counters_getboolean
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_atomic_counters_getinteger
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_atomic_counters_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_atomic_counters_getfloat
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_shader_storage_blocks_getboolean
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_shader_storage_blocks_getinteger
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_shader_storage_blocks_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_shader_storage_blocks_getfloat
+dEQP-GLES31.functional.state_query.integer.max_geometry_uniform_components_getboolean
+dEQP-GLES31.functional.state_query.integer.max_geometry_uniform_components_getinteger
+dEQP-GLES31.functional.state_query.integer.max_geometry_uniform_components_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_geometry_uniform_components_getfloat
+dEQP-GLES31.functional.state_query.integer.max_geometry_uniform_blocks_getboolean
+dEQP-GLES31.functional.state_query.integer.max_geometry_uniform_blocks_getinteger
+dEQP-GLES31.functional.state_query.integer.max_geometry_uniform_blocks_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_geometry_uniform_blocks_getfloat
+dEQP-GLES31.functional.state_query.integer.max_geometry_input_components_getboolean
+dEQP-GLES31.functional.state_query.integer.max_geometry_input_components_getinteger
+dEQP-GLES31.functional.state_query.integer.max_geometry_input_components_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_geometry_input_components_getfloat
+dEQP-GLES31.functional.state_query.integer.max_geometry_output_components_getboolean
+dEQP-GLES31.functional.state_query.integer.max_geometry_output_components_getinteger
+dEQP-GLES31.functional.state_query.integer.max_geometry_output_components_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_geometry_output_components_getfloat
+dEQP-GLES31.functional.state_query.integer.max_geometry_output_vertices_getboolean
+dEQP-GLES31.functional.state_query.integer.max_geometry_output_vertices_getinteger
+dEQP-GLES31.functional.state_query.integer.max_geometry_output_vertices_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_geometry_output_vertices_getfloat
+dEQP-GLES31.functional.state_query.integer.max_geometry_total_output_components_getboolean
+dEQP-GLES31.functional.state_query.integer.max_geometry_total_output_components_getinteger
+dEQP-GLES31.functional.state_query.integer.max_geometry_total_output_components_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_geometry_total_output_components_getfloat
+dEQP-GLES31.functional.state_query.integer.max_geometry_texture_image_units_getboolean
+dEQP-GLES31.functional.state_query.integer.max_geometry_texture_image_units_getinteger
+dEQP-GLES31.functional.state_query.integer.max_geometry_texture_image_units_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_geometry_texture_image_units_getfloat
+dEQP-GLES31.functional.state_query.integer.max_geometry_shader_invocations_getboolean
+dEQP-GLES31.functional.state_query.integer.max_geometry_shader_invocations_getinteger
+dEQP-GLES31.functional.state_query.integer.max_geometry_shader_invocations_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_geometry_shader_invocations_getfloat
+dEQP-GLES31.functional.state_query.integer.max_geometry_atomic_counter_buffers_getboolean
+dEQP-GLES31.functional.state_query.integer.max_geometry_atomic_counter_buffers_getinteger
+dEQP-GLES31.functional.state_query.integer.max_geometry_atomic_counter_buffers_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_geometry_atomic_counter_buffers_getfloat
+dEQP-GLES31.functional.state_query.integer.max_geometry_atomic_counters_getboolean
+dEQP-GLES31.functional.state_query.integer.max_geometry_atomic_counters_getinteger
+dEQP-GLES31.functional.state_query.integer.max_geometry_atomic_counters_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_geometry_atomic_counters_getfloat
+dEQP-GLES31.functional.state_query.integer.max_geometry_shader_storage_blocks_getboolean
+dEQP-GLES31.functional.state_query.integer.max_geometry_shader_storage_blocks_getinteger
+dEQP-GLES31.functional.state_query.integer.max_geometry_shader_storage_blocks_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_geometry_shader_storage_blocks_getfloat
+dEQP-GLES31.functional.state_query.integer.max_tess_control_image_uniforms_getboolean
+dEQP-GLES31.functional.state_query.integer.max_tess_control_image_uniforms_getinteger
+dEQP-GLES31.functional.state_query.integer.max_tess_control_image_uniforms_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_tess_control_image_uniforms_getfloat
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_image_uniforms_getboolean
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_image_uniforms_getinteger
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_image_uniforms_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_tess_evaluation_image_uniforms_getfloat
+dEQP-GLES31.functional.state_query.integer.max_geometry_image_uniforms_getboolean
+dEQP-GLES31.functional.state_query.integer.max_geometry_image_uniforms_getinteger
+dEQP-GLES31.functional.state_query.integer.max_geometry_image_uniforms_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_geometry_image_uniforms_getfloat
+dEQP-GLES31.functional.state_query.integer.debug_logged_messages_getboolean
+dEQP-GLES31.functional.state_query.integer.debug_logged_messages_getinteger
+dEQP-GLES31.functional.state_query.integer.debug_logged_messages_getinteger64
+dEQP-GLES31.functional.state_query.integer.debug_logged_messages_getfloat
+dEQP-GLES31.functional.state_query.integer.debug_next_logged_message_length_getboolean
+dEQP-GLES31.functional.state_query.integer.debug_next_logged_message_length_getinteger
+dEQP-GLES31.functional.state_query.integer.debug_next_logged_message_length_getinteger64
+dEQP-GLES31.functional.state_query.integer.debug_next_logged_message_length_getfloat
+dEQP-GLES31.functional.state_query.integer.debug_group_stack_depth_getboolean
+dEQP-GLES31.functional.state_query.integer.debug_group_stack_depth_getinteger
+dEQP-GLES31.functional.state_query.integer.debug_group_stack_depth_getinteger64
+dEQP-GLES31.functional.state_query.integer.debug_group_stack_depth_getfloat
+dEQP-GLES31.functional.state_query.integer.max_debug_message_length_getboolean
+dEQP-GLES31.functional.state_query.integer.max_debug_message_length_getinteger
+dEQP-GLES31.functional.state_query.integer.max_debug_message_length_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_debug_message_length_getfloat
+dEQP-GLES31.functional.state_query.integer.max_debug_logged_messages_getboolean
+dEQP-GLES31.functional.state_query.integer.max_debug_logged_messages_getinteger
+dEQP-GLES31.functional.state_query.integer.max_debug_logged_messages_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_debug_logged_messages_getfloat
+dEQP-GLES31.functional.state_query.integer.max_debug_group_stack_depth_getboolean
+dEQP-GLES31.functional.state_query.integer.max_debug_group_stack_depth_getinteger
+dEQP-GLES31.functional.state_query.integer.max_debug_group_stack_depth_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_debug_group_stack_depth_getfloat
+dEQP-GLES31.functional.state_query.integer.max_label_length_getboolean
+dEQP-GLES31.functional.state_query.integer.max_label_length_getinteger
+dEQP-GLES31.functional.state_query.integer.max_label_length_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_label_length_getfloat
+dEQP-GLES31.functional.state_query.integer.texture_buffer_binding_getboolean
+dEQP-GLES31.functional.state_query.integer.texture_buffer_binding_getinteger
+dEQP-GLES31.functional.state_query.integer.texture_buffer_binding_getinteger64
+dEQP-GLES31.functional.state_query.integer.texture_buffer_binding_getfloat
+dEQP-GLES31.functional.state_query.integer.max_combined_tess_control_uniform_components_getboolean
+dEQP-GLES31.functional.state_query.integer.max_combined_tess_control_uniform_components_getinteger
+dEQP-GLES31.functional.state_query.integer.max_combined_tess_control_uniform_components_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_combined_tess_control_uniform_components_getfloat
+dEQP-GLES31.functional.state_query.integer.max_combined_tess_evaluation_uniform_components_getboolean
+dEQP-GLES31.functional.state_query.integer.max_combined_tess_evaluation_uniform_components_getinteger
+dEQP-GLES31.functional.state_query.integer.max_combined_tess_evaluation_uniform_components_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_combined_tess_evaluation_uniform_components_getfloat
+dEQP-GLES31.functional.state_query.integer.max_combined_geometry_uniform_components_getboolean
+dEQP-GLES31.functional.state_query.integer.max_combined_geometry_uniform_components_getinteger
+dEQP-GLES31.functional.state_query.integer.max_combined_geometry_uniform_components_getinteger64
+dEQP-GLES31.functional.state_query.integer.max_combined_geometry_uniform_components_getfloat
 dEQP-GLES31.functional.state_query.indexed.sample_mask_value_getbooleani_v
 dEQP-GLES31.functional.state_query.indexed.sample_mask_value_getintegeri_v
 dEQP-GLES31.functional.state_query.indexed.sample_mask_value_getinteger64i_v
@@ -12785,15 +13009,15 @@ dEQP-GLES31.functional.state_query.indexed.atomic_counter_buffer_start_getintege
 dEQP-GLES31.functional.state_query.indexed.atomic_counter_buffer_size_getbooleani_v
 dEQP-GLES31.functional.state_query.indexed.atomic_counter_buffer_size_getintegeri_v
 dEQP-GLES31.functional.state_query.indexed.atomic_counter_buffer_size_getinteger64i_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_binding_getbooleani_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_binding_getintegeri_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_binding_getinteger64i_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_start_getbooleani_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_start_getintegeri_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_start_getinteger64i_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_size_getbooleani_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_size_getintegeri_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_size_getinteger64i_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_binding_getbooleani_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_binding_getintegeri_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_binding_getinteger64i_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_start_getbooleani_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_start_getintegeri_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_start_getinteger64i_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_size_getbooleani_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_size_getintegeri_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_size_getinteger64i_v
 dEQP-GLES31.functional.state_query.indexed.image_binding_name_getbooleani_v
 dEQP-GLES31.functional.state_query.indexed.image_binding_name_getintegeri_v
 dEQP-GLES31.functional.state_query.indexed.image_binding_name_getinteger64i_v
@@ -13507,6 +13731,13 @@ dEQP-GLES31.functional.state_query.internal_format.renderbuffer.rgba16i_samples
 dEQP-GLES31.functional.state_query.internal_format.renderbuffer.rgba16ui_samples
 dEQP-GLES31.functional.state_query.internal_format.renderbuffer.rgba32i_samples
 dEQP-GLES31.functional.state_query.internal_format.renderbuffer.rgba32ui_samples
+dEQP-GLES31.functional.state_query.internal_format.renderbuffer.r16f_samples
+dEQP-GLES31.functional.state_query.internal_format.renderbuffer.rg16f_samples
+dEQP-GLES31.functional.state_query.internal_format.renderbuffer.rgba16f_samples
+dEQP-GLES31.functional.state_query.internal_format.renderbuffer.r32f_samples
+dEQP-GLES31.functional.state_query.internal_format.renderbuffer.rg32f_samples
+dEQP-GLES31.functional.state_query.internal_format.renderbuffer.rgba32f_samples
+dEQP-GLES31.functional.state_query.internal_format.renderbuffer.r11f_g11f_b10f_samples
 dEQP-GLES31.functional.state_query.internal_format.renderbuffer.depth_component16_samples
 dEQP-GLES31.functional.state_query.internal_format.renderbuffer.depth_component24_samples
 dEQP-GLES31.functional.state_query.internal_format.renderbuffer.depth_component32f_samples
@@ -13541,6 +13772,13 @@ dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rgba16
 dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rgba16ui_samples
 dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rgba32i_samples
 dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rgba32ui_samples
+dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.r16f_samples
+dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rg16f_samples
+dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rgba16f_samples
+dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.r32f_samples
+dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rg32f_samples
+dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.rgba32f_samples
+dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.r11f_g11f_b10f_samples
 dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.depth_component16_samples
 dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.depth_component24_samples
 dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample.depth_component32f_samples
@@ -13575,6 +13813,13 @@ dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample_array.
 dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample_array.rgba16ui_samples
 dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample_array.rgba32i_samples
 dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample_array.rgba32ui_samples
+dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample_array.r16f_samples
+dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample_array.rg16f_samples
+dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample_array.rgba16f_samples
+dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample_array.r32f_samples
+dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample_array.rg32f_samples
+dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample_array.rgba32f_samples
+dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample_array.r11f_g11f_b10f_samples
 dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample_array.depth_component16_samples
 dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample_array.depth_component24_samples
 dEQP-GLES31.functional.state_query.internal_format.texture_2d_multisample_array.depth_component32f_samples
@@ -13626,6 +13871,8 @@ dEQP-GLES31.functional.state_query.framebuffer_default.framebuffer_default_fixed
 dEQP-GLES31.functional.state_query.program.program_separable_get_programiv
 dEQP-GLES31.functional.state_query.program.compute_work_group_size_get_programiv
 dEQP-GLES31.functional.state_query.program.active_atomic_counter_buffers_get_programiv
+dEQP-GLES31.functional.state_query.program.geometry_shader_state_get_programiv
+dEQP-GLES31.functional.state_query.program.tesselation_shader_state_get_programiv
 dEQP-GLES31.functional.state_query.program.info_log_vertex_fragment_link_fail
 dEQP-GLES31.functional.state_query.program.info_log_compute_link_fail
 dEQP-GLES31.functional.state_query.program.info_log_geometry_link_fail
@@ -15813,6 +16060,8 @@ dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.compressedtexim
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.compressedteximage2d_max_width_height
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.compressedteximage2d_invalid_border
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.compressedteximage2d_invalid_size
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.compressedteximage2d_neg_size
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.compressedteximage2d_invalid_width_height
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.compressedteximage2d_invalid_buffer_target
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.copyteximage2d_invalid_target
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.copyteximage2d_invalid_format
@@ -15824,6 +16073,8 @@ dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.copyteximage2d_
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.copyteximage2d_invalid_border
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.copyteximage2d_incomplete_framebuffer
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.copytexsubimage2d_invalid_target
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.copytexsubimage2d_read_buffer_is_none
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.copytexsubimage2d_texture_internalformat
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.copytexsubimage2d_neg_level
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.copytexsubimage2d_max_level
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.copytexsubimage2d_neg_offset
@@ -15853,6 +16104,8 @@ dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.texparameteri
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.texparameterf
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.texparameteriv
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.texparameterfv
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.texparameterIiv
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.texparameterIuiv
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.compressedtexsubimage2d
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.compressedtexsubimage2d_neg_level
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.compressedtexsubimage2d_max_level
@@ -15889,6 +16142,8 @@ dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.compressedtexim
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.compressedteximage3d_max_width_height_depth
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.compressedteximage3d_invalid_border
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.compressedteximage3d_invalid_size
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.compressedteximage3d_invalid_width_height
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.compressedteximage3d_invalid_format
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.compressedteximage3d_invalid_buffer_target
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.compressedtexsubimage3d
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.texture.compressedtexsubimage3d_neg_level
@@ -15923,10 +16178,14 @@ dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader.bind_sampler
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader.delete_samplers
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader.get_sampler_parameteriv
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader.get_sampler_parameterfv
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader.get_sampler_parameterIiv
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader.get_sampler_parameterIuiv
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader.sampler_parameteri
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader.sampler_parameteriv
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader.sampler_parameterf
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader.sampler_parameterfv
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader.sampler_parameterIiv
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader.sampler_parameterIuiv
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader.get_attrib_location
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader.get_uniform_location
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader.bind_attrib_location
@@ -15965,6 +16224,8 @@ dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader.resume_transform
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader.end_transform_feedback
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader.get_transform_feedback_varying
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader.transform_feedback_varyings
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader.compile_compute_shader
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader.link_compute_shader
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.fragment.scissor
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.fragment.depth_func
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.fragment.viewport
@@ -15974,9 +16235,13 @@ dEQP-GLES31.functional.debug.negative_coverage.callbacks.fragment.stencil_op
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.fragment.stencil_op_separate
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.fragment.stencil_mask_separate
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.fragment.blend_equation
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.fragment.blend_equationi
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.fragment.blend_equation_separate
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.fragment.blend_equation_separatei
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.fragment.blend_func
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.fragment.blend_funci
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.fragment.blend_func_separate
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.fragment.blend_func_separatei
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.fragment.cull_face
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.fragment.front_face
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.fragment.line_width
@@ -15994,6 +16259,8 @@ dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.vertex_att
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.vertex_attribi4v
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.vertex_attrib_pointer
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.vertex_attrib_i_pointer
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.vertex_attrib_format
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.vertex_attrib_i_format
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.enable_vertex_attrib_array
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.disable_vertex_attrib_array
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.gen_vertex_arrays
@@ -16004,6 +16271,7 @@ dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.draw_array
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.draw_arrays_invalid_program
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.draw_arrays_incomplete_primitive
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.draw_elements
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.draw_elements_base_vertex
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.draw_elements_invalid_program
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.draw_elements_incomplete_primitive
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.draw_arrays_instanced
@@ -16012,9 +16280,11 @@ dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.draw_array
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.draw_elements_instanced
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.draw_elements_instanced_invalid_program
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.draw_elements_instanced_incomplete_primitive
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.draw_elements_instanced_base_vertex
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.draw_range_elements
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.draw_range_elements_invalid_program
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.draw_range_elements_incomplete_primitive
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.vertex_array.draw_range_elements_base_vertex
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.state.enable
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.state.disable
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.state.get_booleanv
@@ -16022,6 +16292,7 @@ dEQP-GLES31.functional.debug.negative_coverage.callbacks.state.get_floatv
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.state.get_integerv
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.state.get_integer64v
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.state.get_integeri_v
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.state.get_booleani_v
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.state.get_integer64i_v
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.state.get_string
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.state.get_stringi
@@ -16060,6 +16331,25 @@ dEQP-GLES31.functional.debug.negative_coverage.callbacks.state.get_query_objectu
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.state.get_synciv
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.state.is_enabled
 dEQP-GLES31.functional.debug.negative_coverage.callbacks.state.hint
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.state.enablei
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.state.disablei
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.state.get_tex_parameteriiv
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.state.get_tex_parameteriuiv
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.state.get_nuniformfv
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.state.get_nuniformiv
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.state.get_nuniformuiv
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.state.is_enabledi
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.atomic_counter.atomic_max_counter_bindings
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.atomic_counter.atomic_precision
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.atomic_counter.atomic_binding_offset_overlap
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.atomic_counter.atomic_binding_omitted
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.atomic_counter.atomic_struct
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.atomic_counter.atomic_body_write
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.atomic_counter.atomic_body_declare
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader_image_load_store.image_store
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader_image_load_store.image_load
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader_image_load_store.image_atomic
+dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader_image_load_store.image_atomic_exchange
 dEQP-GLES31.functional.debug.negative_coverage.log.buffer.bind_buffer
 dEQP-GLES31.functional.debug.negative_coverage.log.buffer.delete_buffers
 dEQP-GLES31.functional.debug.negative_coverage.log.buffer.gen_buffers
@@ -16108,6 +16398,8 @@ dEQP-GLES31.functional.debug.negative_coverage.log.texture.compressedteximage2d_
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.compressedteximage2d_max_width_height
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.compressedteximage2d_invalid_border
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.compressedteximage2d_invalid_size
+dEQP-GLES31.functional.debug.negative_coverage.log.texture.compressedteximage2d_neg_size
+dEQP-GLES31.functional.debug.negative_coverage.log.texture.compressedteximage2d_invalid_width_height
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.compressedteximage2d_invalid_buffer_target
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.copyteximage2d_invalid_target
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.copyteximage2d_invalid_format
@@ -16119,6 +16411,8 @@ dEQP-GLES31.functional.debug.negative_coverage.log.texture.copyteximage2d_max_wi
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.copyteximage2d_invalid_border
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.copyteximage2d_incomplete_framebuffer
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.copytexsubimage2d_invalid_target
+dEQP-GLES31.functional.debug.negative_coverage.log.texture.copytexsubimage2d_read_buffer_is_none
+dEQP-GLES31.functional.debug.negative_coverage.log.texture.copytexsubimage2d_texture_internalformat
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.copytexsubimage2d_neg_level
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.copytexsubimage2d_max_level
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.copytexsubimage2d_neg_offset
@@ -16148,6 +16442,8 @@ dEQP-GLES31.functional.debug.negative_coverage.log.texture.texparameteri
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.texparameterf
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.texparameteriv
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.texparameterfv
+dEQP-GLES31.functional.debug.negative_coverage.log.texture.texparameterIiv
+dEQP-GLES31.functional.debug.negative_coverage.log.texture.texparameterIuiv
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.compressedtexsubimage2d
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.compressedtexsubimage2d_neg_level
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.compressedtexsubimage2d_max_level
@@ -16184,6 +16480,8 @@ dEQP-GLES31.functional.debug.negative_coverage.log.texture.compressedteximage3d_
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.compressedteximage3d_max_width_height_depth
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.compressedteximage3d_invalid_border
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.compressedteximage3d_invalid_size
+dEQP-GLES31.functional.debug.negative_coverage.log.texture.compressedteximage3d_invalid_width_height
+dEQP-GLES31.functional.debug.negative_coverage.log.texture.compressedteximage3d_invalid_format
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.compressedteximage3d_invalid_buffer_target
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.compressedtexsubimage3d
 dEQP-GLES31.functional.debug.negative_coverage.log.texture.compressedtexsubimage3d_neg_level
@@ -16218,10 +16516,14 @@ dEQP-GLES31.functional.debug.negative_coverage.log.shader.bind_sampler
 dEQP-GLES31.functional.debug.negative_coverage.log.shader.delete_samplers
 dEQP-GLES31.functional.debug.negative_coverage.log.shader.get_sampler_parameteriv
 dEQP-GLES31.functional.debug.negative_coverage.log.shader.get_sampler_parameterfv
+dEQP-GLES31.functional.debug.negative_coverage.log.shader.get_sampler_parameterIiv
+dEQP-GLES31.functional.debug.negative_coverage.log.shader.get_sampler_parameterIuiv
 dEQP-GLES31.functional.debug.negative_coverage.log.shader.sampler_parameteri
 dEQP-GLES31.functional.debug.negative_coverage.log.shader.sampler_parameteriv
 dEQP-GLES31.functional.debug.negative_coverage.log.shader.sampler_parameterf
 dEQP-GLES31.functional.debug.negative_coverage.log.shader.sampler_parameterfv
+dEQP-GLES31.functional.debug.negative_coverage.log.shader.sampler_parameterIiv
+dEQP-GLES31.functional.debug.negative_coverage.log.shader.sampler_parameterIuiv
 dEQP-GLES31.functional.debug.negative_coverage.log.shader.get_attrib_location
 dEQP-GLES31.functional.debug.negative_coverage.log.shader.get_uniform_location
 dEQP-GLES31.functional.debug.negative_coverage.log.shader.bind_attrib_location
@@ -16260,6 +16562,8 @@ dEQP-GLES31.functional.debug.negative_coverage.log.shader.resume_transform_feedb
 dEQP-GLES31.functional.debug.negative_coverage.log.shader.end_transform_feedback
 dEQP-GLES31.functional.debug.negative_coverage.log.shader.get_transform_feedback_varying
 dEQP-GLES31.functional.debug.negative_coverage.log.shader.transform_feedback_varyings
+dEQP-GLES31.functional.debug.negative_coverage.log.shader.compile_compute_shader
+dEQP-GLES31.functional.debug.negative_coverage.log.shader.link_compute_shader
 dEQP-GLES31.functional.debug.negative_coverage.log.fragment.scissor
 dEQP-GLES31.functional.debug.negative_coverage.log.fragment.depth_func
 dEQP-GLES31.functional.debug.negative_coverage.log.fragment.viewport
@@ -16269,9 +16573,13 @@ dEQP-GLES31.functional.debug.negative_coverage.log.fragment.stencil_op
 dEQP-GLES31.functional.debug.negative_coverage.log.fragment.stencil_op_separate
 dEQP-GLES31.functional.debug.negative_coverage.log.fragment.stencil_mask_separate
 dEQP-GLES31.functional.debug.negative_coverage.log.fragment.blend_equation
+dEQP-GLES31.functional.debug.negative_coverage.log.fragment.blend_equationi
 dEQP-GLES31.functional.debug.negative_coverage.log.fragment.blend_equation_separate
+dEQP-GLES31.functional.debug.negative_coverage.log.fragment.blend_equation_separatei
 dEQP-GLES31.functional.debug.negative_coverage.log.fragment.blend_func
+dEQP-GLES31.functional.debug.negative_coverage.log.fragment.blend_funci
 dEQP-GLES31.functional.debug.negative_coverage.log.fragment.blend_func_separate
+dEQP-GLES31.functional.debug.negative_coverage.log.fragment.blend_func_separatei
 dEQP-GLES31.functional.debug.negative_coverage.log.fragment.cull_face
 dEQP-GLES31.functional.debug.negative_coverage.log.fragment.front_face
 dEQP-GLES31.functional.debug.negative_coverage.log.fragment.line_width
@@ -16289,6 +16597,8 @@ dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.vertex_attribi4
 dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.vertex_attribi4v
 dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.vertex_attrib_pointer
 dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.vertex_attrib_i_pointer
+dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.vertex_attrib_format
+dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.vertex_attrib_i_format
 dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.enable_vertex_attrib_array
 dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.disable_vertex_attrib_array
 dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.gen_vertex_arrays
@@ -16299,6 +16609,7 @@ dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.draw_arrays
 dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.draw_arrays_invalid_program
 dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.draw_arrays_incomplete_primitive
 dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.draw_elements
+dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.draw_elements_base_vertex
 dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.draw_elements_invalid_program
 dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.draw_elements_incomplete_primitive
 dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.draw_arrays_instanced
@@ -16307,9 +16618,11 @@ dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.draw_arrays_inst
 dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.draw_elements_instanced
 dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.draw_elements_instanced_invalid_program
 dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.draw_elements_instanced_incomplete_primitive
+dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.draw_elements_instanced_base_vertex
 dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.draw_range_elements
 dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.draw_range_elements_invalid_program
 dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.draw_range_elements_incomplete_primitive
+dEQP-GLES31.functional.debug.negative_coverage.log.vertex_array.draw_range_elements_base_vertex
 dEQP-GLES31.functional.debug.negative_coverage.log.state.enable
 dEQP-GLES31.functional.debug.negative_coverage.log.state.disable
 dEQP-GLES31.functional.debug.negative_coverage.log.state.get_booleanv
@@ -16317,6 +16630,7 @@ dEQP-GLES31.functional.debug.negative_coverage.log.state.get_floatv
 dEQP-GLES31.functional.debug.negative_coverage.log.state.get_integerv
 dEQP-GLES31.functional.debug.negative_coverage.log.state.get_integer64v
 dEQP-GLES31.functional.debug.negative_coverage.log.state.get_integeri_v
+dEQP-GLES31.functional.debug.negative_coverage.log.state.get_booleani_v
 dEQP-GLES31.functional.debug.negative_coverage.log.state.get_integer64i_v
 dEQP-GLES31.functional.debug.negative_coverage.log.state.get_string
 dEQP-GLES31.functional.debug.negative_coverage.log.state.get_stringi
@@ -16355,6 +16669,25 @@ dEQP-GLES31.functional.debug.negative_coverage.log.state.get_query_objectuiv
 dEQP-GLES31.functional.debug.negative_coverage.log.state.get_synciv
 dEQP-GLES31.functional.debug.negative_coverage.log.state.is_enabled
 dEQP-GLES31.functional.debug.negative_coverage.log.state.hint
+dEQP-GLES31.functional.debug.negative_coverage.log.state.enablei
+dEQP-GLES31.functional.debug.negative_coverage.log.state.disablei
+dEQP-GLES31.functional.debug.negative_coverage.log.state.get_tex_parameteriiv
+dEQP-GLES31.functional.debug.negative_coverage.log.state.get_tex_parameteriuiv
+dEQP-GLES31.functional.debug.negative_coverage.log.state.get_nuniformfv
+dEQP-GLES31.functional.debug.negative_coverage.log.state.get_nuniformiv
+dEQP-GLES31.functional.debug.negative_coverage.log.state.get_nuniformuiv
+dEQP-GLES31.functional.debug.negative_coverage.log.state.is_enabledi
+dEQP-GLES31.functional.debug.negative_coverage.log.atomic_counter.atomic_max_counter_bindings
+dEQP-GLES31.functional.debug.negative_coverage.log.atomic_counter.atomic_precision
+dEQP-GLES31.functional.debug.negative_coverage.log.atomic_counter.atomic_binding_offset_overlap
+dEQP-GLES31.functional.debug.negative_coverage.log.atomic_counter.atomic_binding_omitted
+dEQP-GLES31.functional.debug.negative_coverage.log.atomic_counter.atomic_struct
+dEQP-GLES31.functional.debug.negative_coverage.log.atomic_counter.atomic_body_write
+dEQP-GLES31.functional.debug.negative_coverage.log.atomic_counter.atomic_body_declare
+dEQP-GLES31.functional.debug.negative_coverage.log.shader_image_load_store.image_store
+dEQP-GLES31.functional.debug.negative_coverage.log.shader_image_load_store.image_load
+dEQP-GLES31.functional.debug.negative_coverage.log.shader_image_load_store.image_atomic
+dEQP-GLES31.functional.debug.negative_coverage.log.shader_image_load_store.image_atomic_exchange
 dEQP-GLES31.functional.debug.negative_coverage.get_error.buffer.bind_buffer
 dEQP-GLES31.functional.debug.negative_coverage.get_error.buffer.delete_buffers
 dEQP-GLES31.functional.debug.negative_coverage.get_error.buffer.gen_buffers
@@ -16403,6 +16736,8 @@ dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedtexim
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedteximage2d_max_width_height
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedteximage2d_invalid_border
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedteximage2d_invalid_size
+dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedteximage2d_neg_size
+dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedteximage2d_invalid_width_height
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedteximage2d_invalid_buffer_target
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.copyteximage2d_invalid_target
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.copyteximage2d_invalid_format
@@ -16414,6 +16749,8 @@ dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.copyteximage2d_
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.copyteximage2d_invalid_border
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.copyteximage2d_incomplete_framebuffer
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.copytexsubimage2d_invalid_target
+dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.copytexsubimage2d_read_buffer_is_none
+dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.copytexsubimage2d_texture_internalformat
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.copytexsubimage2d_neg_level
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.copytexsubimage2d_max_level
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.copytexsubimage2d_neg_offset
@@ -16443,6 +16780,8 @@ dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.texparameteri
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.texparameterf
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.texparameteriv
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.texparameterfv
+dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.texparameterIiv
+dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.texparameterIuiv
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedtexsubimage2d
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedtexsubimage2d_neg_level
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedtexsubimage2d_max_level
@@ -16479,6 +16818,8 @@ dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedtexim
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedteximage3d_max_width_height_depth
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedteximage3d_invalid_border
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedteximage3d_invalid_size
+dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedteximage3d_invalid_width_height
+dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedteximage3d_invalid_format
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedteximage3d_invalid_buffer_target
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedtexsubimage3d
 dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedtexsubimage3d_neg_level
@@ -16513,10 +16854,14 @@ dEQP-GLES31.functional.debug.negative_coverage.get_error.shader.bind_sampler
 dEQP-GLES31.functional.debug.negative_coverage.get_error.shader.delete_samplers
 dEQP-GLES31.functional.debug.negative_coverage.get_error.shader.get_sampler_parameteriv
 dEQP-GLES31.functional.debug.negative_coverage.get_error.shader.get_sampler_parameterfv
+dEQP-GLES31.functional.debug.negative_coverage.get_error.shader.get_sampler_parameterIiv
+dEQP-GLES31.functional.debug.negative_coverage.get_error.shader.get_sampler_parameterIuiv
 dEQP-GLES31.functional.debug.negative_coverage.get_error.shader.sampler_parameteri
 dEQP-GLES31.functional.debug.negative_coverage.get_error.shader.sampler_parameteriv
 dEQP-GLES31.functional.debug.negative_coverage.get_error.shader.sampler_parameterf
 dEQP-GLES31.functional.debug.negative_coverage.get_error.shader.sampler_parameterfv
+dEQP-GLES31.functional.debug.negative_coverage.get_error.shader.sampler_parameterIiv
+dEQP-GLES31.functional.debug.negative_coverage.get_error.shader.sampler_parameterIuiv
 dEQP-GLES31.functional.debug.negative_coverage.get_error.shader.get_attrib_location
 dEQP-GLES31.functional.debug.negative_coverage.get_error.shader.get_uniform_location
 dEQP-GLES31.functional.debug.negative_coverage.get_error.shader.bind_attrib_location
@@ -16555,6 +16900,8 @@ dEQP-GLES31.functional.debug.negative_coverage.get_error.shader.resume_transform
 dEQP-GLES31.functional.debug.negative_coverage.get_error.shader.end_transform_feedback
 dEQP-GLES31.functional.debug.negative_coverage.get_error.shader.get_transform_feedback_varying
 dEQP-GLES31.functional.debug.negative_coverage.get_error.shader.transform_feedback_varyings
+dEQP-GLES31.functional.debug.negative_coverage.get_error.shader.compile_compute_shader
+dEQP-GLES31.functional.debug.negative_coverage.get_error.shader.link_compute_shader
 dEQP-GLES31.functional.debug.negative_coverage.get_error.fragment.scissor
 dEQP-GLES31.functional.debug.negative_coverage.get_error.fragment.depth_func
 dEQP-GLES31.functional.debug.negative_coverage.get_error.fragment.viewport
@@ -16564,9 +16911,13 @@ dEQP-GLES31.functional.debug.negative_coverage.get_error.fragment.stencil_op
 dEQP-GLES31.functional.debug.negative_coverage.get_error.fragment.stencil_op_separate
 dEQP-GLES31.functional.debug.negative_coverage.get_error.fragment.stencil_mask_separate
 dEQP-GLES31.functional.debug.negative_coverage.get_error.fragment.blend_equation
+dEQP-GLES31.functional.debug.negative_coverage.get_error.fragment.blend_equationi
 dEQP-GLES31.functional.debug.negative_coverage.get_error.fragment.blend_equation_separate
+dEQP-GLES31.functional.debug.negative_coverage.get_error.fragment.blend_equation_separatei
 dEQP-GLES31.functional.debug.negative_coverage.get_error.fragment.blend_func
+dEQP-GLES31.functional.debug.negative_coverage.get_error.fragment.blend_funci
 dEQP-GLES31.functional.debug.negative_coverage.get_error.fragment.blend_func_separate
+dEQP-GLES31.functional.debug.negative_coverage.get_error.fragment.blend_func_separatei
 dEQP-GLES31.functional.debug.negative_coverage.get_error.fragment.cull_face
 dEQP-GLES31.functional.debug.negative_coverage.get_error.fragment.front_face
 dEQP-GLES31.functional.debug.negative_coverage.get_error.fragment.line_width
@@ -16584,6 +16935,8 @@ dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.vertex_att
 dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.vertex_attribi4v
 dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.vertex_attrib_pointer
 dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.vertex_attrib_i_pointer
+dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.vertex_attrib_format
+dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.vertex_attrib_i_format
 dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.enable_vertex_attrib_array
 dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.disable_vertex_attrib_array
 dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.gen_vertex_arrays
@@ -16594,6 +16947,7 @@ dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.draw_array
 dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.draw_arrays_invalid_program
 dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.draw_arrays_incomplete_primitive
 dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.draw_elements
+dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.draw_elements_base_vertex
 dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.draw_elements_invalid_program
 dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.draw_elements_incomplete_primitive
 dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.draw_arrays_instanced
@@ -16602,9 +16956,11 @@ dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.draw_array
 dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.draw_elements_instanced
 dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.draw_elements_instanced_invalid_program
 dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.draw_elements_instanced_incomplete_primitive
+dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.draw_elements_instanced_base_vertex
 dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.draw_range_elements
 dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.draw_range_elements_invalid_program
 dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.draw_range_elements_incomplete_primitive
+dEQP-GLES31.functional.debug.negative_coverage.get_error.vertex_array.draw_range_elements_base_vertex
 dEQP-GLES31.functional.debug.negative_coverage.get_error.state.enable
 dEQP-GLES31.functional.debug.negative_coverage.get_error.state.disable
 dEQP-GLES31.functional.debug.negative_coverage.get_error.state.get_booleanv
@@ -16612,6 +16968,7 @@ dEQP-GLES31.functional.debug.negative_coverage.get_error.state.get_floatv
 dEQP-GLES31.functional.debug.negative_coverage.get_error.state.get_integerv
 dEQP-GLES31.functional.debug.negative_coverage.get_error.state.get_integer64v
 dEQP-GLES31.functional.debug.negative_coverage.get_error.state.get_integeri_v
+dEQP-GLES31.functional.debug.negative_coverage.get_error.state.get_booleani_v
 dEQP-GLES31.functional.debug.negative_coverage.get_error.state.get_integer64i_v
 dEQP-GLES31.functional.debug.negative_coverage.get_error.state.get_string
 dEQP-GLES31.functional.debug.negative_coverage.get_error.state.get_stringi
@@ -16649,6 +17006,25 @@ dEQP-GLES31.functional.debug.negative_coverage.get_error.state.get_query_objectu
 dEQP-GLES31.functional.debug.negative_coverage.get_error.state.get_synciv
 dEQP-GLES31.functional.debug.negative_coverage.get_error.state.is_enabled
 dEQP-GLES31.functional.debug.negative_coverage.get_error.state.hint
+dEQP-GLES31.functional.debug.negative_coverage.get_error.state.enablei
+dEQP-GLES31.functional.debug.negative_coverage.get_error.state.disablei
+dEQP-GLES31.functional.debug.negative_coverage.get_error.state.get_tex_parameteriiv
+dEQP-GLES31.functional.debug.negative_coverage.get_error.state.get_tex_parameteriuiv
+dEQP-GLES31.functional.debug.negative_coverage.get_error.state.get_nuniformfv
+dEQP-GLES31.functional.debug.negative_coverage.get_error.state.get_nuniformiv
+dEQP-GLES31.functional.debug.negative_coverage.get_error.state.get_nuniformuiv
+dEQP-GLES31.functional.debug.negative_coverage.get_error.state.is_enabledi
+dEQP-GLES31.functional.debug.negative_coverage.get_error.atomic_counter.atomic_max_counter_bindings
+dEQP-GLES31.functional.debug.negative_coverage.get_error.atomic_counter.atomic_precision
+dEQP-GLES31.functional.debug.negative_coverage.get_error.atomic_counter.atomic_binding_offset_overlap
+dEQP-GLES31.functional.debug.negative_coverage.get_error.atomic_counter.atomic_binding_omitted
+dEQP-GLES31.functional.debug.negative_coverage.get_error.atomic_counter.atomic_struct
+dEQP-GLES31.functional.debug.negative_coverage.get_error.atomic_counter.atomic_body_write
+dEQP-GLES31.functional.debug.negative_coverage.get_error.atomic_counter.atomic_body_declare
+dEQP-GLES31.functional.debug.negative_coverage.get_error.shader_image_load_store.image_store
+dEQP-GLES31.functional.debug.negative_coverage.get_error.shader_image_load_store.image_load
+dEQP-GLES31.functional.debug.negative_coverage.get_error.shader_image_load_store.image_atomic
+dEQP-GLES31.functional.debug.negative_coverage.get_error.shader_image_load_store.image_atomic_exchange
 dEQP-GLES31.functional.debug.externally_generated.application_messages
 dEQP-GLES31.functional.debug.externally_generated.third_party_messages
 dEQP-GLES31.functional.debug.externally_generated.push_pop_stack
diff --git a/android/cts/master/src/egl-internal-api-tests.txt b/android/cts/master/src/egl-internal-api-tests.txt
new file mode 100644 (file)
index 0000000..b923046
--- /dev/null
@@ -0,0 +1 @@
+dEQP-EGL.functional.image.*.*android_native*
diff --git a/android/cts/master/src/egl-test-issues.txt b/android/cts/master/src/egl-test-issues.txt
new file mode 100644 (file)
index 0000000..7b0b25a
--- /dev/null
@@ -0,0 +1,9 @@
+# Bug: 26953953
+dEQP-EGL.functional.multithread.window
+dEQP-EGL.functional.multithread.pbuffer_window
+dEQP-EGL.functional.multithread.pixmap_window
+dEQP-EGL.functional.multithread.window_context
+dEQP-EGL.functional.multithread.pbuffer_pixmap_window
+dEQP-EGL.functional.multithread.pixmap_window_context
+dEQP-EGL.functional.multithread.pbuffer_window_context
+dEQP-EGL.functional.multithread.pbuffer_pixmap_window_context
index c8179ee..3d4e7c6 100644 (file)
@@ -2631,14 +2631,6 @@ dEQP-GLES2.functional.texture.specification.teximage2d_align.cube_rgba8888_47_1
 dEQP-GLES2.functional.texture.specification.teximage2d_align.cube_rgba8888_47_2
 dEQP-GLES2.functional.texture.specification.teximage2d_align.cube_rgba8888_47_4
 dEQP-GLES2.functional.texture.specification.teximage2d_align.cube_rgba8888_47_8
-dEQP-GLES2.functional.texture.units.2_units.mixed.0
-dEQP-GLES2.functional.texture.units.2_units.mixed.1
-dEQP-GLES2.functional.texture.units.2_units.mixed.2
-dEQP-GLES2.functional.texture.units.2_units.mixed.5
-dEQP-GLES2.functional.texture.units.2_units.only_cube.0
-dEQP-GLES2.functional.texture.units.2_units.only_cube.1
-dEQP-GLES2.functional.texture.units.2_units.only_cube.3
-dEQP-GLES2.functional.texture.units.4_units.mixed.6
 dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_nearest_linear_clamp
 dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_nearest_linear_mirror
 dEQP-GLES2.functional.texture.vertex.2d.filtering.linear_mipmap_nearest_linear_repeat
index 6aabd91..37aa9ed 100644 (file)
@@ -5,13 +5,6 @@ dEQP-GLES2.functional.texture.size.cube.512x512_rgba4444
 dEQP-GLES2.functional.fbo.completeness.renderable.renderbuffer.color0.rgb16f
 dEQP-GLES2.functional.fbo.completeness.renderable.texture.color0.rgb16f
 
-# Bug 23219552
-dEQP-GLES2.functional.dither.disabled.gradient_white
-dEQP-GLES2.functional.dither.disabled.gradient_red
-dEQP-GLES2.functional.dither.disabled.gradient_green
-dEQP-GLES2.functional.dither.disabled.gradient_blue
-dEQP-GLES2.functional.dither.disabled.gradient_alpha
-
 #Bug 25720457
 dEQP-GLES2.functional.texture.units.2_units.only_cube.9
 
@@ -27,3 +20,6 @@ dEQP-GLES2.functional.texture.wrap.repeat_clamp_nearest_pot_etc1
 dEQP-GLES2.functional.texture.wrap.repeat_mirror_nearest_pot_etc1
 dEQP-GLES2.functional.texture.wrap.repeat_mirror_nearest_pot_rgba4444
 dEQP-GLES2.functional.texture.wrap.repeat_repeat_nearest_pot_etc1
+
+# Bug 26906226
+dEQP-GLES2.functional.texture.units.*
index 8b68757..31566d3 100644 (file)
@@ -139,13 +139,6 @@ dEQP-GLES3.functional.shaders.texture_functions.texturelodoffset.sampler3d_float
 dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.*mediump*.scalar
 dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.*highp*.scalar
 
-# Bug 23219552
-dEQP-GLES3.functional.dither.disabled.gradient_white
-dEQP-GLES3.functional.dither.disabled.gradient_red
-dEQP-GLES3.functional.dither.disabled.gradient_green
-dEQP-GLES3.functional.dither.disabled.gradient_blue
-dEQP-GLES3.functional.dither.disabled.gradient_alpha
-
 # Bug 24068436
 dEQP-GLES3.functional.shaders.texture_functions.texturegrad.samplercubeshadow_vertex
 dEQP-GLES3.functional.shaders.texture_functions.texturegrad.samplercubeshadow_fragment
index b9169b6..f6e1cef 100644 (file)
@@ -19,9 +19,6 @@ dEQP-GLES31.functional.shaders.multisample_interpolation.interpolate_at_centroid
 dEQP-GLES31.functional.shaders.builtin_functions.precision.atan2.mediump_*
 dEQP-GLES31.functional.shaders.builtin_functions.precision.atan2.highp_*
 
-# Bug 22180525
-dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_lines_*_samples_*
-
 # Bug 22302334
 dEQP-GLES31.functional.shaders.builtin_functions.precision.acosh.highp_*
 dEQP-GLES31.functional.shaders.builtin_functions.precision.atanh.highp_*
index 197b15a..7630931 100644 (file)
                                        <Test name="atomic_counter_buffer_size_getinteger64i_v">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="shader_storager_buffer_binding_getbooleani_v">
+                                       <Test name="shader_storage_buffer_binding_getbooleani_v">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="shader_storager_buffer_binding_getintegeri_v">
+                                       <Test name="shader_storage_buffer_binding_getintegeri_v">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="shader_storager_buffer_binding_getinteger64i_v">
+                                       <Test name="shader_storage_buffer_binding_getinteger64i_v">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="shader_storager_buffer_start_getbooleani_v">
+                                       <Test name="shader_storage_buffer_start_getbooleani_v">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="shader_storager_buffer_start_getintegeri_v">
+                                       <Test name="shader_storage_buffer_start_getintegeri_v">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="shader_storager_buffer_start_getinteger64i_v">
+                                       <Test name="shader_storage_buffer_start_getinteger64i_v">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="shader_storager_buffer_size_getbooleani_v">
+                                       <Test name="shader_storage_buffer_size_getbooleani_v">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="shader_storager_buffer_size_getintegeri_v">
+                                       <Test name="shader_storage_buffer_size_getintegeri_v">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
-                                       <Test name="shader_storager_buffer_size_getinteger64i_v">
+                                       <Test name="shader_storage_buffer_size_getinteger64i_v">
                                                <TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
                                        </Test>
                                        <Test name="image_binding_name_getbooleani_v">
index 4a758a0..6ff2665 100644 (file)
@@ -12649,15 +12649,15 @@ dEQP-GLES31.functional.state_query.indexed.atomic_counter_buffer_start_getintege
 dEQP-GLES31.functional.state_query.indexed.atomic_counter_buffer_size_getbooleani_v
 dEQP-GLES31.functional.state_query.indexed.atomic_counter_buffer_size_getintegeri_v
 dEQP-GLES31.functional.state_query.indexed.atomic_counter_buffer_size_getinteger64i_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_binding_getbooleani_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_binding_getintegeri_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_binding_getinteger64i_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_start_getbooleani_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_start_getintegeri_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_start_getinteger64i_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_size_getbooleani_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_size_getintegeri_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_size_getinteger64i_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_binding_getbooleani_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_binding_getintegeri_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_binding_getinteger64i_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_start_getbooleani_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_start_getintegeri_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_start_getinteger64i_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_size_getbooleani_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_size_getintegeri_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_size_getinteger64i_v
 dEQP-GLES31.functional.state_query.indexed.image_binding_name_getbooleani_v
 dEQP-GLES31.functional.state_query.indexed.image_binding_name_getintegeri_v
 dEQP-GLES31.functional.state_query.indexed.image_binding_name_getinteger64i_v
index 4a758a0..6ff2665 100644 (file)
@@ -12649,15 +12649,15 @@ dEQP-GLES31.functional.state_query.indexed.atomic_counter_buffer_start_getintege
 dEQP-GLES31.functional.state_query.indexed.atomic_counter_buffer_size_getbooleani_v
 dEQP-GLES31.functional.state_query.indexed.atomic_counter_buffer_size_getintegeri_v
 dEQP-GLES31.functional.state_query.indexed.atomic_counter_buffer_size_getinteger64i_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_binding_getbooleani_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_binding_getintegeri_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_binding_getinteger64i_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_start_getbooleani_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_start_getintegeri_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_start_getinteger64i_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_size_getbooleani_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_size_getintegeri_v
-dEQP-GLES31.functional.state_query.indexed.shader_storager_buffer_size_getinteger64i_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_binding_getbooleani_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_binding_getintegeri_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_binding_getinteger64i_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_start_getbooleani_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_start_getintegeri_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_start_getinteger64i_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_size_getbooleani_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_size_getintegeri_v
+dEQP-GLES31.functional.state_query.indexed.shader_storage_buffer_size_getinteger64i_v
 dEQP-GLES31.functional.state_query.indexed.image_binding_name_getbooleani_v
 dEQP-GLES31.functional.state_query.indexed.image_binding_name_getintegeri_v
 dEQP-GLES31.functional.state_query.indexed.image_binding_name_getinteger64i_v
index a4deb3b..06b7628 100644 (file)
@@ -2,11 +2,14 @@ group custom "Custom loop tests"
 
        case continue_in_fragment_for_loop
                vertex ""
+                       ${VERTEX_DECLARATIONS}
                        void main()
                        {
+                               ${VERTEX_OUTPUT}
                        }
                ""
                fragment ""
+                       ${FRAGMENT_DECLARATIONS}
                        void main()
                        {
                                int count1 = 0;
@@ -15,7 +18,7 @@ group custom "Custom loop tests"
                                        if (count1 == 2)
                                                continue;
                                }
-                               gl_FragColor = vec4(1.0);
+                               ${FRAGMENT_OUTPUT}
                        }
                ""
        end
index 5cb9ca7..ce88002 100644 (file)
@@ -77,9 +77,8 @@ tcu::TestStatus createPoolNullParamsTest(Context& context)
                0u,                                                                                                                     // flags;
                queueFamilyIndex,                                                                                       // queueFamilyIndex;
        };
-       VkCommandPool cmdPool;
 
-       VK_CHECK(vk.createCommandPool(vkDevice, &cmdPoolParams, DE_NULL, &cmdPool));
+       createCommandPool(vk, vkDevice, &cmdPoolParams, DE_NULL);
 
        return tcu::TestStatus::pass("Command Pool allocated correctly.");
 }
@@ -98,9 +97,8 @@ tcu::TestStatus createPoolNonNullAllocatorTest(Context& context)
                0u,                                                                                                                     // flags;
                queueFamilyIndex,                                                                                       // queueFamilyIndex;
        };
-       VkCommandPool cmdPool;
 
-       VK_CHECK(vk.createCommandPool(vkDevice, &cmdPoolParams, allocationCallbacks, &cmdPool));
+       createCommandPool(vk, vkDevice, &cmdPoolParams, allocationCallbacks);
 
        return tcu::TestStatus::pass("Command Pool allocated correctly.");
 }
@@ -118,9 +116,8 @@ tcu::TestStatus createPoolTransientBitTest(Context& context)
                VK_COMMAND_POOL_CREATE_TRANSIENT_BIT,                                           // flags;
                queueFamilyIndex,                                                                                       // queueFamilyIndex;
        };
-       VkCommandPool cmdPool;
 
-       VK_CHECK(vk.createCommandPool(vkDevice, &cmdPoolParams, DE_NULL, &cmdPool));
+       createCommandPool(vk, vkDevice, &cmdPoolParams, DE_NULL);
 
        return tcu::TestStatus::pass("Command Pool allocated correctly.");
 }
@@ -138,9 +135,8 @@ tcu::TestStatus createPoolResetBitTest(Context& context)
                VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT,                        // flags;
                queueFamilyIndex,                                                                                       // queueFamilyIndex;
        };
-       VkCommandPool cmdPool;
 
-       VK_CHECK(vk.createCommandPool(vkDevice, &cmdPoolParams, DE_NULL, &cmdPool));
+       createCommandPool(vk, vkDevice, &cmdPoolParams, DE_NULL);
 
        return tcu::TestStatus::pass("Command Pool allocated correctly.");
 }
@@ -158,10 +154,10 @@ tcu::TestStatus resetPoolReleaseResourcesBitTest(Context& context)
                0u,                                                                                                                     // flags;
                queueFamilyIndex,                                                                                       // queueFamilyIndex;
        };
-       VkCommandPool cmdPool;
 
-       VK_CHECK(vk.createCommandPool(vkDevice, &cmdPoolParams, DE_NULL, &cmdPool));
-       VK_CHECK(vk.resetCommandPool(vkDevice, cmdPool, VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT));
+       const Unique<VkCommandPool>                             cmdPool                                 (createCommandPool(vk, vkDevice, &cmdPoolParams, DE_NULL));
+
+       VK_CHECK(vk.resetCommandPool(vkDevice, *cmdPool, VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT));
 
        return tcu::TestStatus::pass("Command Pool allocated correctly.");
 }
@@ -179,10 +175,10 @@ tcu::TestStatus resetPoolNoFlagsTest(Context& context)
                0u,                                                                                                                     // flags;
                queueFamilyIndex,                                                                                       // queueFamilyIndex;
        };
-       VkCommandPool cmdPool;
 
-       VK_CHECK(vk.createCommandPool(vkDevice, &cmdPoolParams, DE_NULL, &cmdPool));
-       VK_CHECK(vk.resetCommandPool(vkDevice, cmdPool, 0u));
+       const Unique<VkCommandPool>                             cmdPool                                 (createCommandPool(vk, vkDevice, &cmdPoolParams, DE_NULL));
+
+       VK_CHECK(vk.resetCommandPool(vkDevice, *cmdPool, 0u));
 
        return tcu::TestStatus::pass("Command Pool allocated correctly.");
 }
@@ -1326,17 +1322,17 @@ tcu::TestStatus oneTimeSubmitFlagPrimaryBufferTest(Context& context)
        const VkQueue                                                   queue                                   = context.getUniversalQueue();
        const deUint32                                                  queueFamilyIndex                = context.getUniversalQueueFamilyIndex();
 
-       const VkCommandPoolCreateInfo                           cmdPoolParams                   =
+       const VkCommandPoolCreateInfo                   cmdPoolParams                   =
        {
                VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,                                     //      VkStructureType                         sType;
                DE_NULL,                                                                                                        //      const void*                                     pNext;
                VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT,                        //      VkCommandPoolCreateFlags        flags;
                queueFamilyIndex,                                                                                       //      deUint32                                        queueFamilyIndex;
        };
-       const Unique<VkCommandPool>                                     cmdPool                                 (createCommandPool(vk, vkDevice, &cmdPoolParams));
+       const Unique<VkCommandPool>                             cmdPool                                 (createCommandPool(vk, vkDevice, &cmdPoolParams));
 
        // Command buffer
-       const VkCommandBufferAllocateInfo                               cmdBufParams                    =
+       const VkCommandBufferAllocateInfo               cmdBufParams                    =
        {
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,                         //      VkStructureType                         sType;
                DE_NULL,                                                                                                        //      const void*                                     pNext;
@@ -1344,8 +1340,8 @@ tcu::TestStatus oneTimeSubmitFlagPrimaryBufferTest(Context& context)
                VK_COMMAND_BUFFER_LEVEL_PRIMARY,                                                        //      VkCommandBufferLevel            level;
                1u,                                                                                                                     //      uint32_t                                        bufferCount;
        };
-       const Unique<VkCommandBuffer>                           primCmdBuf                              (allocateCommandBuffer(vk, vkDevice, &cmdBufParams));
-       const VkCommandBufferBeginInfo                          primCmdBufBeginInfo             =
+       const Unique<VkCommandBuffer>                   primCmdBuf                              (allocateCommandBuffer(vk, vkDevice, &cmdBufParams));
+       const VkCommandBufferBeginInfo                  primCmdBufBeginInfo             =
        {
                VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
                DE_NULL,
index a5a2644..16b01fc 100644 (file)
@@ -3390,6 +3390,7 @@ void createPipelineShaderStages (const DeviceInterface& vk, const VkDevice vkDev
        "%f32 = OpTypeFloat 32\n"                                                                                                                                       \
        "%v3f32 = OpTypeVector %f32 3\n"                                                                                                                        \
        "%v4f32 = OpTypeVector %f32 4\n"                                                                                                                        \
+       "%v4bool = OpTypeVector %bool 4\n"                                                                                                                      \
                                                                                                                                                                                                \
        "%v4f32_function = OpTypeFunction %v4f32 %v4f32\n"                                                                                      \
        "%fun = OpTypeFunction %void\n"                                                                                                                         \
@@ -6565,7 +6566,8 @@ tcu::TestCaseGroup* createNoContractionTests(tcu::TestContext& testCtx)
                "%is0            = OpFOrdEqual %bool %add %c_f32_0\n"
                "%isn1n24         = OpFOrdEqual %bool %add %c_f32_n1pn24\n"
                "%success        = OpLogicalOr %bool %is0 %isn1n24\n"
-               "%ret            = OpSelect %v4f32 %success %c_vec4_0 %c_vec4_1\n"
+               "%v4success      = OpCompositeConstruct %v4bool %success %success %success %success\n"
+               "%ret            = OpSelect %v4f32 %v4success %c_vec4_0 %c_vec4_1\n"
                "                  OpReturnValue %ret\n"
                "                  OpFunctionEnd\n";
 
@@ -6950,7 +6952,8 @@ void createOpQuantizeSingleOptionTests(tcu::TestCaseGroup* testCtx)
                "%b             = OpFAdd %f32 %test_constant %a\n"
                "%c             = OpQuantizeToF16 %f32 %b\n"
                "${condition}\n"
-               "%retval        = OpSelect %v4f32 %cond %c_v4f32_1_0_0_1 %param1"
+               "%v4cond        = OpCompositeConstruct %v4bool %cond %cond %cond %cond\n"
+               "%retval        = OpSelect %v4f32 %v4cond %c_v4f32_1_0_0_1 %param1\n"
                "                 OpReturnValue %retval\n"
                "OpFunctionEnd\n"
        );
@@ -6965,7 +6968,8 @@ void createOpQuantizeSingleOptionTests(tcu::TestCaseGroup* testCtx)
                "%param1        = OpFunctionParameter %v4f32\n"
                "%label_testfun = OpLabel\n"
                "${condition}\n"
-               "%retval        = OpSelect %v4f32 %cond %c_v4f32_1_0_0_1 %param1"
+               "%v4cond        = OpCompositeConstruct %v4bool %cond %cond %cond %cond\n"
+               "%retval        = OpSelect %v4f32 %v4cond %c_v4f32_1_0_0_1 %param1\n"
                "                 OpReturnValue %retval\n"
                "OpFunctionEnd\n"
        );
@@ -7079,7 +7083,8 @@ void createOpQuantizeTwoPossibilityTests(tcu::TestCaseGroup* testCtx)
                "%eq_1          = OpFOrdEqual %bool %c %possible_solution1\n"
                "%eq_2          = OpFOrdEqual %bool %c %possible_solution2\n"
                "%cond          = OpLogicalOr %bool %eq_1 %eq_2\n"
-               "%retval        = OpSelect %v4f32 %cond %c_v4f32_1_0_0_1 %param1"
+               "%v4cond        = OpCompositeConstruct %v4bool %cond %cond %cond %cond\n"
+               "%retval        = OpSelect %v4f32 %v4cond %c_v4f32_1_0_0_1 %param1"
                "                 OpReturnValue %retval\n"
                "OpFunctionEnd\n";
 
index a87360f..6a2b2a3 100644 (file)
@@ -102,8 +102,8 @@ void loadPNG (TextureLevel& dst, const tcu::Archive& archive, const char* fileNa
 
        png_read_info(png_ptr, info_ptr);
 
-       const int               width                   = png_get_image_width(png_ptr, info_ptr);
-       const int               height                  = png_get_image_height(png_ptr, info_ptr);
+       const deUint32  width                   = (deUint32)png_get_image_width(png_ptr, info_ptr);
+       const deUint32  height                  = (deUint32)png_get_image_height(png_ptr, info_ptr);
        TextureFormat   textureFormat;
 
        {
@@ -123,7 +123,7 @@ void loadPNG (TextureLevel& dst, const tcu::Archive& archive, const char* fileNa
 
        std::vector<png_bytep> row_pointers;
        row_pointers.resize(height);
-       for (int y = 0; y < height; y++)
+       for (deUint32 y = 0; y < height; y++)
                row_pointers[y] = (deUint8*)dst.getAccess().getDataPtr() + y*dst.getAccess().getRowPitch();
 
        png_read_image(png_ptr, &row_pointers[0]);
index ae96920..fe4f4dc 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
        { "glActiveTexture",                                            (deFunctionPtr)glActiveTexture },
        { "glAttachShader",                                                     (deFunctionPtr)glAttachShader },
index cd625bb..c3cbc28 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
        { "glActiveTexture",                                            (deFunctionPtr)glActiveTexture },
        { "glAttachShader",                                                     (deFunctionPtr)glAttachShader },
index f5e75ca..7df1a37 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 
 int getTextureParamNumArgs (int pname)
index eb8c98c..13ce84c 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 
 void CallLogWrapper::glActiveShaderProgram (glw::GLuint pipeline, glw::GLuint program)
@@ -207,11 +207,11 @@ void CallLogWrapper::glBindVertexBuffers (glw::GLuint first, glw::GLsizei count,
        m_gl.bindVertexBuffers(first, count, buffers, offsets, strides);
 }
 
-void CallLogWrapper::glBlendBarrierKHR (void)
+void CallLogWrapper::glBlendBarrier (void)
 {
        if (m_enableLog)
-               m_log << TestLog::Message << "glBlendBarrierKHR(" << ");" << TestLog::EndMessage;
-       m_gl.blendBarrierKHR();
+               m_log << TestLog::Message << "glBlendBarrier(" << ");" << TestLog::EndMessage;
+       m_gl.blendBarrier();
 }
 
 void CallLogWrapper::glBlendColor (glw::GLfloat red, glw::GLfloat green, glw::GLfloat blue, glw::GLfloat alpha)
@@ -2890,11 +2890,11 @@ void CallLogWrapper::glPopGroupMarkerEXT (void)
        m_gl.popGroupMarkerEXT();
 }
 
-void CallLogWrapper::glPrimitiveBoundingBoxEXT (glw::GLfloat minX, glw::GLfloat minY, glw::GLfloat minZ, glw::GLfloat minW, glw::GLfloat maxX, glw::GLfloat maxY, glw::GLfloat maxZ, glw::GLfloat maxW)
+void CallLogWrapper::glPrimitiveBoundingBox (glw::GLfloat minX, glw::GLfloat minY, glw::GLfloat minZ, glw::GLfloat minW, glw::GLfloat maxX, glw::GLfloat maxY, glw::GLfloat maxZ, glw::GLfloat maxW)
 {
        if (m_enableLog)
-               m_log << TestLog::Message << "glPrimitiveBoundingBoxEXT(" << minX << ", " << minY << ", " << minZ << ", " << minW << ", " << maxX << ", " << maxY << ", " << maxZ << ", " << maxW << ");" << TestLog::EndMessage;
-       m_gl.primitiveBoundingBoxEXT(minX, minY, minZ, minW, maxX, maxY, maxZ, maxW);
+               m_log << TestLog::Message << "glPrimitiveBoundingBox(" << minX << ", " << minY << ", " << minZ << ", " << minW << ", " << maxX << ", " << maxY << ", " << maxZ << ", " << maxW << ");" << TestLog::EndMessage;
+       m_gl.primitiveBoundingBox(minX, minY, minZ, minW, maxX, maxY, maxZ, maxW);
 }
 
 void CallLogWrapper::glPrimitiveRestartIndex (glw::GLuint index)
index 55505f1..5785d59 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 void                                   glActiveShaderProgram                                                   (glw::GLuint pipeline, glw::GLuint program);
 void                                   glActiveTexture                                                                 (glw::GLenum texture);
@@ -32,7 +32,7 @@ void                                  glBindTransformFeedback                                                 (glw::GLenum target, glw::GLuint id);
 void                                   glBindVertexArray                                                               (glw::GLuint array);
 void                                   glBindVertexBuffer                                                              (glw::GLuint bindingindex, glw::GLuint buffer, glw::GLintptr offset, glw::GLsizei stride);
 void                                   glBindVertexBuffers                                                             (glw::GLuint first, glw::GLsizei count, const glw::GLuint *buffers, const glw::GLintptr *offsets, const glw::GLsizei *strides);
-void                                   glBlendBarrierKHR                                                               (void);
+void                                   glBlendBarrier                                                                  (void);
 void                                   glBlendColor                                                                    (glw::GLfloat red, glw::GLfloat green, glw::GLfloat blue, glw::GLfloat alpha);
 void                                   glBlendEquation                                                                 (glw::GLenum mode);
 void                                   glBlendEquationSeparate                                                 (glw::GLenum modeRGB, glw::GLenum modeAlpha);
@@ -383,7 +383,7 @@ void                                        glPolygonMode                                                                   (glw::GLenum face, glw::GLenum mode);
 void                                   glPolygonOffset                                                                 (glw::GLfloat factor, glw::GLfloat units);
 void                                   glPopDebugGroup                                                                 (void);
 void                                   glPopGroupMarkerEXT                                                             (void);
-void                                   glPrimitiveBoundingBoxEXT                                               (glw::GLfloat minX, glw::GLfloat minY, glw::GLfloat minZ, glw::GLfloat minW, glw::GLfloat maxX, glw::GLfloat maxY, glw::GLfloat maxZ, glw::GLfloat maxW);
+void                                   glPrimitiveBoundingBox                                                  (glw::GLfloat minX, glw::GLfloat minY, glw::GLfloat minZ, glw::GLfloat minW, glw::GLfloat maxX, glw::GLfloat maxY, glw::GLfloat maxZ, glw::GLfloat maxW);
 void                                   glPrimitiveRestartIndex                                                 (glw::GLuint index);
 void                                   glProgramBinary                                                                 (glw::GLuint program, glw::GLenum binaryFormat, const void *binary, glw::GLsizei length);
 void                                   glProgramParameteri                                                             (glw::GLuint program, glw::GLenum pname, glw::GLint value);
index f58d316..18f37bc 100644 (file)
@@ -78,9 +78,9 @@ public:
 Context::Context (const glu::RenderContext& ctx)
        : gl                                            (ctx.getFunctions())
        , vendor                                        ("drawElements")
-       , version                                       ("OpenGL ES 3.1")
+       , version                                       ("OpenGL ES 3.2")
        , renderer                                      ((const char*)gl.getString(GL_RENDERER))
-       , shadingLanguageVersion        ("OpenGL ES GLSL ES 3.1")
+       , shadingLanguageVersion        ("OpenGL ES GLSL ES 3.2")
        , primitiveRestartEnabled       (false)
        , defaultVAO                            (0)
        , defaultVAOBound                       (false)
@@ -343,7 +343,7 @@ static void translateShaderSource (deUint32 shaderType, std::ostream& dst, const
                        }
                }
 
-               if (line == "#version 310 es")
+               if (line == "#version 310 es" || line == "#version 320 es")
                {
                        foundVersion = true;
                        dst << glu::getGLSLVersionDeclaration(version) << "\n";
@@ -629,8 +629,8 @@ ES3PlusWrapperContext::ES3PlusWrapperContext (const ContextFactory& factory, con
                ContextType(ApiType::core(4,3), config.type.getFlags() & validContextFlags),
        };
 
-       if (config.type.getAPI() != ApiType::es(3,1))
-               throw tcu::NotSupportedError("Unsupported context type (ES3.1 wrapper supports only ES3.1)");
+       if (config.type.getAPI() != ApiType::es(3,2))
+               throw tcu::NotSupportedError("Unsupported context type (ES3.2 wrapper supports only ES3.2)");
 
        // try to create any wrappable context
 
@@ -677,7 +677,7 @@ ES3PlusWrapperContext::~ES3PlusWrapperContext (void)
 
 ContextType ES3PlusWrapperContext::getType (void) const
 {
-       return ContextType(ApiType::es(3,1), m_context->getType().getFlags());
+       return ContextType(ApiType::es(3,2), m_context->getType().getFlags());
 }
 
 } // glu
index 7952be7..bf4b095 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 dst->activeShaderProgram                                       = src.activeShaderProgram;
 dst->activeTexture                                                     = src.activeTexture;
index fa16aa6..93a03c2 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 
 int getBasicQueryNumArgsOut (int pname)
index 2580647..0509ffa 100644 (file)
@@ -155,25 +155,10 @@ RenderContext* createDefaultRenderContext (tcu::Platform& platform, const tcu::C
        else
                factory = registry.getDefaultFactory();
 
-       try
-       {
-               if (cmdLine.getSurfaceType() == tcu::SURFACETYPE_FBO)
-                       return new FboRenderContext(*factory, config, cmdLine);
-               else
-                       return factory->createContext(config, cmdLine);
-
-       }
-       catch (const std::exception&)
-       {
-               // If ES31 context is not available, try using wrapper.
-               if (config.type.getAPI() == ApiType::es(3,1))
-               {
-                       tcu::print("Warning: Unable to create native OpenGL ES 3.1 context, will use wrapper context.\n");
-                       return new ES3PlusWrapperContext(*factory, config, cmdLine);
-               }
-               else
-                       throw;
-       }
+       if (cmdLine.getSurfaceType() == tcu::SURFACETYPE_FBO)
+               return new FboRenderContext(*factory, config, cmdLine);
+       else
+               return factory->createContext(config, cmdLine);
 }
 
 static std::vector<std::string> getExtensions (const glw::Functions& gl, ApiType apiType)
@@ -242,6 +227,7 @@ void initCoreFunctions (glw::Functions* dst, const glw::FunctionLoader* loader,
                { ApiType::es(2,0),             glw::initES20           },
                { ApiType::es(3,0),             glw::initES30           },
                { ApiType::es(3,1),             glw::initES31           },
+               { ApiType::es(3,2),             glw::initES32           },
                { ApiType::core(3,0),   glw::initGL30Core       },
                { ApiType::core(3,1),   glw::initGL31Core       },
                { ApiType::core(3,2),   glw::initGL32Core       },
index 3902bd0..79ae970 100644 (file)
@@ -577,7 +577,7 @@ void resetStateES (const RenderContext& renderCtx)
        // Primitive bounding box state.
        if (ctxInfo->isExtensionSupported("GL_EXT_primitive_bounding_box"))
        {
-               gl.primitiveBoundingBoxEXT(-1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f);
+               gl.primitiveBoundingBox(-1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f);
                GLU_EXPECT_NO_ERROR(gl.getError(), "Primitive bounding box state reset failed");
        }
 
index d43046f..2557371 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 
 const char* getErrorName (int value)
index d6ca550..a831bb8 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 const char*                                                    getErrorName                                                    (int value);
 const char*                                                    getTypeName                                                             (int value);
index 7ed1be9..beb0940 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 #define                        glActiveShaderProgram                                                   glwActiveShaderProgram
 #define                        glActiveTexture                                                                 glwActiveTexture
@@ -32,7 +32,7 @@
 #define                        glBindVertexArray                                                               glwBindVertexArray
 #define                        glBindVertexBuffer                                                              glwBindVertexBuffer
 #define                        glBindVertexBuffers                                                             glwBindVertexBuffers
-#define                        glBlendBarrierKHR                                                               glwBlendBarrierKHR
+#define                        glBlendBarrier                                                                  glwBlendBarrier
 #define                        glBlendColor                                                                    glwBlendColor
 #define                        glBlendEquation                                                                 glwBlendEquation
 #define                        glBlendEquationSeparate                                                 glwBlendEquationSeparate
 #define                        glPolygonOffset                                                                 glwPolygonOffset
 #define                        glPopDebugGroup                                                                 glwPopDebugGroup
 #define                        glPopGroupMarkerEXT                                                             glwPopGroupMarkerEXT
-#define                        glPrimitiveBoundingBoxEXT                                               glwPrimitiveBoundingBoxEXT
+#define                        glPrimitiveBoundingBox                                                  glwPrimitiveBoundingBox
 #define                        glPrimitiveRestartIndex                                                 glwPrimitiveRestartIndex
 #define                        glProgramBinary                                                                 glwProgramBinary
 #define                        glProgramParameteri                                                             glwProgramParameteri
@@ -692,7 +692,7 @@ void                        glwBindTransformFeedback                                                (GLenum target, GLuint id);
 void                   glwBindVertexArray                                                              (GLuint array);
 void                   glwBindVertexBuffer                                                             (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
 void                   glwBindVertexBuffers                                                    (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides);
-void                   glwBlendBarrierKHR                                                              ();
+void                   glwBlendBarrier                                                                 ();
 void                   glwBlendColor                                                                   (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
 void                   glwBlendEquation                                                                (GLenum mode);
 void                   glwBlendEquationSeparate                                                (GLenum modeRGB, GLenum modeAlpha);
@@ -1043,7 +1043,7 @@ void                      glwPolygonMode                                                                  (GLenum face, GLenum mode);
 void                   glwPolygonOffset                                                                (GLfloat factor, GLfloat units);
 void                   glwPopDebugGroup                                                                ();
 void                   glwPopGroupMarkerEXT                                                    ();
-void                   glwPrimitiveBoundingBoxEXT                                              (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
+void                   glwPrimitiveBoundingBox                                                 (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
 void                   glwPrimitiveRestartIndex                                                (GLuint index);
 void                   glwProgramBinary                                                                (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
 void                   glwProgramParameteri                                                    (GLuint program, GLenum pname, GLint value);
index deb27b3..8d6fc09 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 #define GL_DEPTH_BUFFER_BIT                                                                                            0x00000100
 #define GL_STENCIL_BUFFER_BIT                                                                                  0x00000400
 #define GL_COLOR_ATTACHMENT13                                                                                  0x8CED
 #define GL_COLOR_ATTACHMENT14                                                                                  0x8CEE
 #define GL_COLOR_ATTACHMENT15                                                                                  0x8CEF
+#define GL_COLOR_ATTACHMENT16                                                                                  0x8CF0
+#define GL_COLOR_ATTACHMENT17                                                                                  0x8CF1
+#define GL_COLOR_ATTACHMENT18                                                                                  0x8CF2
+#define GL_COLOR_ATTACHMENT19                                                                                  0x8CF3
+#define GL_COLOR_ATTACHMENT20                                                                                  0x8CF4
+#define GL_COLOR_ATTACHMENT21                                                                                  0x8CF5
+#define GL_COLOR_ATTACHMENT22                                                                                  0x8CF6
+#define GL_COLOR_ATTACHMENT23                                                                                  0x8CF7
+#define GL_COLOR_ATTACHMENT24                                                                                  0x8CF8
+#define GL_COLOR_ATTACHMENT25                                                                                  0x8CF9
+#define GL_COLOR_ATTACHMENT26                                                                                  0x8CFA
+#define GL_COLOR_ATTACHMENT27                                                                                  0x8CFB
+#define GL_COLOR_ATTACHMENT28                                                                                  0x8CFC
+#define GL_COLOR_ATTACHMENT29                                                                                  0x8CFD
+#define GL_COLOR_ATTACHMENT30                                                                                  0x8CFE
+#define GL_COLOR_ATTACHMENT31                                                                                  0x8CFF
 #define GL_DEPTH_ATTACHMENT                                                                                            0x8D00
 #define GL_STENCIL_ATTACHMENT                                                                                  0x8D20
 #define GL_FRAMEBUFFER                                                                                                 0x8D40
 #define GL_COMPRESSED_RGBA8_ETC2_EAC                                                                   0x9278
 #define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC                                                            0x9279
 #define GL_BLEND_ADVANCED_COHERENT_KHR                                                                 0x9285
+#define GL_MULTIPLY                                                                                                            0x9294
 #define GL_MULTIPLY_KHR                                                                                                        0x9294
+#define GL_SCREEN                                                                                                              0x9295
 #define GL_SCREEN_KHR                                                                                                  0x9295
+#define GL_OVERLAY                                                                                                             0x9296
 #define GL_OVERLAY_KHR                                                                                                 0x9296
+#define GL_DARKEN                                                                                                              0x9297
 #define GL_DARKEN_KHR                                                                                                  0x9297
+#define GL_LIGHTEN                                                                                                             0x9298
 #define GL_LIGHTEN_KHR                                                                                                 0x9298
+#define GL_COLORDODGE                                                                                                  0x9299
 #define GL_COLORDODGE_KHR                                                                                              0x9299
+#define GL_COLORBURN                                                                                                   0x929A
 #define GL_COLORBURN_KHR                                                                                               0x929A
+#define GL_HARDLIGHT                                                                                                   0x929B
 #define GL_HARDLIGHT_KHR                                                                                               0x929B
+#define GL_SOFTLIGHT                                                                                                   0x929C
 #define GL_SOFTLIGHT_KHR                                                                                               0x929C
+#define GL_DIFFERENCE                                                                                                  0x929E
 #define GL_DIFFERENCE_KHR                                                                                              0x929E
+#define GL_EXCLUSION                                                                                                   0x92A0
 #define GL_EXCLUSION_KHR                                                                                               0x92A0
+#define GL_HSL_HUE                                                                                                             0x92AD
 #define GL_HSL_HUE_KHR                                                                                                 0x92AD
+#define GL_HSL_SATURATION                                                                                              0x92AE
 #define GL_HSL_SATURATION_KHR                                                                                  0x92AE
+#define GL_HSL_COLOR                                                                                                   0x92AF
 #define GL_HSL_COLOR_KHR                                                                                               0x92AF
+#define GL_HSL_LUMINOSITY                                                                                              0x92B0
 #define GL_HSL_LUMINOSITY_KHR                                                                                  0x92B0
+#define GL_PRIMITIVE_BOUNDING_BOX                                                                              0x92BE
 #define GL_PRIMITIVE_BOUNDING_BOX_EXT                                                                  0x92BE
 #define GL_ATOMIC_COUNTER_BUFFER                                                                               0x92C0
 #define GL_ATOMIC_COUNTER_BUFFER_BINDING                                                               0x92C1
 #define GL_ZERO_TO_ONE                                                                                                 0x935F
 #define GL_CLEAR_TEXTURE                                                                                               0x9365
 #define GL_NUM_SAMPLE_COUNTS                                                                                   0x9380
+#define GL_MULTISAMPLE_LINE_WIDTH_RANGE                                                                        0x9381
+#define GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY                                                  0x9382
+#define GL_COMPRESSED_RGBA_ASTC_4x4                                                                            0x93B0
 #define GL_COMPRESSED_RGBA_ASTC_4x4_KHR                                                                        0x93B0
+#define GL_COMPRESSED_RGBA_ASTC_5x4                                                                            0x93B1
 #define GL_COMPRESSED_RGBA_ASTC_5x4_KHR                                                                        0x93B1
+#define GL_COMPRESSED_RGBA_ASTC_5x5                                                                            0x93B2
 #define GL_COMPRESSED_RGBA_ASTC_5x5_KHR                                                                        0x93B2
+#define GL_COMPRESSED_RGBA_ASTC_6x5                                                                            0x93B3
 #define GL_COMPRESSED_RGBA_ASTC_6x5_KHR                                                                        0x93B3
+#define GL_COMPRESSED_RGBA_ASTC_6x6                                                                            0x93B4
 #define GL_COMPRESSED_RGBA_ASTC_6x6_KHR                                                                        0x93B4
+#define GL_COMPRESSED_RGBA_ASTC_8x5                                                                            0x93B5
 #define GL_COMPRESSED_RGBA_ASTC_8x5_KHR                                                                        0x93B5
+#define GL_COMPRESSED_RGBA_ASTC_8x6                                                                            0x93B6
 #define GL_COMPRESSED_RGBA_ASTC_8x6_KHR                                                                        0x93B6
+#define GL_COMPRESSED_RGBA_ASTC_8x8                                                                            0x93B7
 #define GL_COMPRESSED_RGBA_ASTC_8x8_KHR                                                                        0x93B7
+#define GL_COMPRESSED_RGBA_ASTC_10x5                                                                   0x93B8
 #define GL_COMPRESSED_RGBA_ASTC_10x5_KHR                                                               0x93B8
+#define GL_COMPRESSED_RGBA_ASTC_10x6                                                                   0x93B9
 #define GL_COMPRESSED_RGBA_ASTC_10x6_KHR                                                               0x93B9
+#define GL_COMPRESSED_RGBA_ASTC_10x8                                                                   0x93BA
 #define GL_COMPRESSED_RGBA_ASTC_10x8_KHR                                                               0x93BA
+#define GL_COMPRESSED_RGBA_ASTC_10x10                                                                  0x93BB
 #define GL_COMPRESSED_RGBA_ASTC_10x10_KHR                                                              0x93BB
+#define GL_COMPRESSED_RGBA_ASTC_12x10                                                                  0x93BC
 #define GL_COMPRESSED_RGBA_ASTC_12x10_KHR                                                              0x93BC
+#define GL_COMPRESSED_RGBA_ASTC_12x12                                                                  0x93BD
 #define GL_COMPRESSED_RGBA_ASTC_12x12_KHR                                                              0x93BD
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4                                                            0x93D0
 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR                                                        0x93D0
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4                                                            0x93D1
 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR                                                        0x93D1
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5                                                            0x93D2
 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR                                                        0x93D2
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5                                                            0x93D3
 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR                                                        0x93D3
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6                                                            0x93D4
 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR                                                        0x93D4
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5                                                            0x93D5
 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR                                                        0x93D5
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6                                                            0x93D6
 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR                                                        0x93D6
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8                                                            0x93D7
 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR                                                        0x93D7
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5                                                   0x93D8
 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR                                               0x93D8
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6                                                   0x93D9
 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR                                               0x93D9
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8                                                   0x93DA
 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR                                               0x93DA
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10                                                  0x93DB
 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR                                              0x93DB
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10                                                  0x93DC
 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR                                              0x93DC
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12                                                  0x93DD
 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR                                              0x93DD
index bf36b65..0b1f747 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 typedef GLW_APICALL void                       (GLW_APIENTRY* glActiveShaderProgramFunc)                                                       (GLuint pipeline, GLuint program);
 typedef GLW_APICALL void                       (GLW_APIENTRY* glActiveTextureFunc)                                                                     (GLenum texture);
@@ -32,7 +32,7 @@ typedef GLW_APICALL void                      (GLW_APIENTRY* glBindTransformFeedbackFunc)                                                     (GL
 typedef GLW_APICALL void                       (GLW_APIENTRY* glBindVertexArrayFunc)                                                           (GLuint array);
 typedef GLW_APICALL void                       (GLW_APIENTRY* glBindVertexBufferFunc)                                                          (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
 typedef GLW_APICALL void                       (GLW_APIENTRY* glBindVertexBuffersFunc)                                                         (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides);
-typedef GLW_APICALL void                       (GLW_APIENTRY* glBlendBarrierKHRFunc)                                                           (void);
+typedef GLW_APICALL void                       (GLW_APIENTRY* glBlendBarrierFunc)                                                                      (void);
 typedef GLW_APICALL void                       (GLW_APIENTRY* glBlendColorFunc)                                                                        (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
 typedef GLW_APICALL void                       (GLW_APIENTRY* glBlendEquationFunc)                                                                     (GLenum mode);
 typedef GLW_APICALL void                       (GLW_APIENTRY* glBlendEquationSeparateFunc)                                                     (GLenum modeRGB, GLenum modeAlpha);
@@ -383,7 +383,7 @@ typedef GLW_APICALL void                    (GLW_APIENTRY* glPolygonModeFunc)                                                                       (GLenum fac
 typedef GLW_APICALL void                       (GLW_APIENTRY* glPolygonOffsetFunc)                                                                     (GLfloat factor, GLfloat units);
 typedef GLW_APICALL void                       (GLW_APIENTRY* glPopDebugGroupFunc)                                                                     (void);
 typedef GLW_APICALL void                       (GLW_APIENTRY* glPopGroupMarkerEXTFunc)                                                         (void);
-typedef GLW_APICALL void                       (GLW_APIENTRY* glPrimitiveBoundingBoxEXTFunc)                                           (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
+typedef GLW_APICALL void                       (GLW_APIENTRY* glPrimitiveBoundingBoxFunc)                                                      (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
 typedef GLW_APICALL void                       (GLW_APIENTRY* glPrimitiveRestartIndexFunc)                                                     (GLuint index);
 typedef GLW_APICALL void                       (GLW_APIENTRY* glProgramBinaryFunc)                                                                     (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
 typedef GLW_APICALL void                       (GLW_APIENTRY* glProgramParameteriFunc)                                                         (GLuint program, GLenum pname, GLint value);
index 2f34d9c..80bbcb5 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 glActiveShaderProgramFunc                                                      activeShaderProgram;
 glActiveTextureFunc                                                                    activeTexture;
@@ -32,7 +32,7 @@ glBindTransformFeedbackFunc                                                   bindTransformFeedback;
 glBindVertexArrayFunc                                                          bindVertexArray;
 glBindVertexBufferFunc                                                         bindVertexBuffer;
 glBindVertexBuffersFunc                                                                bindVertexBuffers;
-glBlendBarrierKHRFunc                                                          blendBarrierKHR;
+glBlendBarrierFunc                                                                     blendBarrier;
 glBlendColorFunc                                                                       blendColor;
 glBlendEquationFunc                                                                    blendEquation;
 glBlendEquationSeparateFunc                                                    blendEquationSeparate;
@@ -383,7 +383,7 @@ glPolygonModeFunc                                                                   polygonMode;
 glPolygonOffsetFunc                                                                    polygonOffset;
 glPopDebugGroupFunc                                                                    popDebugGroup;
 glPopGroupMarkerEXTFunc                                                                popGroupMarkerEXT;
-glPrimitiveBoundingBoxEXTFunc                                          primitiveBoundingBoxEXT;
+glPrimitiveBoundingBoxFunc                                                     primitiveBoundingBox;
 glPrimitiveRestartIndexFunc                                                    primitiveRestartIndex;
 glProgramBinaryFunc                                                                    programBinary;
 glProgramParameteriFunc                                                                programParameteri;
index 8ddbc99..e521405 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 
 void glwActiveShaderProgram (GLuint pipeline, GLuint program)
@@ -236,12 +236,12 @@ void glwBindVertexBuffers (GLuint first, GLsizei count, const GLuint *buffers, c
        gl->bindVertexBuffers(first, count, buffers, offsets, strides);
 }
 
-void glwBlendBarrierKHR (void)
+void glwBlendBarrier (void)
 {
        const glw::Functions* gl = glw::getCurrentThreadFunctions();
        if (!gl)
                return;
-       gl->blendBarrierKHR();
+       gl->blendBarrier();
 }
 
 void glwBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
@@ -3044,12 +3044,12 @@ void glwPopGroupMarkerEXT (void)
        gl->popGroupMarkerEXT();
 }
 
-void glwPrimitiveBoundingBoxEXT (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW)
+void glwPrimitiveBoundingBox (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW)
 {
        const glw::Functions* gl = glw::getCurrentThreadFunctions();
        if (!gl)
                return;
-       gl->primitiveBoundingBoxEXT(minX, minY, minZ, minW, maxX, maxY, maxZ, maxW);
+       gl->primitiveBoundingBox(minX, minY, minZ, minW, maxX, maxY, maxZ, maxW);
 }
 
 void glwPrimitiveRestartIndex (GLuint index)
index f20f0c5..5dd6080 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 gl->activeTexture                                              = (glActiveTextureFunc)                                                 loader->get("glActiveTexture");
 gl->attachShader                                               = (glAttachShaderFunc)                                                  loader->get("glAttachShader");
index f65603a..2af9a05 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 gl->activeTexture                                              = &glActiveTexture;
 gl->attachShader                                               = &glAttachShader;
index 328df68..8d822f3 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 gl->activeTexture                                              = (glActiveTextureFunc)                                                 loader->get("glActiveTexture");
 gl->attachShader                                               = (glAttachShaderFunc)                                                  loader->get("glAttachShader");
index 09a19ae..a6c125e 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 gl->activeTexture                                              = &glActiveTexture;
 gl->attachShader                                               = &glAttachShader;
index 0a09285..9d8e175 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 gl->activeShaderProgram                                        = (glActiveShaderProgramFunc)                                   loader->get("glActiveShaderProgram");
 gl->activeTexture                                              = (glActiveTextureFunc)                                                 loader->get("glActiveTexture");
index ada95da..a1f1f5b 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 gl->activeShaderProgram                                        = &glActiveShaderProgram;
 gl->activeTexture                                              = &glActiveTexture;
diff --git a/framework/opengl/wrapper/glwInitES32.inl b/framework/opengl/wrapper/glwInitES32.inl
new file mode 100644 (file)
index 0000000..376462d
--- /dev/null
@@ -0,0 +1,363 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ *
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
+ */
+gl->activeShaderProgram                                        = (glActiveShaderProgramFunc)                                   loader->get("glActiveShaderProgram");
+gl->activeTexture                                              = (glActiveTextureFunc)                                                 loader->get("glActiveTexture");
+gl->attachShader                                               = (glAttachShaderFunc)                                                  loader->get("glAttachShader");
+gl->beginQuery                                                 = (glBeginQueryFunc)                                                    loader->get("glBeginQuery");
+gl->beginTransformFeedback                             = (glBeginTransformFeedbackFunc)                                loader->get("glBeginTransformFeedback");
+gl->bindAttribLocation                                 = (glBindAttribLocationFunc)                                    loader->get("glBindAttribLocation");
+gl->bindBuffer                                                 = (glBindBufferFunc)                                                    loader->get("glBindBuffer");
+gl->bindBufferBase                                             = (glBindBufferBaseFunc)                                                loader->get("glBindBufferBase");
+gl->bindBufferRange                                            = (glBindBufferRangeFunc)                                               loader->get("glBindBufferRange");
+gl->bindFramebuffer                                            = (glBindFramebufferFunc)                                               loader->get("glBindFramebuffer");
+gl->bindImageTexture                                   = (glBindImageTextureFunc)                                              loader->get("glBindImageTexture");
+gl->bindProgramPipeline                                        = (glBindProgramPipelineFunc)                                   loader->get("glBindProgramPipeline");
+gl->bindRenderbuffer                                   = (glBindRenderbufferFunc)                                              loader->get("glBindRenderbuffer");
+gl->bindSampler                                                        = (glBindSamplerFunc)                                                   loader->get("glBindSampler");
+gl->bindTexture                                                        = (glBindTextureFunc)                                                   loader->get("glBindTexture");
+gl->bindTransformFeedback                              = (glBindTransformFeedbackFunc)                                 loader->get("glBindTransformFeedback");
+gl->bindVertexArray                                            = (glBindVertexArrayFunc)                                               loader->get("glBindVertexArray");
+gl->bindVertexBuffer                                   = (glBindVertexBufferFunc)                                              loader->get("glBindVertexBuffer");
+gl->blendBarrier                                               = (glBlendBarrierFunc)                                                  loader->get("glBlendBarrier");
+gl->blendColor                                                 = (glBlendColorFunc)                                                    loader->get("glBlendColor");
+gl->blendEquation                                              = (glBlendEquationFunc)                                                 loader->get("glBlendEquation");
+gl->blendEquationSeparate                              = (glBlendEquationSeparateFunc)                                 loader->get("glBlendEquationSeparate");
+gl->blendEquationSeparatei                             = (glBlendEquationSeparateiFunc)                                loader->get("glBlendEquationSeparatei");
+gl->blendEquationi                                             = (glBlendEquationiFunc)                                                loader->get("glBlendEquationi");
+gl->blendFunc                                                  = (glBlendFuncFunc)                                                             loader->get("glBlendFunc");
+gl->blendFuncSeparate                                  = (glBlendFuncSeparateFunc)                                             loader->get("glBlendFuncSeparate");
+gl->blendFuncSeparatei                                 = (glBlendFuncSeparateiFunc)                                    loader->get("glBlendFuncSeparatei");
+gl->blendFunci                                                 = (glBlendFunciFunc)                                                    loader->get("glBlendFunci");
+gl->blitFramebuffer                                            = (glBlitFramebufferFunc)                                               loader->get("glBlitFramebuffer");
+gl->bufferData                                                 = (glBufferDataFunc)                                                    loader->get("glBufferData");
+gl->bufferSubData                                              = (glBufferSubDataFunc)                                                 loader->get("glBufferSubData");
+gl->checkFramebufferStatus                             = (glCheckFramebufferStatusFunc)                                loader->get("glCheckFramebufferStatus");
+gl->clear                                                              = (glClearFunc)                                                                 loader->get("glClear");
+gl->clearBufferfi                                              = (glClearBufferfiFunc)                                                 loader->get("glClearBufferfi");
+gl->clearBufferfv                                              = (glClearBufferfvFunc)                                                 loader->get("glClearBufferfv");
+gl->clearBufferiv                                              = (glClearBufferivFunc)                                                 loader->get("glClearBufferiv");
+gl->clearBufferuiv                                             = (glClearBufferuivFunc)                                                loader->get("glClearBufferuiv");
+gl->clearColor                                                 = (glClearColorFunc)                                                    loader->get("glClearColor");
+gl->clearDepthf                                                        = (glClearDepthfFunc)                                                   loader->get("glClearDepthf");
+gl->clearStencil                                               = (glClearStencilFunc)                                                  loader->get("glClearStencil");
+gl->clientWaitSync                                             = (glClientWaitSyncFunc)                                                loader->get("glClientWaitSync");
+gl->colorMask                                                  = (glColorMaskFunc)                                                             loader->get("glColorMask");
+gl->colorMaski                                                 = (glColorMaskiFunc)                                                    loader->get("glColorMaski");
+gl->compileShader                                              = (glCompileShaderFunc)                                                 loader->get("glCompileShader");
+gl->compressedTexImage2D                               = (glCompressedTexImage2DFunc)                                  loader->get("glCompressedTexImage2D");
+gl->compressedTexImage3D                               = (glCompressedTexImage3DFunc)                                  loader->get("glCompressedTexImage3D");
+gl->compressedTexSubImage2D                            = (glCompressedTexSubImage2DFunc)                               loader->get("glCompressedTexSubImage2D");
+gl->compressedTexSubImage3D                            = (glCompressedTexSubImage3DFunc)                               loader->get("glCompressedTexSubImage3D");
+gl->copyBufferSubData                                  = (glCopyBufferSubDataFunc)                                             loader->get("glCopyBufferSubData");
+gl->copyImageSubData                                   = (glCopyImageSubDataFunc)                                              loader->get("glCopyImageSubData");
+gl->copyTexImage2D                                             = (glCopyTexImage2DFunc)                                                loader->get("glCopyTexImage2D");
+gl->copyTexSubImage2D                                  = (glCopyTexSubImage2DFunc)                                             loader->get("glCopyTexSubImage2D");
+gl->copyTexSubImage3D                                  = (glCopyTexSubImage3DFunc)                                             loader->get("glCopyTexSubImage3D");
+gl->createProgram                                              = (glCreateProgramFunc)                                                 loader->get("glCreateProgram");
+gl->createShader                                               = (glCreateShaderFunc)                                                  loader->get("glCreateShader");
+gl->createShaderProgramv                               = (glCreateShaderProgramvFunc)                                  loader->get("glCreateShaderProgramv");
+gl->cullFace                                                   = (glCullFaceFunc)                                                              loader->get("glCullFace");
+gl->debugMessageCallback                               = (glDebugMessageCallbackFunc)                                  loader->get("glDebugMessageCallback");
+gl->debugMessageControl                                        = (glDebugMessageControlFunc)                                   loader->get("glDebugMessageControl");
+gl->debugMessageInsert                                 = (glDebugMessageInsertFunc)                                    loader->get("glDebugMessageInsert");
+gl->deleteBuffers                                              = (glDeleteBuffersFunc)                                                 loader->get("glDeleteBuffers");
+gl->deleteFramebuffers                                 = (glDeleteFramebuffersFunc)                                    loader->get("glDeleteFramebuffers");
+gl->deleteProgram                                              = (glDeleteProgramFunc)                                                 loader->get("glDeleteProgram");
+gl->deleteProgramPipelines                             = (glDeleteProgramPipelinesFunc)                                loader->get("glDeleteProgramPipelines");
+gl->deleteQueries                                              = (glDeleteQueriesFunc)                                                 loader->get("glDeleteQueries");
+gl->deleteRenderbuffers                                        = (glDeleteRenderbuffersFunc)                                   loader->get("glDeleteRenderbuffers");
+gl->deleteSamplers                                             = (glDeleteSamplersFunc)                                                loader->get("glDeleteSamplers");
+gl->deleteShader                                               = (glDeleteShaderFunc)                                                  loader->get("glDeleteShader");
+gl->deleteSync                                                 = (glDeleteSyncFunc)                                                    loader->get("glDeleteSync");
+gl->deleteTextures                                             = (glDeleteTexturesFunc)                                                loader->get("glDeleteTextures");
+gl->deleteTransformFeedbacks                   = (glDeleteTransformFeedbacksFunc)                              loader->get("glDeleteTransformFeedbacks");
+gl->deleteVertexArrays                                 = (glDeleteVertexArraysFunc)                                    loader->get("glDeleteVertexArrays");
+gl->depthFunc                                                  = (glDepthFuncFunc)                                                             loader->get("glDepthFunc");
+gl->depthMask                                                  = (glDepthMaskFunc)                                                             loader->get("glDepthMask");
+gl->depthRangef                                                        = (glDepthRangefFunc)                                                   loader->get("glDepthRangef");
+gl->detachShader                                               = (glDetachShaderFunc)                                                  loader->get("glDetachShader");
+gl->disable                                                            = (glDisableFunc)                                                               loader->get("glDisable");
+gl->disableVertexAttribArray                   = (glDisableVertexAttribArrayFunc)                              loader->get("glDisableVertexAttribArray");
+gl->disablei                                                   = (glDisableiFunc)                                                              loader->get("glDisablei");
+gl->dispatchCompute                                            = (glDispatchComputeFunc)                                               loader->get("glDispatchCompute");
+gl->dispatchComputeIndirect                            = (glDispatchComputeIndirectFunc)                               loader->get("glDispatchComputeIndirect");
+gl->drawArrays                                                 = (glDrawArraysFunc)                                                    loader->get("glDrawArrays");
+gl->drawArraysIndirect                                 = (glDrawArraysIndirectFunc)                                    loader->get("glDrawArraysIndirect");
+gl->drawArraysInstanced                                        = (glDrawArraysInstancedFunc)                                   loader->get("glDrawArraysInstanced");
+gl->drawBuffers                                                        = (glDrawBuffersFunc)                                                   loader->get("glDrawBuffers");
+gl->drawElements                                               = (glDrawElementsFunc)                                                  loader->get("glDrawElements");
+gl->drawElementsBaseVertex                             = (glDrawElementsBaseVertexFunc)                                loader->get("glDrawElementsBaseVertex");
+gl->drawElementsIndirect                               = (glDrawElementsIndirectFunc)                                  loader->get("glDrawElementsIndirect");
+gl->drawElementsInstanced                              = (glDrawElementsInstancedFunc)                                 loader->get("glDrawElementsInstanced");
+gl->drawElementsInstancedBaseVertex            = (glDrawElementsInstancedBaseVertexFunc)               loader->get("glDrawElementsInstancedBaseVertex");
+gl->drawRangeElements                                  = (glDrawRangeElementsFunc)                                             loader->get("glDrawRangeElements");
+gl->drawRangeElementsBaseVertex                        = (glDrawRangeElementsBaseVertexFunc)                   loader->get("glDrawRangeElementsBaseVertex");
+gl->enable                                                             = (glEnableFunc)                                                                loader->get("glEnable");
+gl->enableVertexAttribArray                            = (glEnableVertexAttribArrayFunc)                               loader->get("glEnableVertexAttribArray");
+gl->enablei                                                            = (glEnableiFunc)                                                               loader->get("glEnablei");
+gl->endQuery                                                   = (glEndQueryFunc)                                                              loader->get("glEndQuery");
+gl->endTransformFeedback                               = (glEndTransformFeedbackFunc)                                  loader->get("glEndTransformFeedback");
+gl->fenceSync                                                  = (glFenceSyncFunc)                                                             loader->get("glFenceSync");
+gl->finish                                                             = (glFinishFunc)                                                                loader->get("glFinish");
+gl->flush                                                              = (glFlushFunc)                                                                 loader->get("glFlush");
+gl->flushMappedBufferRange                             = (glFlushMappedBufferRangeFunc)                                loader->get("glFlushMappedBufferRange");
+gl->framebufferParameteri                              = (glFramebufferParameteriFunc)                                 loader->get("glFramebufferParameteri");
+gl->framebufferRenderbuffer                            = (glFramebufferRenderbufferFunc)                               loader->get("glFramebufferRenderbuffer");
+gl->framebufferTexture                                 = (glFramebufferTextureFunc)                                    loader->get("glFramebufferTexture");
+gl->framebufferTexture2D                               = (glFramebufferTexture2DFunc)                                  loader->get("glFramebufferTexture2D");
+gl->framebufferTextureLayer                            = (glFramebufferTextureLayerFunc)                               loader->get("glFramebufferTextureLayer");
+gl->frontFace                                                  = (glFrontFaceFunc)                                                             loader->get("glFrontFace");
+gl->genBuffers                                                 = (glGenBuffersFunc)                                                    loader->get("glGenBuffers");
+gl->genFramebuffers                                            = (glGenFramebuffersFunc)                                               loader->get("glGenFramebuffers");
+gl->genProgramPipelines                                        = (glGenProgramPipelinesFunc)                                   loader->get("glGenProgramPipelines");
+gl->genQueries                                                 = (glGenQueriesFunc)                                                    loader->get("glGenQueries");
+gl->genRenderbuffers                                   = (glGenRenderbuffersFunc)                                              loader->get("glGenRenderbuffers");
+gl->genSamplers                                                        = (glGenSamplersFunc)                                                   loader->get("glGenSamplers");
+gl->genTextures                                                        = (glGenTexturesFunc)                                                   loader->get("glGenTextures");
+gl->genTransformFeedbacks                              = (glGenTransformFeedbacksFunc)                                 loader->get("glGenTransformFeedbacks");
+gl->genVertexArrays                                            = (glGenVertexArraysFunc)                                               loader->get("glGenVertexArrays");
+gl->generateMipmap                                             = (glGenerateMipmapFunc)                                                loader->get("glGenerateMipmap");
+gl->getActiveAttrib                                            = (glGetActiveAttribFunc)                                               loader->get("glGetActiveAttrib");
+gl->getActiveUniform                                   = (glGetActiveUniformFunc)                                              loader->get("glGetActiveUniform");
+gl->getActiveUniformBlockName                  = (glGetActiveUniformBlockNameFunc)                             loader->get("glGetActiveUniformBlockName");
+gl->getActiveUniformBlockiv                            = (glGetActiveUniformBlockivFunc)                               loader->get("glGetActiveUniformBlockiv");
+gl->getActiveUniformsiv                                        = (glGetActiveUniformsivFunc)                                   loader->get("glGetActiveUniformsiv");
+gl->getAttachedShaders                                 = (glGetAttachedShadersFunc)                                    loader->get("glGetAttachedShaders");
+gl->getAttribLocation                                  = (glGetAttribLocationFunc)                                             loader->get("glGetAttribLocation");
+gl->getBooleani_v                                              = (glGetBooleani_vFunc)                                                 loader->get("glGetBooleani_v");
+gl->getBooleanv                                                        = (glGetBooleanvFunc)                                                   loader->get("glGetBooleanv");
+gl->getBufferParameteri64v                             = (glGetBufferParameteri64vFunc)                                loader->get("glGetBufferParameteri64v");
+gl->getBufferParameteriv                               = (glGetBufferParameterivFunc)                                  loader->get("glGetBufferParameteriv");
+gl->getBufferPointerv                                  = (glGetBufferPointervFunc)                                             loader->get("glGetBufferPointerv");
+gl->getDebugMessageLog                                 = (glGetDebugMessageLogFunc)                                    loader->get("glGetDebugMessageLog");
+gl->getError                                                   = (glGetErrorFunc)                                                              loader->get("glGetError");
+gl->getFloatv                                                  = (glGetFloatvFunc)                                                             loader->get("glGetFloatv");
+gl->getFragDataLocation                                        = (glGetFragDataLocationFunc)                                   loader->get("glGetFragDataLocation");
+gl->getFramebufferAttachmentParameteriv        = (glGetFramebufferAttachmentParameterivFunc)   loader->get("glGetFramebufferAttachmentParameteriv");
+gl->getFramebufferParameteriv                  = (glGetFramebufferParameterivFunc)                             loader->get("glGetFramebufferParameteriv");
+gl->getGraphicsResetStatus                             = (glGetGraphicsResetStatusFunc)                                loader->get("glGetGraphicsResetStatus");
+gl->getInteger64i_v                                            = (glGetInteger64i_vFunc)                                               loader->get("glGetInteger64i_v");
+gl->getInteger64v                                              = (glGetInteger64vFunc)                                                 loader->get("glGetInteger64v");
+gl->getIntegeri_v                                              = (glGetIntegeri_vFunc)                                                 loader->get("glGetIntegeri_v");
+gl->getIntegerv                                                        = (glGetIntegervFunc)                                                   loader->get("glGetIntegerv");
+gl->getInternalformativ                                        = (glGetInternalformativFunc)                                   loader->get("glGetInternalformativ");
+gl->getMultisamplefv                                   = (glGetMultisamplefvFunc)                                              loader->get("glGetMultisamplefv");
+gl->getObjectLabel                                             = (glGetObjectLabelFunc)                                                loader->get("glGetObjectLabel");
+gl->getObjectPtrLabel                                  = (glGetObjectPtrLabelFunc)                                             loader->get("glGetObjectPtrLabel");
+gl->getPointerv                                                        = (glGetPointervFunc)                                                   loader->get("glGetPointerv");
+gl->getProgramBinary                                   = (glGetProgramBinaryFunc)                                              loader->get("glGetProgramBinary");
+gl->getProgramInfoLog                                  = (glGetProgramInfoLogFunc)                                             loader->get("glGetProgramInfoLog");
+gl->getProgramInterfaceiv                              = (glGetProgramInterfaceivFunc)                                 loader->get("glGetProgramInterfaceiv");
+gl->getProgramPipelineInfoLog                  = (glGetProgramPipelineInfoLogFunc)                             loader->get("glGetProgramPipelineInfoLog");
+gl->getProgramPipelineiv                               = (glGetProgramPipelineivFunc)                                  loader->get("glGetProgramPipelineiv");
+gl->getProgramResourceIndex                            = (glGetProgramResourceIndexFunc)                               loader->get("glGetProgramResourceIndex");
+gl->getProgramResourceLocation                 = (glGetProgramResourceLocationFunc)                    loader->get("glGetProgramResourceLocation");
+gl->getProgramResourceName                             = (glGetProgramResourceNameFunc)                                loader->get("glGetProgramResourceName");
+gl->getProgramResourceiv                               = (glGetProgramResourceivFunc)                                  loader->get("glGetProgramResourceiv");
+gl->getProgramiv                                               = (glGetProgramivFunc)                                                  loader->get("glGetProgramiv");
+gl->getQueryObjectuiv                                  = (glGetQueryObjectuivFunc)                                             loader->get("glGetQueryObjectuiv");
+gl->getQueryiv                                                 = (glGetQueryivFunc)                                                    loader->get("glGetQueryiv");
+gl->getRenderbufferParameteriv                 = (glGetRenderbufferParameterivFunc)                    loader->get("glGetRenderbufferParameteriv");
+gl->getSamplerParameterIiv                             = (glGetSamplerParameterIivFunc)                                loader->get("glGetSamplerParameterIiv");
+gl->getSamplerParameterIuiv                            = (glGetSamplerParameterIuivFunc)                               loader->get("glGetSamplerParameterIuiv");
+gl->getSamplerParameterfv                              = (glGetSamplerParameterfvFunc)                                 loader->get("glGetSamplerParameterfv");
+gl->getSamplerParameteriv                              = (glGetSamplerParameterivFunc)                                 loader->get("glGetSamplerParameteriv");
+gl->getShaderInfoLog                                   = (glGetShaderInfoLogFunc)                                              loader->get("glGetShaderInfoLog");
+gl->getShaderPrecisionFormat                   = (glGetShaderPrecisionFormatFunc)                              loader->get("glGetShaderPrecisionFormat");
+gl->getShaderSource                                            = (glGetShaderSourceFunc)                                               loader->get("glGetShaderSource");
+gl->getShaderiv                                                        = (glGetShaderivFunc)                                                   loader->get("glGetShaderiv");
+gl->getString                                                  = (glGetStringFunc)                                                             loader->get("glGetString");
+gl->getStringi                                                 = (glGetStringiFunc)                                                    loader->get("glGetStringi");
+gl->getSynciv                                                  = (glGetSyncivFunc)                                                             loader->get("glGetSynciv");
+gl->getTexLevelParameterfv                             = (glGetTexLevelParameterfvFunc)                                loader->get("glGetTexLevelParameterfv");
+gl->getTexLevelParameteriv                             = (glGetTexLevelParameterivFunc)                                loader->get("glGetTexLevelParameteriv");
+gl->getTexParameterIiv                                 = (glGetTexParameterIivFunc)                                    loader->get("glGetTexParameterIiv");
+gl->getTexParameterIuiv                                        = (glGetTexParameterIuivFunc)                                   loader->get("glGetTexParameterIuiv");
+gl->getTexParameterfv                                  = (glGetTexParameterfvFunc)                                             loader->get("glGetTexParameterfv");
+gl->getTexParameteriv                                  = (glGetTexParameterivFunc)                                             loader->get("glGetTexParameteriv");
+gl->getTransformFeedbackVarying                        = (glGetTransformFeedbackVaryingFunc)                   loader->get("glGetTransformFeedbackVarying");
+gl->getUniformBlockIndex                               = (glGetUniformBlockIndexFunc)                                  loader->get("glGetUniformBlockIndex");
+gl->getUniformIndices                                  = (glGetUniformIndicesFunc)                                             loader->get("glGetUniformIndices");
+gl->getUniformLocation                                 = (glGetUniformLocationFunc)                                    loader->get("glGetUniformLocation");
+gl->getUniformfv                                               = (glGetUniformfvFunc)                                                  loader->get("glGetUniformfv");
+gl->getUniformiv                                               = (glGetUniformivFunc)                                                  loader->get("glGetUniformiv");
+gl->getUniformuiv                                              = (glGetUniformuivFunc)                                                 loader->get("glGetUniformuiv");
+gl->getVertexAttribIiv                                 = (glGetVertexAttribIivFunc)                                    loader->get("glGetVertexAttribIiv");
+gl->getVertexAttribIuiv                                        = (glGetVertexAttribIuivFunc)                                   loader->get("glGetVertexAttribIuiv");
+gl->getVertexAttribPointerv                            = (glGetVertexAttribPointervFunc)                               loader->get("glGetVertexAttribPointerv");
+gl->getVertexAttribfv                                  = (glGetVertexAttribfvFunc)                                             loader->get("glGetVertexAttribfv");
+gl->getVertexAttribiv                                  = (glGetVertexAttribivFunc)                                             loader->get("glGetVertexAttribiv");
+gl->getnUniformfv                                              = (glGetnUniformfvFunc)                                                 loader->get("glGetnUniformfv");
+gl->getnUniformiv                                              = (glGetnUniformivFunc)                                                 loader->get("glGetnUniformiv");
+gl->getnUniformuiv                                             = (glGetnUniformuivFunc)                                                loader->get("glGetnUniformuiv");
+gl->hint                                                               = (glHintFunc)                                                                  loader->get("glHint");
+gl->invalidateFramebuffer                              = (glInvalidateFramebufferFunc)                                 loader->get("glInvalidateFramebuffer");
+gl->invalidateSubFramebuffer                   = (glInvalidateSubFramebufferFunc)                              loader->get("glInvalidateSubFramebuffer");
+gl->isBuffer                                                   = (glIsBufferFunc)                                                              loader->get("glIsBuffer");
+gl->isEnabled                                                  = (glIsEnabledFunc)                                                             loader->get("glIsEnabled");
+gl->isEnabledi                                                 = (glIsEnablediFunc)                                                    loader->get("glIsEnabledi");
+gl->isFramebuffer                                              = (glIsFramebufferFunc)                                                 loader->get("glIsFramebuffer");
+gl->isProgram                                                  = (glIsProgramFunc)                                                             loader->get("glIsProgram");
+gl->isProgramPipeline                                  = (glIsProgramPipelineFunc)                                             loader->get("glIsProgramPipeline");
+gl->isQuery                                                            = (glIsQueryFunc)                                                               loader->get("glIsQuery");
+gl->isRenderbuffer                                             = (glIsRenderbufferFunc)                                                loader->get("glIsRenderbuffer");
+gl->isSampler                                                  = (glIsSamplerFunc)                                                             loader->get("glIsSampler");
+gl->isShader                                                   = (glIsShaderFunc)                                                              loader->get("glIsShader");
+gl->isSync                                                             = (glIsSyncFunc)                                                                loader->get("glIsSync");
+gl->isTexture                                                  = (glIsTextureFunc)                                                             loader->get("glIsTexture");
+gl->isTransformFeedback                                        = (glIsTransformFeedbackFunc)                                   loader->get("glIsTransformFeedback");
+gl->isVertexArray                                              = (glIsVertexArrayFunc)                                                 loader->get("glIsVertexArray");
+gl->lineWidth                                                  = (glLineWidthFunc)                                                             loader->get("glLineWidth");
+gl->linkProgram                                                        = (glLinkProgramFunc)                                                   loader->get("glLinkProgram");
+gl->mapBufferRange                                             = (glMapBufferRangeFunc)                                                loader->get("glMapBufferRange");
+gl->memoryBarrier                                              = (glMemoryBarrierFunc)                                                 loader->get("glMemoryBarrier");
+gl->memoryBarrierByRegion                              = (glMemoryBarrierByRegionFunc)                                 loader->get("glMemoryBarrierByRegion");
+gl->minSampleShading                                   = (glMinSampleShadingFunc)                                              loader->get("glMinSampleShading");
+gl->objectLabel                                                        = (glObjectLabelFunc)                                                   loader->get("glObjectLabel");
+gl->objectPtrLabel                                             = (glObjectPtrLabelFunc)                                                loader->get("glObjectPtrLabel");
+gl->patchParameteri                                            = (glPatchParameteriFunc)                                               loader->get("glPatchParameteri");
+gl->pauseTransformFeedback                             = (glPauseTransformFeedbackFunc)                                loader->get("glPauseTransformFeedback");
+gl->pixelStorei                                                        = (glPixelStoreiFunc)                                                   loader->get("glPixelStorei");
+gl->polygonOffset                                              = (glPolygonOffsetFunc)                                                 loader->get("glPolygonOffset");
+gl->popDebugGroup                                              = (glPopDebugGroupFunc)                                                 loader->get("glPopDebugGroup");
+gl->primitiveBoundingBox                               = (glPrimitiveBoundingBoxFunc)                                  loader->get("glPrimitiveBoundingBox");
+gl->programBinary                                              = (glProgramBinaryFunc)                                                 loader->get("glProgramBinary");
+gl->programParameteri                                  = (glProgramParameteriFunc)                                             loader->get("glProgramParameteri");
+gl->programUniform1f                                   = (glProgramUniform1fFunc)                                              loader->get("glProgramUniform1f");
+gl->programUniform1fv                                  = (glProgramUniform1fvFunc)                                             loader->get("glProgramUniform1fv");
+gl->programUniform1i                                   = (glProgramUniform1iFunc)                                              loader->get("glProgramUniform1i");
+gl->programUniform1iv                                  = (glProgramUniform1ivFunc)                                             loader->get("glProgramUniform1iv");
+gl->programUniform1ui                                  = (glProgramUniform1uiFunc)                                             loader->get("glProgramUniform1ui");
+gl->programUniform1uiv                                 = (glProgramUniform1uivFunc)                                    loader->get("glProgramUniform1uiv");
+gl->programUniform2f                                   = (glProgramUniform2fFunc)                                              loader->get("glProgramUniform2f");
+gl->programUniform2fv                                  = (glProgramUniform2fvFunc)                                             loader->get("glProgramUniform2fv");
+gl->programUniform2i                                   = (glProgramUniform2iFunc)                                              loader->get("glProgramUniform2i");
+gl->programUniform2iv                                  = (glProgramUniform2ivFunc)                                             loader->get("glProgramUniform2iv");
+gl->programUniform2ui                                  = (glProgramUniform2uiFunc)                                             loader->get("glProgramUniform2ui");
+gl->programUniform2uiv                                 = (glProgramUniform2uivFunc)                                    loader->get("glProgramUniform2uiv");
+gl->programUniform3f                                   = (glProgramUniform3fFunc)                                              loader->get("glProgramUniform3f");
+gl->programUniform3fv                                  = (glProgramUniform3fvFunc)                                             loader->get("glProgramUniform3fv");
+gl->programUniform3i                                   = (glProgramUniform3iFunc)                                              loader->get("glProgramUniform3i");
+gl->programUniform3iv                                  = (glProgramUniform3ivFunc)                                             loader->get("glProgramUniform3iv");
+gl->programUniform3ui                                  = (glProgramUniform3uiFunc)                                             loader->get("glProgramUniform3ui");
+gl->programUniform3uiv                                 = (glProgramUniform3uivFunc)                                    loader->get("glProgramUniform3uiv");
+gl->programUniform4f                                   = (glProgramUniform4fFunc)                                              loader->get("glProgramUniform4f");
+gl->programUniform4fv                                  = (glProgramUniform4fvFunc)                                             loader->get("glProgramUniform4fv");
+gl->programUniform4i                                   = (glProgramUniform4iFunc)                                              loader->get("glProgramUniform4i");
+gl->programUniform4iv                                  = (glProgramUniform4ivFunc)                                             loader->get("glProgramUniform4iv");
+gl->programUniform4ui                                  = (glProgramUniform4uiFunc)                                             loader->get("glProgramUniform4ui");
+gl->programUniform4uiv                                 = (glProgramUniform4uivFunc)                                    loader->get("glProgramUniform4uiv");
+gl->programUniformMatrix2fv                            = (glProgramUniformMatrix2fvFunc)                               loader->get("glProgramUniformMatrix2fv");
+gl->programUniformMatrix2x3fv                  = (glProgramUniformMatrix2x3fvFunc)                             loader->get("glProgramUniformMatrix2x3fv");
+gl->programUniformMatrix2x4fv                  = (glProgramUniformMatrix2x4fvFunc)                             loader->get("glProgramUniformMatrix2x4fv");
+gl->programUniformMatrix3fv                            = (glProgramUniformMatrix3fvFunc)                               loader->get("glProgramUniformMatrix3fv");
+gl->programUniformMatrix3x2fv                  = (glProgramUniformMatrix3x2fvFunc)                             loader->get("glProgramUniformMatrix3x2fv");
+gl->programUniformMatrix3x4fv                  = (glProgramUniformMatrix3x4fvFunc)                             loader->get("glProgramUniformMatrix3x4fv");
+gl->programUniformMatrix4fv                            = (glProgramUniformMatrix4fvFunc)                               loader->get("glProgramUniformMatrix4fv");
+gl->programUniformMatrix4x2fv                  = (glProgramUniformMatrix4x2fvFunc)                             loader->get("glProgramUniformMatrix4x2fv");
+gl->programUniformMatrix4x3fv                  = (glProgramUniformMatrix4x3fvFunc)                             loader->get("glProgramUniformMatrix4x3fv");
+gl->pushDebugGroup                                             = (glPushDebugGroupFunc)                                                loader->get("glPushDebugGroup");
+gl->readBuffer                                                 = (glReadBufferFunc)                                                    loader->get("glReadBuffer");
+gl->readPixels                                                 = (glReadPixelsFunc)                                                    loader->get("glReadPixels");
+gl->readnPixels                                                        = (glReadnPixelsFunc)                                                   loader->get("glReadnPixels");
+gl->releaseShaderCompiler                              = (glReleaseShaderCompilerFunc)                                 loader->get("glReleaseShaderCompiler");
+gl->renderbufferStorage                                        = (glRenderbufferStorageFunc)                                   loader->get("glRenderbufferStorage");
+gl->renderbufferStorageMultisample             = (glRenderbufferStorageMultisampleFunc)                loader->get("glRenderbufferStorageMultisample");
+gl->resumeTransformFeedback                            = (glResumeTransformFeedbackFunc)                               loader->get("glResumeTransformFeedback");
+gl->sampleCoverage                                             = (glSampleCoverageFunc)                                                loader->get("glSampleCoverage");
+gl->sampleMaski                                                        = (glSampleMaskiFunc)                                                   loader->get("glSampleMaski");
+gl->samplerParameterIiv                                        = (glSamplerParameterIivFunc)                                   loader->get("glSamplerParameterIiv");
+gl->samplerParameterIuiv                               = (glSamplerParameterIuivFunc)                                  loader->get("glSamplerParameterIuiv");
+gl->samplerParameterf                                  = (glSamplerParameterfFunc)                                             loader->get("glSamplerParameterf");
+gl->samplerParameterfv                                 = (glSamplerParameterfvFunc)                                    loader->get("glSamplerParameterfv");
+gl->samplerParameteri                                  = (glSamplerParameteriFunc)                                             loader->get("glSamplerParameteri");
+gl->samplerParameteriv                                 = (glSamplerParameterivFunc)                                    loader->get("glSamplerParameteriv");
+gl->scissor                                                            = (glScissorFunc)                                                               loader->get("glScissor");
+gl->shaderBinary                                               = (glShaderBinaryFunc)                                                  loader->get("glShaderBinary");
+gl->shaderSource                                               = (glShaderSourceFunc)                                                  loader->get("glShaderSource");
+gl->stencilFunc                                                        = (glStencilFuncFunc)                                                   loader->get("glStencilFunc");
+gl->stencilFuncSeparate                                        = (glStencilFuncSeparateFunc)                                   loader->get("glStencilFuncSeparate");
+gl->stencilMask                                                        = (glStencilMaskFunc)                                                   loader->get("glStencilMask");
+gl->stencilMaskSeparate                                        = (glStencilMaskSeparateFunc)                                   loader->get("glStencilMaskSeparate");
+gl->stencilOp                                                  = (glStencilOpFunc)                                                             loader->get("glStencilOp");
+gl->stencilOpSeparate                                  = (glStencilOpSeparateFunc)                                             loader->get("glStencilOpSeparate");
+gl->texBuffer                                                  = (glTexBufferFunc)                                                             loader->get("glTexBuffer");
+gl->texBufferRange                                             = (glTexBufferRangeFunc)                                                loader->get("glTexBufferRange");
+gl->texImage2D                                                 = (glTexImage2DFunc)                                                    loader->get("glTexImage2D");
+gl->texImage3D                                                 = (glTexImage3DFunc)                                                    loader->get("glTexImage3D");
+gl->texParameterIiv                                            = (glTexParameterIivFunc)                                               loader->get("glTexParameterIiv");
+gl->texParameterIuiv                                   = (glTexParameterIuivFunc)                                              loader->get("glTexParameterIuiv");
+gl->texParameterf                                              = (glTexParameterfFunc)                                                 loader->get("glTexParameterf");
+gl->texParameterfv                                             = (glTexParameterfvFunc)                                                loader->get("glTexParameterfv");
+gl->texParameteri                                              = (glTexParameteriFunc)                                                 loader->get("glTexParameteri");
+gl->texParameteriv                                             = (glTexParameterivFunc)                                                loader->get("glTexParameteriv");
+gl->texStorage2D                                               = (glTexStorage2DFunc)                                                  loader->get("glTexStorage2D");
+gl->texStorage2DMultisample                            = (glTexStorage2DMultisampleFunc)                               loader->get("glTexStorage2DMultisample");
+gl->texStorage3D                                               = (glTexStorage3DFunc)                                                  loader->get("glTexStorage3D");
+gl->texStorage3DMultisample                            = (glTexStorage3DMultisampleFunc)                               loader->get("glTexStorage3DMultisample");
+gl->texSubImage2D                                              = (glTexSubImage2DFunc)                                                 loader->get("glTexSubImage2D");
+gl->texSubImage3D                                              = (glTexSubImage3DFunc)                                                 loader->get("glTexSubImage3D");
+gl->transformFeedbackVaryings                  = (glTransformFeedbackVaryingsFunc)                             loader->get("glTransformFeedbackVaryings");
+gl->uniform1f                                                  = (glUniform1fFunc)                                                             loader->get("glUniform1f");
+gl->uniform1fv                                                 = (glUniform1fvFunc)                                                    loader->get("glUniform1fv");
+gl->uniform1i                                                  = (glUniform1iFunc)                                                             loader->get("glUniform1i");
+gl->uniform1iv                                                 = (glUniform1ivFunc)                                                    loader->get("glUniform1iv");
+gl->uniform1ui                                                 = (glUniform1uiFunc)                                                    loader->get("glUniform1ui");
+gl->uniform1uiv                                                        = (glUniform1uivFunc)                                                   loader->get("glUniform1uiv");
+gl->uniform2f                                                  = (glUniform2fFunc)                                                             loader->get("glUniform2f");
+gl->uniform2fv                                                 = (glUniform2fvFunc)                                                    loader->get("glUniform2fv");
+gl->uniform2i                                                  = (glUniform2iFunc)                                                             loader->get("glUniform2i");
+gl->uniform2iv                                                 = (glUniform2ivFunc)                                                    loader->get("glUniform2iv");
+gl->uniform2ui                                                 = (glUniform2uiFunc)                                                    loader->get("glUniform2ui");
+gl->uniform2uiv                                                        = (glUniform2uivFunc)                                                   loader->get("glUniform2uiv");
+gl->uniform3f                                                  = (glUniform3fFunc)                                                             loader->get("glUniform3f");
+gl->uniform3fv                                                 = (glUniform3fvFunc)                                                    loader->get("glUniform3fv");
+gl->uniform3i                                                  = (glUniform3iFunc)                                                             loader->get("glUniform3i");
+gl->uniform3iv                                                 = (glUniform3ivFunc)                                                    loader->get("glUniform3iv");
+gl->uniform3ui                                                 = (glUniform3uiFunc)                                                    loader->get("glUniform3ui");
+gl->uniform3uiv                                                        = (glUniform3uivFunc)                                                   loader->get("glUniform3uiv");
+gl->uniform4f                                                  = (glUniform4fFunc)                                                             loader->get("glUniform4f");
+gl->uniform4fv                                                 = (glUniform4fvFunc)                                                    loader->get("glUniform4fv");
+gl->uniform4i                                                  = (glUniform4iFunc)                                                             loader->get("glUniform4i");
+gl->uniform4iv                                                 = (glUniform4ivFunc)                                                    loader->get("glUniform4iv");
+gl->uniform4ui                                                 = (glUniform4uiFunc)                                                    loader->get("glUniform4ui");
+gl->uniform4uiv                                                        = (glUniform4uivFunc)                                                   loader->get("glUniform4uiv");
+gl->uniformBlockBinding                                        = (glUniformBlockBindingFunc)                                   loader->get("glUniformBlockBinding");
+gl->uniformMatrix2fv                                   = (glUniformMatrix2fvFunc)                                              loader->get("glUniformMatrix2fv");
+gl->uniformMatrix2x3fv                                 = (glUniformMatrix2x3fvFunc)                                    loader->get("glUniformMatrix2x3fv");
+gl->uniformMatrix2x4fv                                 = (glUniformMatrix2x4fvFunc)                                    loader->get("glUniformMatrix2x4fv");
+gl->uniformMatrix3fv                                   = (glUniformMatrix3fvFunc)                                              loader->get("glUniformMatrix3fv");
+gl->uniformMatrix3x2fv                                 = (glUniformMatrix3x2fvFunc)                                    loader->get("glUniformMatrix3x2fv");
+gl->uniformMatrix3x4fv                                 = (glUniformMatrix3x4fvFunc)                                    loader->get("glUniformMatrix3x4fv");
+gl->uniformMatrix4fv                                   = (glUniformMatrix4fvFunc)                                              loader->get("glUniformMatrix4fv");
+gl->uniformMatrix4x2fv                                 = (glUniformMatrix4x2fvFunc)                                    loader->get("glUniformMatrix4x2fv");
+gl->uniformMatrix4x3fv                                 = (glUniformMatrix4x3fvFunc)                                    loader->get("glUniformMatrix4x3fv");
+gl->unmapBuffer                                                        = (glUnmapBufferFunc)                                                   loader->get("glUnmapBuffer");
+gl->useProgram                                                 = (glUseProgramFunc)                                                    loader->get("glUseProgram");
+gl->useProgramStages                                   = (glUseProgramStagesFunc)                                              loader->get("glUseProgramStages");
+gl->validateProgram                                            = (glValidateProgramFunc)                                               loader->get("glValidateProgram");
+gl->validateProgramPipeline                            = (glValidateProgramPipelineFunc)                               loader->get("glValidateProgramPipeline");
+gl->vertexAttrib1f                                             = (glVertexAttrib1fFunc)                                                loader->get("glVertexAttrib1f");
+gl->vertexAttrib1fv                                            = (glVertexAttrib1fvFunc)                                               loader->get("glVertexAttrib1fv");
+gl->vertexAttrib2f                                             = (glVertexAttrib2fFunc)                                                loader->get("glVertexAttrib2f");
+gl->vertexAttrib2fv                                            = (glVertexAttrib2fvFunc)                                               loader->get("glVertexAttrib2fv");
+gl->vertexAttrib3f                                             = (glVertexAttrib3fFunc)                                                loader->get("glVertexAttrib3f");
+gl->vertexAttrib3fv                                            = (glVertexAttrib3fvFunc)                                               loader->get("glVertexAttrib3fv");
+gl->vertexAttrib4f                                             = (glVertexAttrib4fFunc)                                                loader->get("glVertexAttrib4f");
+gl->vertexAttrib4fv                                            = (glVertexAttrib4fvFunc)                                               loader->get("glVertexAttrib4fv");
+gl->vertexAttribBinding                                        = (glVertexAttribBindingFunc)                                   loader->get("glVertexAttribBinding");
+gl->vertexAttribDivisor                                        = (glVertexAttribDivisorFunc)                                   loader->get("glVertexAttribDivisor");
+gl->vertexAttribFormat                                 = (glVertexAttribFormatFunc)                                    loader->get("glVertexAttribFormat");
+gl->vertexAttribI4i                                            = (glVertexAttribI4iFunc)                                               loader->get("glVertexAttribI4i");
+gl->vertexAttribI4iv                                   = (glVertexAttribI4ivFunc)                                              loader->get("glVertexAttribI4iv");
+gl->vertexAttribI4ui                                   = (glVertexAttribI4uiFunc)                                              loader->get("glVertexAttribI4ui");
+gl->vertexAttribI4uiv                                  = (glVertexAttribI4uivFunc)                                             loader->get("glVertexAttribI4uiv");
+gl->vertexAttribIFormat                                        = (glVertexAttribIFormatFunc)                                   loader->get("glVertexAttribIFormat");
+gl->vertexAttribIPointer                               = (glVertexAttribIPointerFunc)                                  loader->get("glVertexAttribIPointer");
+gl->vertexAttribPointer                                        = (glVertexAttribPointerFunc)                                   loader->get("glVertexAttribPointer");
+gl->vertexBindingDivisor                               = (glVertexBindingDivisorFunc)                                  loader->get("glVertexBindingDivisor");
+gl->viewport                                                   = (glViewportFunc)                                                              loader->get("glViewport");
+gl->waitSync                                                   = (glWaitSyncFunc)                                                              loader->get("glWaitSync");
diff --git a/framework/opengl/wrapper/glwInitES32Direct.inl b/framework/opengl/wrapper/glwInitES32Direct.inl
new file mode 100644 (file)
index 0000000..f30b57e
--- /dev/null
@@ -0,0 +1,363 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ *
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
+ */
+gl->activeShaderProgram                                        = &glActiveShaderProgram;
+gl->activeTexture                                              = &glActiveTexture;
+gl->attachShader                                               = &glAttachShader;
+gl->beginQuery                                                 = &glBeginQuery;
+gl->beginTransformFeedback                             = &glBeginTransformFeedback;
+gl->bindAttribLocation                                 = &glBindAttribLocation;
+gl->bindBuffer                                                 = &glBindBuffer;
+gl->bindBufferBase                                             = &glBindBufferBase;
+gl->bindBufferRange                                            = &glBindBufferRange;
+gl->bindFramebuffer                                            = &glBindFramebuffer;
+gl->bindImageTexture                                   = &glBindImageTexture;
+gl->bindProgramPipeline                                        = &glBindProgramPipeline;
+gl->bindRenderbuffer                                   = &glBindRenderbuffer;
+gl->bindSampler                                                        = &glBindSampler;
+gl->bindTexture                                                        = &glBindTexture;
+gl->bindTransformFeedback                              = &glBindTransformFeedback;
+gl->bindVertexArray                                            = &glBindVertexArray;
+gl->bindVertexBuffer                                   = &glBindVertexBuffer;
+gl->blendBarrier                                               = &glBlendBarrier;
+gl->blendColor                                                 = &glBlendColor;
+gl->blendEquation                                              = &glBlendEquation;
+gl->blendEquationSeparate                              = &glBlendEquationSeparate;
+gl->blendEquationSeparatei                             = &glBlendEquationSeparatei;
+gl->blendEquationi                                             = &glBlendEquationi;
+gl->blendFunc                                                  = &glBlendFunc;
+gl->blendFuncSeparate                                  = &glBlendFuncSeparate;
+gl->blendFuncSeparatei                                 = &glBlendFuncSeparatei;
+gl->blendFunci                                                 = &glBlendFunci;
+gl->blitFramebuffer                                            = &glBlitFramebuffer;
+gl->bufferData                                                 = &glBufferData;
+gl->bufferSubData                                              = &glBufferSubData;
+gl->checkFramebufferStatus                             = &glCheckFramebufferStatus;
+gl->clear                                                              = &glClear;
+gl->clearBufferfi                                              = &glClearBufferfi;
+gl->clearBufferfv                                              = &glClearBufferfv;
+gl->clearBufferiv                                              = &glClearBufferiv;
+gl->clearBufferuiv                                             = &glClearBufferuiv;
+gl->clearColor                                                 = &glClearColor;
+gl->clearDepthf                                                        = &glClearDepthf;
+gl->clearStencil                                               = &glClearStencil;
+gl->clientWaitSync                                             = &glClientWaitSync;
+gl->colorMask                                                  = &glColorMask;
+gl->colorMaski                                                 = &glColorMaski;
+gl->compileShader                                              = &glCompileShader;
+gl->compressedTexImage2D                               = &glCompressedTexImage2D;
+gl->compressedTexImage3D                               = &glCompressedTexImage3D;
+gl->compressedTexSubImage2D                            = &glCompressedTexSubImage2D;
+gl->compressedTexSubImage3D                            = &glCompressedTexSubImage3D;
+gl->copyBufferSubData                                  = &glCopyBufferSubData;
+gl->copyImageSubData                                   = &glCopyImageSubData;
+gl->copyTexImage2D                                             = &glCopyTexImage2D;
+gl->copyTexSubImage2D                                  = &glCopyTexSubImage2D;
+gl->copyTexSubImage3D                                  = &glCopyTexSubImage3D;
+gl->createProgram                                              = &glCreateProgram;
+gl->createShader                                               = &glCreateShader;
+gl->createShaderProgramv                               = &glCreateShaderProgramv;
+gl->cullFace                                                   = &glCullFace;
+gl->debugMessageCallback                               = &glDebugMessageCallback;
+gl->debugMessageControl                                        = &glDebugMessageControl;
+gl->debugMessageInsert                                 = &glDebugMessageInsert;
+gl->deleteBuffers                                              = &glDeleteBuffers;
+gl->deleteFramebuffers                                 = &glDeleteFramebuffers;
+gl->deleteProgram                                              = &glDeleteProgram;
+gl->deleteProgramPipelines                             = &glDeleteProgramPipelines;
+gl->deleteQueries                                              = &glDeleteQueries;
+gl->deleteRenderbuffers                                        = &glDeleteRenderbuffers;
+gl->deleteSamplers                                             = &glDeleteSamplers;
+gl->deleteShader                                               = &glDeleteShader;
+gl->deleteSync                                                 = &glDeleteSync;
+gl->deleteTextures                                             = &glDeleteTextures;
+gl->deleteTransformFeedbacks                   = &glDeleteTransformFeedbacks;
+gl->deleteVertexArrays                                 = &glDeleteVertexArrays;
+gl->depthFunc                                                  = &glDepthFunc;
+gl->depthMask                                                  = &glDepthMask;
+gl->depthRangef                                                        = &glDepthRangef;
+gl->detachShader                                               = &glDetachShader;
+gl->disable                                                            = &glDisable;
+gl->disableVertexAttribArray                   = &glDisableVertexAttribArray;
+gl->disablei                                                   = &glDisablei;
+gl->dispatchCompute                                            = &glDispatchCompute;
+gl->dispatchComputeIndirect                            = &glDispatchComputeIndirect;
+gl->drawArrays                                                 = &glDrawArrays;
+gl->drawArraysIndirect                                 = &glDrawArraysIndirect;
+gl->drawArraysInstanced                                        = &glDrawArraysInstanced;
+gl->drawBuffers                                                        = &glDrawBuffers;
+gl->drawElements                                               = &glDrawElements;
+gl->drawElementsBaseVertex                             = &glDrawElementsBaseVertex;
+gl->drawElementsIndirect                               = &glDrawElementsIndirect;
+gl->drawElementsInstanced                              = &glDrawElementsInstanced;
+gl->drawElementsInstancedBaseVertex            = &glDrawElementsInstancedBaseVertex;
+gl->drawRangeElements                                  = &glDrawRangeElements;
+gl->drawRangeElementsBaseVertex                        = &glDrawRangeElementsBaseVertex;
+gl->enable                                                             = &glEnable;
+gl->enableVertexAttribArray                            = &glEnableVertexAttribArray;
+gl->enablei                                                            = &glEnablei;
+gl->endQuery                                                   = &glEndQuery;
+gl->endTransformFeedback                               = &glEndTransformFeedback;
+gl->fenceSync                                                  = &glFenceSync;
+gl->finish                                                             = &glFinish;
+gl->flush                                                              = &glFlush;
+gl->flushMappedBufferRange                             = &glFlushMappedBufferRange;
+gl->framebufferParameteri                              = &glFramebufferParameteri;
+gl->framebufferRenderbuffer                            = &glFramebufferRenderbuffer;
+gl->framebufferTexture                                 = &glFramebufferTexture;
+gl->framebufferTexture2D                               = &glFramebufferTexture2D;
+gl->framebufferTextureLayer                            = &glFramebufferTextureLayer;
+gl->frontFace                                                  = &glFrontFace;
+gl->genBuffers                                                 = &glGenBuffers;
+gl->genFramebuffers                                            = &glGenFramebuffers;
+gl->genProgramPipelines                                        = &glGenProgramPipelines;
+gl->genQueries                                                 = &glGenQueries;
+gl->genRenderbuffers                                   = &glGenRenderbuffers;
+gl->genSamplers                                                        = &glGenSamplers;
+gl->genTextures                                                        = &glGenTextures;
+gl->genTransformFeedbacks                              = &glGenTransformFeedbacks;
+gl->genVertexArrays                                            = &glGenVertexArrays;
+gl->generateMipmap                                             = &glGenerateMipmap;
+gl->getActiveAttrib                                            = &glGetActiveAttrib;
+gl->getActiveUniform                                   = &glGetActiveUniform;
+gl->getActiveUniformBlockName                  = &glGetActiveUniformBlockName;
+gl->getActiveUniformBlockiv                            = &glGetActiveUniformBlockiv;
+gl->getActiveUniformsiv                                        = &glGetActiveUniformsiv;
+gl->getAttachedShaders                                 = &glGetAttachedShaders;
+gl->getAttribLocation                                  = &glGetAttribLocation;
+gl->getBooleani_v                                              = &glGetBooleani_v;
+gl->getBooleanv                                                        = &glGetBooleanv;
+gl->getBufferParameteri64v                             = &glGetBufferParameteri64v;
+gl->getBufferParameteriv                               = &glGetBufferParameteriv;
+gl->getBufferPointerv                                  = &glGetBufferPointerv;
+gl->getDebugMessageLog                                 = &glGetDebugMessageLog;
+gl->getError                                                   = &glGetError;
+gl->getFloatv                                                  = &glGetFloatv;
+gl->getFragDataLocation                                        = &glGetFragDataLocation;
+gl->getFramebufferAttachmentParameteriv        = &glGetFramebufferAttachmentParameteriv;
+gl->getFramebufferParameteriv                  = &glGetFramebufferParameteriv;
+gl->getGraphicsResetStatus                             = &glGetGraphicsResetStatus;
+gl->getInteger64i_v                                            = &glGetInteger64i_v;
+gl->getInteger64v                                              = &glGetInteger64v;
+gl->getIntegeri_v                                              = &glGetIntegeri_v;
+gl->getIntegerv                                                        = &glGetIntegerv;
+gl->getInternalformativ                                        = &glGetInternalformativ;
+gl->getMultisamplefv                                   = &glGetMultisamplefv;
+gl->getObjectLabel                                             = &glGetObjectLabel;
+gl->getObjectPtrLabel                                  = &glGetObjectPtrLabel;
+gl->getPointerv                                                        = &glGetPointerv;
+gl->getProgramBinary                                   = &glGetProgramBinary;
+gl->getProgramInfoLog                                  = &glGetProgramInfoLog;
+gl->getProgramInterfaceiv                              = &glGetProgramInterfaceiv;
+gl->getProgramPipelineInfoLog                  = &glGetProgramPipelineInfoLog;
+gl->getProgramPipelineiv                               = &glGetProgramPipelineiv;
+gl->getProgramResourceIndex                            = &glGetProgramResourceIndex;
+gl->getProgramResourceLocation                 = &glGetProgramResourceLocation;
+gl->getProgramResourceName                             = &glGetProgramResourceName;
+gl->getProgramResourceiv                               = &glGetProgramResourceiv;
+gl->getProgramiv                                               = &glGetProgramiv;
+gl->getQueryObjectuiv                                  = &glGetQueryObjectuiv;
+gl->getQueryiv                                                 = &glGetQueryiv;
+gl->getRenderbufferParameteriv                 = &glGetRenderbufferParameteriv;
+gl->getSamplerParameterIiv                             = &glGetSamplerParameterIiv;
+gl->getSamplerParameterIuiv                            = &glGetSamplerParameterIuiv;
+gl->getSamplerParameterfv                              = &glGetSamplerParameterfv;
+gl->getSamplerParameteriv                              = &glGetSamplerParameteriv;
+gl->getShaderInfoLog                                   = &glGetShaderInfoLog;
+gl->getShaderPrecisionFormat                   = &glGetShaderPrecisionFormat;
+gl->getShaderSource                                            = &glGetShaderSource;
+gl->getShaderiv                                                        = &glGetShaderiv;
+gl->getString                                                  = &glGetString;
+gl->getStringi                                                 = &glGetStringi;
+gl->getSynciv                                                  = &glGetSynciv;
+gl->getTexLevelParameterfv                             = &glGetTexLevelParameterfv;
+gl->getTexLevelParameteriv                             = &glGetTexLevelParameteriv;
+gl->getTexParameterIiv                                 = &glGetTexParameterIiv;
+gl->getTexParameterIuiv                                        = &glGetTexParameterIuiv;
+gl->getTexParameterfv                                  = &glGetTexParameterfv;
+gl->getTexParameteriv                                  = &glGetTexParameteriv;
+gl->getTransformFeedbackVarying                        = &glGetTransformFeedbackVarying;
+gl->getUniformBlockIndex                               = &glGetUniformBlockIndex;
+gl->getUniformIndices                                  = &glGetUniformIndices;
+gl->getUniformLocation                                 = &glGetUniformLocation;
+gl->getUniformfv                                               = &glGetUniformfv;
+gl->getUniformiv                                               = &glGetUniformiv;
+gl->getUniformuiv                                              = &glGetUniformuiv;
+gl->getVertexAttribIiv                                 = &glGetVertexAttribIiv;
+gl->getVertexAttribIuiv                                        = &glGetVertexAttribIuiv;
+gl->getVertexAttribPointerv                            = &glGetVertexAttribPointerv;
+gl->getVertexAttribfv                                  = &glGetVertexAttribfv;
+gl->getVertexAttribiv                                  = &glGetVertexAttribiv;
+gl->getnUniformfv                                              = &glGetnUniformfv;
+gl->getnUniformiv                                              = &glGetnUniformiv;
+gl->getnUniformuiv                                             = &glGetnUniformuiv;
+gl->hint                                                               = &glHint;
+gl->invalidateFramebuffer                              = &glInvalidateFramebuffer;
+gl->invalidateSubFramebuffer                   = &glInvalidateSubFramebuffer;
+gl->isBuffer                                                   = &glIsBuffer;
+gl->isEnabled                                                  = &glIsEnabled;
+gl->isEnabledi                                                 = &glIsEnabledi;
+gl->isFramebuffer                                              = &glIsFramebuffer;
+gl->isProgram                                                  = &glIsProgram;
+gl->isProgramPipeline                                  = &glIsProgramPipeline;
+gl->isQuery                                                            = &glIsQuery;
+gl->isRenderbuffer                                             = &glIsRenderbuffer;
+gl->isSampler                                                  = &glIsSampler;
+gl->isShader                                                   = &glIsShader;
+gl->isSync                                                             = &glIsSync;
+gl->isTexture                                                  = &glIsTexture;
+gl->isTransformFeedback                                        = &glIsTransformFeedback;
+gl->isVertexArray                                              = &glIsVertexArray;
+gl->lineWidth                                                  = &glLineWidth;
+gl->linkProgram                                                        = &glLinkProgram;
+gl->mapBufferRange                                             = &glMapBufferRange;
+gl->memoryBarrier                                              = &glMemoryBarrier;
+gl->memoryBarrierByRegion                              = &glMemoryBarrierByRegion;
+gl->minSampleShading                                   = &glMinSampleShading;
+gl->objectLabel                                                        = &glObjectLabel;
+gl->objectPtrLabel                                             = &glObjectPtrLabel;
+gl->patchParameteri                                            = &glPatchParameteri;
+gl->pauseTransformFeedback                             = &glPauseTransformFeedback;
+gl->pixelStorei                                                        = &glPixelStorei;
+gl->polygonOffset                                              = &glPolygonOffset;
+gl->popDebugGroup                                              = &glPopDebugGroup;
+gl->primitiveBoundingBox                               = &glPrimitiveBoundingBox;
+gl->programBinary                                              = &glProgramBinary;
+gl->programParameteri                                  = &glProgramParameteri;
+gl->programUniform1f                                   = &glProgramUniform1f;
+gl->programUniform1fv                                  = &glProgramUniform1fv;
+gl->programUniform1i                                   = &glProgramUniform1i;
+gl->programUniform1iv                                  = &glProgramUniform1iv;
+gl->programUniform1ui                                  = &glProgramUniform1ui;
+gl->programUniform1uiv                                 = &glProgramUniform1uiv;
+gl->programUniform2f                                   = &glProgramUniform2f;
+gl->programUniform2fv                                  = &glProgramUniform2fv;
+gl->programUniform2i                                   = &glProgramUniform2i;
+gl->programUniform2iv                                  = &glProgramUniform2iv;
+gl->programUniform2ui                                  = &glProgramUniform2ui;
+gl->programUniform2uiv                                 = &glProgramUniform2uiv;
+gl->programUniform3f                                   = &glProgramUniform3f;
+gl->programUniform3fv                                  = &glProgramUniform3fv;
+gl->programUniform3i                                   = &glProgramUniform3i;
+gl->programUniform3iv                                  = &glProgramUniform3iv;
+gl->programUniform3ui                                  = &glProgramUniform3ui;
+gl->programUniform3uiv                                 = &glProgramUniform3uiv;
+gl->programUniform4f                                   = &glProgramUniform4f;
+gl->programUniform4fv                                  = &glProgramUniform4fv;
+gl->programUniform4i                                   = &glProgramUniform4i;
+gl->programUniform4iv                                  = &glProgramUniform4iv;
+gl->programUniform4ui                                  = &glProgramUniform4ui;
+gl->programUniform4uiv                                 = &glProgramUniform4uiv;
+gl->programUniformMatrix2fv                            = &glProgramUniformMatrix2fv;
+gl->programUniformMatrix2x3fv                  = &glProgramUniformMatrix2x3fv;
+gl->programUniformMatrix2x4fv                  = &glProgramUniformMatrix2x4fv;
+gl->programUniformMatrix3fv                            = &glProgramUniformMatrix3fv;
+gl->programUniformMatrix3x2fv                  = &glProgramUniformMatrix3x2fv;
+gl->programUniformMatrix3x4fv                  = &glProgramUniformMatrix3x4fv;
+gl->programUniformMatrix4fv                            = &glProgramUniformMatrix4fv;
+gl->programUniformMatrix4x2fv                  = &glProgramUniformMatrix4x2fv;
+gl->programUniformMatrix4x3fv                  = &glProgramUniformMatrix4x3fv;
+gl->pushDebugGroup                                             = &glPushDebugGroup;
+gl->readBuffer                                                 = &glReadBuffer;
+gl->readPixels                                                 = &glReadPixels;
+gl->readnPixels                                                        = &glReadnPixels;
+gl->releaseShaderCompiler                              = &glReleaseShaderCompiler;
+gl->renderbufferStorage                                        = &glRenderbufferStorage;
+gl->renderbufferStorageMultisample             = &glRenderbufferStorageMultisample;
+gl->resumeTransformFeedback                            = &glResumeTransformFeedback;
+gl->sampleCoverage                                             = &glSampleCoverage;
+gl->sampleMaski                                                        = &glSampleMaski;
+gl->samplerParameterIiv                                        = &glSamplerParameterIiv;
+gl->samplerParameterIuiv                               = &glSamplerParameterIuiv;
+gl->samplerParameterf                                  = &glSamplerParameterf;
+gl->samplerParameterfv                                 = &glSamplerParameterfv;
+gl->samplerParameteri                                  = &glSamplerParameteri;
+gl->samplerParameteriv                                 = &glSamplerParameteriv;
+gl->scissor                                                            = &glScissor;
+gl->shaderBinary                                               = &glShaderBinary;
+gl->shaderSource                                               = (glShaderSourceFunc)&glShaderSource;
+gl->stencilFunc                                                        = &glStencilFunc;
+gl->stencilFuncSeparate                                        = &glStencilFuncSeparate;
+gl->stencilMask                                                        = &glStencilMask;
+gl->stencilMaskSeparate                                        = &glStencilMaskSeparate;
+gl->stencilOp                                                  = &glStencilOp;
+gl->stencilOpSeparate                                  = &glStencilOpSeparate;
+gl->texBuffer                                                  = &glTexBuffer;
+gl->texBufferRange                                             = &glTexBufferRange;
+gl->texImage2D                                                 = &glTexImage2D;
+gl->texImage3D                                                 = &glTexImage3D;
+gl->texParameterIiv                                            = &glTexParameterIiv;
+gl->texParameterIuiv                                   = &glTexParameterIuiv;
+gl->texParameterf                                              = &glTexParameterf;
+gl->texParameterfv                                             = &glTexParameterfv;
+gl->texParameteri                                              = &glTexParameteri;
+gl->texParameteriv                                             = &glTexParameteriv;
+gl->texStorage2D                                               = &glTexStorage2D;
+gl->texStorage2DMultisample                            = &glTexStorage2DMultisample;
+gl->texStorage3D                                               = &glTexStorage3D;
+gl->texStorage3DMultisample                            = &glTexStorage3DMultisample;
+gl->texSubImage2D                                              = &glTexSubImage2D;
+gl->texSubImage3D                                              = &glTexSubImage3D;
+gl->transformFeedbackVaryings                  = &glTransformFeedbackVaryings;
+gl->uniform1f                                                  = &glUniform1f;
+gl->uniform1fv                                                 = &glUniform1fv;
+gl->uniform1i                                                  = &glUniform1i;
+gl->uniform1iv                                                 = &glUniform1iv;
+gl->uniform1ui                                                 = &glUniform1ui;
+gl->uniform1uiv                                                        = &glUniform1uiv;
+gl->uniform2f                                                  = &glUniform2f;
+gl->uniform2fv                                                 = &glUniform2fv;
+gl->uniform2i                                                  = &glUniform2i;
+gl->uniform2iv                                                 = &glUniform2iv;
+gl->uniform2ui                                                 = &glUniform2ui;
+gl->uniform2uiv                                                        = &glUniform2uiv;
+gl->uniform3f                                                  = &glUniform3f;
+gl->uniform3fv                                                 = &glUniform3fv;
+gl->uniform3i                                                  = &glUniform3i;
+gl->uniform3iv                                                 = &glUniform3iv;
+gl->uniform3ui                                                 = &glUniform3ui;
+gl->uniform3uiv                                                        = &glUniform3uiv;
+gl->uniform4f                                                  = &glUniform4f;
+gl->uniform4fv                                                 = &glUniform4fv;
+gl->uniform4i                                                  = &glUniform4i;
+gl->uniform4iv                                                 = &glUniform4iv;
+gl->uniform4ui                                                 = &glUniform4ui;
+gl->uniform4uiv                                                        = &glUniform4uiv;
+gl->uniformBlockBinding                                        = &glUniformBlockBinding;
+gl->uniformMatrix2fv                                   = &glUniformMatrix2fv;
+gl->uniformMatrix2x3fv                                 = &glUniformMatrix2x3fv;
+gl->uniformMatrix2x4fv                                 = &glUniformMatrix2x4fv;
+gl->uniformMatrix3fv                                   = &glUniformMatrix3fv;
+gl->uniformMatrix3x2fv                                 = &glUniformMatrix3x2fv;
+gl->uniformMatrix3x4fv                                 = &glUniformMatrix3x4fv;
+gl->uniformMatrix4fv                                   = &glUniformMatrix4fv;
+gl->uniformMatrix4x2fv                                 = &glUniformMatrix4x2fv;
+gl->uniformMatrix4x3fv                                 = &glUniformMatrix4x3fv;
+gl->unmapBuffer                                                        = &glUnmapBuffer;
+gl->useProgram                                                 = &glUseProgram;
+gl->useProgramStages                                   = &glUseProgramStages;
+gl->validateProgram                                            = &glValidateProgram;
+gl->validateProgramPipeline                            = &glValidateProgramPipeline;
+gl->vertexAttrib1f                                             = &glVertexAttrib1f;
+gl->vertexAttrib1fv                                            = &glVertexAttrib1fv;
+gl->vertexAttrib2f                                             = &glVertexAttrib2f;
+gl->vertexAttrib2fv                                            = &glVertexAttrib2fv;
+gl->vertexAttrib3f                                             = &glVertexAttrib3f;
+gl->vertexAttrib3fv                                            = &glVertexAttrib3fv;
+gl->vertexAttrib4f                                             = &glVertexAttrib4f;
+gl->vertexAttrib4fv                                            = &glVertexAttrib4fv;
+gl->vertexAttribBinding                                        = &glVertexAttribBinding;
+gl->vertexAttribDivisor                                        = &glVertexAttribDivisor;
+gl->vertexAttribFormat                                 = &glVertexAttribFormat;
+gl->vertexAttribI4i                                            = &glVertexAttribI4i;
+gl->vertexAttribI4iv                                   = &glVertexAttribI4iv;
+gl->vertexAttribI4ui                                   = &glVertexAttribI4ui;
+gl->vertexAttribI4uiv                                  = &glVertexAttribI4uiv;
+gl->vertexAttribIFormat                                        = &glVertexAttribIFormat;
+gl->vertexAttribIPointer                               = &glVertexAttribIPointer;
+gl->vertexAttribPointer                                        = &glVertexAttribPointer;
+gl->vertexBindingDivisor                               = &glVertexBindingDivisor;
+gl->viewport                                                   = &glViewport;
+gl->waitSync                                                   = &glWaitSync;
index 13b6c6d..26b72da 100644 (file)
@@ -1,12 +1,12 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 
 if (de::contains(extSet, "GL_KHR_blend_equation_advanced"))
 {
-       gl->blendBarrierKHR     = (glBlendBarrierKHRFunc)       loader->get("glBlendBarrierKHR");
+       gl->blendBarrier        = (glBlendBarrierFunc)  loader->get("glBlendBarrierKHR");
 }
 
 if (de::contains(extSet, "GL_KHR_debug"))
@@ -42,7 +42,7 @@ if (de::contains(extSet, "GL_EXT_texture_buffer"))
 
 if (de::contains(extSet, "GL_EXT_primitive_bounding_box"))
 {
-       gl->primitiveBoundingBoxEXT     = (glPrimitiveBoundingBoxEXTFunc)       loader->get("glPrimitiveBoundingBoxEXT");
+       gl->primitiveBoundingBox        = (glPrimitiveBoundingBoxFunc)  loader->get("glPrimitiveBoundingBoxEXT");
 }
 
 if (de::contains(extSet, "GL_OES_EGL_image"))
index 06e7f7c..341cc24 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 
 if (de::contains(extSet, "GL_KHR_debug"))
index c5e33b1..8fb59f6 100644 (file)
@@ -47,6 +47,11 @@ void initES31 (Functions* gl, const FunctionLoader* loader)
 #include "glwInitES31.inl"
 }
 
+void initES32 (Functions* gl, const FunctionLoader* loader)
+{
+#include "glwInitES32.inl"
+}
+
 void initGL30Core (Functions* gl, const FunctionLoader* loader)
 {
 #include "glwInitGL30.inl"
index 365e37a..34b668b 100644 (file)
@@ -33,6 +33,7 @@ namespace glw
 void   initES20                        (Functions* gl, const FunctionLoader* loader);  //!< Load all OpenGL ES 2.0 functions.
 void   initES30                        (Functions* gl, const FunctionLoader* loader);  //!< Load all OpenGL ES 3.0 functions.
 void   initES31                        (Functions* gl, const FunctionLoader* loader);  //!< Load all OpenGL ES 3.1 functions.
+void   initES32                        (Functions* gl, const FunctionLoader* loader);  //!< Load all OpenGL ES 3.2 functions.
 
 void   initGL30Core            (Functions* gl, const FunctionLoader* loader);  //!< Load all GL 3.0 core functions.
 void   initGL31Core            (Functions* gl, const FunctionLoader* loader);  //!< Load all GL 3.1 core functions.
index f355789..9dc2897 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 gl->activeTexture                                              = (glActiveTextureFunc)                                                 loader->get("glActiveTexture");
 gl->attachShader                                               = (glAttachShaderFunc)                                                  loader->get("glAttachShader");
index 38c5b2e..92800d9 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 gl->activeTexture                                              = (glActiveTextureFunc)                                                 loader->get("glActiveTexture");
 gl->attachShader                                               = (glAttachShaderFunc)                                                  loader->get("glAttachShader");
index 31e60e8..91f5db4 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 gl->activeTexture                                              = (glActiveTextureFunc)                                                 loader->get("glActiveTexture");
 gl->attachShader                                               = (glAttachShaderFunc)                                                  loader->get("glAttachShader");
index 06c3bcf..caa2e55 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 gl->activeTexture                                              = (glActiveTextureFunc)                                                 loader->get("glActiveTexture");
 gl->attachShader                                               = (glAttachShaderFunc)                                                  loader->get("glAttachShader");
index 3c7328f..2bf8865 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 gl->activeTexture                                              = (glActiveTextureFunc)                                                 loader->get("glActiveTexture");
 gl->attachShader                                               = (glAttachShaderFunc)                                                  loader->get("glAttachShader");
index 6a62ecd..cfcf02e 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 gl->activeShaderProgram                                        = (glActiveShaderProgramFunc)                                   loader->get("glActiveShaderProgram");
 gl->activeTexture                                              = (glActiveTextureFunc)                                                 loader->get("glActiveTexture");
index 39c310b..c9c21f3 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 gl->activeShaderProgram                                                        = (glActiveShaderProgramFunc)                                                   loader->get("glActiveShaderProgram");
 gl->activeTexture                                                              = (glActiveTextureFunc)                                                                 loader->get("glActiveTexture");
index d3a66cb..38ee658 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 gl->activeShaderProgram                                                        = (glActiveShaderProgramFunc)                                                   loader->get("glActiveShaderProgram");
 gl->activeTexture                                                              = (glActiveTextureFunc)                                                                 loader->get("glActiveTexture");
index e896700..31e26ef 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 gl->activeShaderProgram                                                        = (glActiveShaderProgramFunc)                                                   loader->get("glActiveShaderProgram");
 gl->activeTexture                                                              = (glActiveTextureFunc)                                                                 loader->get("glActiveTexture");
index 45af5f3..3cb112c 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 gl->activeShaderProgram                                                        = (glActiveShaderProgramFunc)                                                   loader->get("glActiveShaderProgram");
 gl->activeTexture                                                              = (glActiveTextureFunc)                                                                 loader->get("glActiveTexture");
index f3467e8..bf2e720 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 
 GLW_APICALL void GLW_APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program)
@@ -224,7 +224,7 @@ GLW_APICALL void GLW_APIENTRY glBindVertexBuffers (GLuint first, GLsizei count,
 
 }
 
-GLW_APICALL void GLW_APIENTRY glBlendBarrierKHR (void)
+GLW_APICALL void GLW_APIENTRY glBlendBarrier (void)
 {
 
 }
@@ -3039,7 +3039,7 @@ GLW_APICALL void GLW_APIENTRY glPopGroupMarkerEXT (void)
 
 }
 
-GLW_APICALL void GLW_APIENTRY glPrimitiveBoundingBoxEXT (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW)
+GLW_APICALL void GLW_APIENTRY glPrimitiveBoundingBox (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW)
 {
        DE_UNREF(minX);
        DE_UNREF(minY);
index b7610b7..dfc2256 100644 (file)
@@ -1,7 +1,7 @@
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  *
- * Generated from Khronos GL API description (gl.xml) revision 30159.
+ * Generated from Khronos GL API description (gl.xml) revision 32093.
  */
 gl->activeShaderProgram                                                        = glActiveShaderProgram;
 gl->activeTexture                                                              = glActiveTexture;
@@ -32,7 +32,7 @@ gl->bindTransformFeedback                                             = glBindTransformFeedback;
 gl->bindVertexArray                                                            = glBindVertexArray;
 gl->bindVertexBuffer                                                   = glBindVertexBuffer;
 gl->bindVertexBuffers                                                  = glBindVertexBuffers;
-gl->blendBarrierKHR                                                            = glBlendBarrierKHR;
+gl->blendBarrier                                                               = glBlendBarrier;
 gl->blendColor                                                                 = glBlendColor;
 gl->blendEquation                                                              = glBlendEquation;
 gl->blendEquationSeparate                                              = glBlendEquationSeparate;
@@ -383,7 +383,7 @@ gl->polygonMode                                                                     = glPolygonMode;
 gl->polygonOffset                                                              = glPolygonOffset;
 gl->popDebugGroup                                                              = glPopDebugGroup;
 gl->popGroupMarkerEXT                                                  = glPopGroupMarkerEXT;
-gl->primitiveBoundingBoxEXT                                            = glPrimitiveBoundingBoxEXT;
+gl->primitiveBoundingBox                                               = glPrimitiveBoundingBox;
 gl->primitiveRestartIndex                                              = glPrimitiveRestartIndex;
 gl->programBinary                                                              = glProgramBinary;
 gl->programParameteri                                                  = glProgramParameteri;
index 64cbe9b..e32c18a 100644 (file)
@@ -101,7 +101,8 @@ AndroidNativeClientBuffer::AndroidNativeClientBuffer (const LibUI& lib, GLenum f
 class AndroidNativeImageSource : public ImageSource
 {
 public:
-                                                       AndroidNativeImageSource        (GLenum format) : m_format(format) {}
+                                                       AndroidNativeImageSource        (GLenum format) : m_format(format), m_libui(DE_NULL) {}
+                                                       ~AndroidNativeImageSource       (void);
        MovePtr<ClientBuffer>   createBuffer                            (const glw::Functions&, Texture2D*) const;
        string                                  getRequiredExtension            (void) const { return "EGL_ANDROID_image_native_buffer"; }
        EGLImageKHR                             createImage                                     (const Library& egl, EGLDisplay dpy, EGLContext ctx, EGLClientBuffer clientBuffer) const;
@@ -109,9 +110,26 @@ public:
 
 protected:
        GLenum                                  m_format;
-       LibUI                                   m_libui;
+
+       const LibUI&                    getLibUI                                        (void) const;
+
+private:
+       mutable LibUI*                  m_libui;
 };
 
+AndroidNativeImageSource::~AndroidNativeImageSource (void)
+{
+       delete m_libui;
+}
+
+const LibUI& AndroidNativeImageSource::getLibUI (void) const
+{
+       if (!m_libui)
+               m_libui = new LibUI();
+
+       return *m_libui;
+}
+
 void checkStatus (status_t status)
 {
        if (status != tcu::Android::internal::OK)
@@ -120,7 +138,7 @@ void checkStatus (status_t status)
 
 MovePtr<ClientBuffer> AndroidNativeImageSource::createBuffer (const glw::Functions&, Texture2D* ref) const
 {
-       MovePtr<AndroidNativeClientBuffer>      buffer                  (new AndroidNativeClientBuffer(m_libui, m_format));
+       MovePtr<AndroidNativeClientBuffer>      buffer                  (new AndroidNativeClientBuffer(getLibUI(), m_format));
        GraphicBuffer&                                          graphicBuffer   = buffer->getGraphicBuffer();
        if (ref != DE_NULL)
        {
@@ -157,7 +175,7 @@ MovePtr<ImageSource> createAndroidNativeImageSource (GLenum format)
        {
                return MovePtr<ImageSource>(new AndroidNativeImageSource(format));
        }
-       catch (std::runtime_error& exc)
+       catch (const std::runtime_error& exc)
        {
                return createUnsupportedImageSource(string("Android native buffers unsupported: ") + exc.what(), format);
        }
index 6eac350..9a80ff9 100644 (file)
 #include "egluNativeDisplay.hpp"
 #include "egluNativeWindow.hpp"
 #include "egluUtil.hpp"
+#include "egluUtil.hpp"
 #include "egluUnique.hpp"
 
+#include "eglwLibrary.hpp"
+
 #include <memory>
 
 using tcu::TestLog;
@@ -181,27 +184,40 @@ void NegativeApiTests::init (void)
                        log << TestLog::EndSection;
                });
 
+       static const EGLint s_validGenericPbufferAttrib[] = { EGL_WIDTH, 64, EGL_HEIGHT, 64, EGL_NONE };
+
        TEGL_ADD_API_CASE(copy_buffers, "eglCopyBuffers() negative tests",
                {
-                       TestLog&        log                     = m_testCtx.getLog();
-                       EGLDisplay      display         = getDisplay();
+                       TestLog&                                                        log                             = m_testCtx.getLog();
+                       const eglw::Library&                            egl                             = m_eglTestCtx.getLibrary();
+                       EGLDisplay                                                      display                 = getDisplay();
+                       const eglu::NativePixmapFactory&        factory                 = eglu::selectNativePixmapFactory(m_eglTestCtx.getNativeDisplayFactory(), m_testCtx.getCommandLine());
+                       de::UniquePtr<eglu::NativePixmap>       pixmap                  (factory.createPixmap(&m_eglTestCtx.getNativeDisplay(), 64, 64));
+                       EGLConfig                                                       config;
 
-                       log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
+                       {
+                               if (getConfig(&config, FilterList() << surfaceBits<EGL_PBUFFER_BIT>))
+                               {
+                                       eglu::UniqueSurface     surface (egl, display, egl.createPbufferSurface(display, config, s_validGenericPbufferAttrib));
 
-                       expectFalse(eglCopyBuffers(EGL_NO_DISPLAY, EGL_NO_SURFACE, (EGLNativePixmapType)0));
-                       expectError(EGL_BAD_DISPLAY);
+                                       log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
 
-                       expectFalse(eglCopyBuffers((EGLDisplay)-1, EGL_NO_SURFACE, (EGLNativePixmapType)0));
-                       expectError(EGL_BAD_DISPLAY);
+                                       expectFalse(eglCopyBuffers(EGL_NO_DISPLAY, EGL_NO_SURFACE, pixmap->getLegacyNative()));
+                                       expectError(EGL_BAD_DISPLAY);
 
-                       log << TestLog::EndSection;
+                                       expectFalse(eglCopyBuffers((EGLDisplay)-1, EGL_NO_SURFACE, pixmap->getLegacyNative()));
+                                       expectError(EGL_BAD_DISPLAY);
+
+                                       log << TestLog::EndSection;
+                               }
+                       }
 
                        log << TestLog::Section("Test2", "EGL_BAD_SURFACE is generated if surface is not an EGL surface");
 
-                       expectFalse(eglCopyBuffers(display, EGL_NO_SURFACE, (EGLNativePixmapType)0));
+                       expectFalse(eglCopyBuffers(display, EGL_NO_SURFACE, pixmap->getLegacyNative()));
                        expectError(EGL_BAD_SURFACE);
 
-                       expectFalse(eglCopyBuffers(display, (EGLSurface)-1, (EGLNativePixmapType)0));
+                       expectFalse(eglCopyBuffers(display, (EGLSurface)-1, pixmap->getLegacyNative()));
                        expectError(EGL_BAD_SURFACE);
 
                        log << TestLog::EndSection;
@@ -212,9 +228,8 @@ void NegativeApiTests::init (void)
        static const EGLint s_invalidChooseConfigAttribList2[]  = { EGL_BIND_TO_TEXTURE_RGB, 4, EGL_NONE };
        static const EGLint s_invalidChooseConfigAttribList3[]  = { EGL_BIND_TO_TEXTURE_RGBA, 5, EGL_NONE };
        static const EGLint s_invalidChooseConfigAttribList4[]  = { EGL_COLOR_BUFFER_TYPE, 0, EGL_NONE };
-       static const EGLint s_invalidChooseConfigAttribList5[]  = { EGL_MATCH_NATIVE_PIXMAP, -1, EGL_NONE };
-       static const EGLint s_invalidChooseConfigAttribList6[]  = { EGL_NATIVE_RENDERABLE, 6, EGL_NONE };
-       static const EGLint s_invalidChooseConfigAttribList7[]  = { EGL_TRANSPARENT_TYPE, 6, EGL_NONE };
+       static const EGLint s_invalidChooseConfigAttribList5[]  = { EGL_NATIVE_RENDERABLE, 6, EGL_NONE };
+       static const EGLint s_invalidChooseConfigAttribList6[]  = { EGL_TRANSPARENT_TYPE, 6, EGL_NONE };
        static const EGLint* s_invalidChooseConfigAttribLists[] =
        {
                &s_invalidChooseConfigAttribList0[0],
@@ -223,8 +238,7 @@ void NegativeApiTests::init (void)
                &s_invalidChooseConfigAttribList3[0],
                &s_invalidChooseConfigAttribList4[0],
                &s_invalidChooseConfigAttribList5[0],
-               &s_invalidChooseConfigAttribList6[0],
-               &s_invalidChooseConfigAttribList7[0]
+               &s_invalidChooseConfigAttribList6[0]
        };
 
        TEGL_ADD_API_CASE(choose_config, "eglChooseConfig() negative tests",
@@ -479,8 +493,6 @@ void NegativeApiTests::init (void)
                        }
                });
 
-       static const EGLint s_validGenericPbufferAttrib[] = { EGL_WIDTH, 64, EGL_HEIGHT, 64, EGL_NONE };
-
        static const EGLint s_invalidGenericPbufferAttrib0[] = { 0, EGL_NONE };
        static const EGLint s_invalidGenericPbufferAttrib1[] = { (EGLint)0xffffffff };
        static const EGLint s_negativeWidthPbufferAttrib[] = { EGL_WIDTH, -1, EGL_HEIGHT, 64, EGL_NONE };
@@ -649,41 +661,30 @@ void NegativeApiTests::init (void)
                        expectError(EGL_BAD_CONFIG);
 
                        log << TestLog::EndSection;
-
-                       log << TestLog::Section("Test3", "EGL_BAD_NATIVE_PIXMAP may be generated if native_pixmap is not a valid native pixmap");
-
-                       // Any pixmap-capable config.
-                       EGLConfig pixmapConfig;
-                       if (getConfig(&pixmapConfig, FilterList() << surfaceBits<EGL_PIXMAP_BIT>))
-                       {
-                               expectNoSurface(eglCreatePixmapSurface(display, pixmapConfig, DE_NULL, s_emptyAttribList));
-                               expectError(EGL_BAD_NATIVE_PIXMAP);
-                       }
-
-                       log << TestLog::EndSection;
                });
 
        TEGL_ADD_API_CASE(create_window_surface, "eglCreateWindowSurface() negative tests",
                {
-                       TestLog&        log                     = m_testCtx.getLog();
-                       EGLDisplay      display         = getDisplay();
-
-                       log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
-
-                       expectNoSurface(eglCreateWindowSurface(EGL_NO_DISPLAY, DE_NULL, DE_NULL, s_emptyAttribList));
-                       expectError(EGL_BAD_DISPLAY);
+                       EGLConfig                               config                  = DE_NULL;
+                       bool                                    gotConfig               = getConfig(&config, FilterList() << renderable<EGL_OPENGL_ES2_BIT> << surfaceBits<EGL_WINDOW_BIT>);
 
-                       expectNoSurface(eglCreateWindowSurface((EGLDisplay)-1, DE_NULL, DE_NULL, s_emptyAttribList));
-                       expectError(EGL_BAD_DISPLAY);
+                       if (gotConfig)
+                       {
+                               TestLog&                                                        log                             = m_testCtx.getLog();
+                               EGLDisplay                                                      display                 = getDisplay();
+                               const eglu::NativeWindowFactory&        factory                 = eglu::selectNativeWindowFactory(m_eglTestCtx.getNativeDisplayFactory(), m_testCtx.getCommandLine());
+                               de::UniquePtr<eglu::NativeWindow>       window                  (factory.createWindow(&m_eglTestCtx.getNativeDisplay(), display, config, DE_NULL, eglu::WindowParams(256, 256, eglu::parseWindowVisibility(m_testCtx.getCommandLine()))));
 
-                       log << TestLog::EndSection;
+                               log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
 
-                       log << TestLog::Section("Test2", "EGL_BAD_CONFIG is generated if config is not an EGL frame buffer configuration");
+                               expectNoSurface(eglCreateWindowSurface(EGL_NO_DISPLAY, config, window->getLegacyNative(), s_emptyAttribList));
+                               expectError(EGL_BAD_DISPLAY);
 
-                       expectNoSurface(eglCreateWindowSurface(display, (EGLConfig)-1, DE_NULL, s_emptyAttribList));
-                       expectError(EGL_BAD_CONFIG);
+                               expectNoSurface(eglCreateWindowSurface((EGLDisplay)-1, config, window->getLegacyNative(), s_emptyAttribList));
+                               expectError(EGL_BAD_DISPLAY);
 
-                       log << TestLog::EndSection;
+                               log << TestLog::EndSection;
+                       }
                });
 
        TEGL_ADD_API_CASE(destroy_context, "eglDestroyContext() negative tests",
@@ -804,12 +805,6 @@ void NegativeApiTests::init (void)
                        log << TestLog::EndSection;
                });
 
-       TEGL_ADD_API_CASE(get_display, "eglGetDisplay() negative tests",
-               {
-                       expectNoDisplay(eglGetDisplay((EGLNativeDisplayType)-1));
-                       expectError(EGL_SUCCESS);
-               });
-
        TEGL_ADD_API_CASE(initialize, "eglInitialize() negative tests",
                {
                        TestLog&        log                     = m_testCtx.getLog();
index b5d5239..faf9cb0 100644 (file)
@@ -315,8 +315,9 @@ bool DitheringCase::drawAndCheckGradient (const bool isVerticallyIncreasing, con
 
        if (!m_ditheringEnabled)
        {
-               const int increasingDirectionSize       = isVerticallyIncreasing ? renderedImg.getHeight() : renderedImg.getWidth();
-               const int constantDirectionSize         = isVerticallyIncreasing ? renderedImg.getWidth() : renderedImg.getHeight();
+               const int       increasingDirectionSize = isVerticallyIncreasing ? renderedImg.getHeight() : renderedImg.getWidth();
+               const int       constantDirectionSize   = isVerticallyIncreasing ? renderedImg.getWidth() : renderedImg.getHeight();
+               bool            colorHasChanged                 = false;
 
                for (int incrPos = 0; incrPos < increasingDirectionSize; incrPos++)
                {
@@ -329,13 +330,20 @@ bool DitheringCase::drawAndCheckGradient (const bool isVerticallyIncreasing, con
 
                                if (constPos > 0 && clr != prevConstantDirectionPix)
                                {
-                                       log << TestLog::Message
-                                               << "Failure: colors should be constant per " << (isVerticallyIncreasing ? "row" : "column")
-                                               << " (since dithering is disabled), but the color at position (" << x << ", " << y << ") is " << clr
-                                               << " and does not equal the color at (" << (isVerticallyIncreasing ? x-1 : x) << ", " << (isVerticallyIncreasing ? y : y-1) << "), which is " << prevConstantDirectionPix
-                                               << TestLog::EndMessage;
+                                       // Allow color to change once to take into account possibly
+                                       // discontinuity between triangles
+                                       if (colorHasChanged)
+                                       {
+                                               log << TestLog::Message
+                                                       << "Failure: colors should be constant per " << (isVerticallyIncreasing ? "row" : "column")
+                                                       << " (since dithering is disabled), but the color at position (" << x << ", " << y << ") is " << clr
+                                                       << " and does not equal the color at (" << (isVerticallyIncreasing ? x-1 : x) << ", " << (isVerticallyIncreasing ? y : y-1) << "), which is " << prevConstantDirectionPix
+                                                       << TestLog::EndMessage;
 
-                                       return false;
+                                               return false;
+                                       }
+                                       else
+                                               colorHasChanged = true;
                                }
 
                                prevConstantDirectionPix = clr;
index 8947f7b..bef75bc 100644 (file)
@@ -197,8 +197,10 @@ enum ASTCSupportLevel
        ASTCSUPPORTLEVEL_FULL
 };
 
-static inline ASTCSupportLevel getASTCSupportLevel (const glu::ContextInfo& contextInfo)
+static inline ASTCSupportLevel getASTCSupportLevel (const glu::ContextInfo& contextInfo, const glu::RenderContext& renderCtx)
 {
+       const bool isES32 = glu::contextSupports(renderCtx.getType(), glu::ApiType::es(3, 2));
+
        const vector<string>& extensions = contextInfo.getExtensions();
 
        ASTCSupportLevel maxLevel = ASTCSUPPORTLEVEL_NONE;
@@ -206,11 +208,19 @@ static inline ASTCSupportLevel getASTCSupportLevel (const glu::ContextInfo& cont
        for (int extNdx = 0; extNdx < (int)extensions.size(); extNdx++)
        {
                const string& ext = extensions[extNdx];
-
-               maxLevel = de::max(maxLevel, ext == "GL_KHR_texture_compression_astc_ldr"       ? ASTCSUPPORTLEVEL_LDR
-                                                                  : ext == "GL_KHR_texture_compression_astc_hdr"       ? ASTCSUPPORTLEVEL_HDR
-                                                                  : ext == "GL_OES_texture_compression_astc"           ? ASTCSUPPORTLEVEL_FULL
-                                                                  : ASTCSUPPORTLEVEL_NONE);
+               if (isES32)
+               {
+                       maxLevel =      de::max(maxLevel, ext == "GL_KHR_texture_compression_astc_hdr"  ? ASTCSUPPORTLEVEL_HDR
+                                                                               : ext == "GL_OES_texture_compression_astc"              ? ASTCSUPPORTLEVEL_FULL
+                                                                               : ASTCSUPPORTLEVEL_LDR);
+               }
+               else
+               {
+                       maxLevel =      de::max(maxLevel, ext == "GL_KHR_texture_compression_astc_ldr"  ? ASTCSUPPORTLEVEL_LDR
+                                                                               : ext == "GL_KHR_texture_compression_astc_hdr"  ? ASTCSUPPORTLEVEL_HDR
+                                                                               : ext == "GL_OES_texture_compression_astc"              ? ASTCSUPPORTLEVEL_FULL
+                                                                               : ASTCSUPPORTLEVEL_NONE);
+               }
        }
 
        return maxLevel;
@@ -285,7 +295,7 @@ void ASTCRenderer2D::initialize (int minRenderWidth, int minRenderHeight, const
        const tcu::RenderTarget&        renderTarget    = m_context.getRenderTarget();
        TestLog&                                        log                             = m_context.getTestContext().getLog();
 
-       m_astcSupport   = getASTCSupportLevel(m_context.getContextInfo());
+       m_astcSupport   = getASTCSupportLevel(m_context.getContextInfo(), m_context.getRenderContext());
        m_colorScale    = colorScale;
        m_colorBias             = colorBias;
 
index 350b734..ad02947 100644 (file)
@@ -315,8 +315,9 @@ bool DitheringCase::drawAndCheckGradient (const bool isVerticallyIncreasing, con
 
        if (!m_ditheringEnabled)
        {
-               const int increasingDirectionSize       = isVerticallyIncreasing ? renderedImg.getHeight() : renderedImg.getWidth();
-               const int constantDirectionSize         = isVerticallyIncreasing ? renderedImg.getWidth() : renderedImg.getHeight();
+               const int       increasingDirectionSize = isVerticallyIncreasing ? renderedImg.getHeight() : renderedImg.getWidth();
+               const int       constantDirectionSize   = isVerticallyIncreasing ? renderedImg.getWidth() : renderedImg.getHeight();
+               bool            colorHasChanged                 = false;
 
                for (int incrPos = 0; incrPos < increasingDirectionSize; incrPos++)
                {
@@ -329,13 +330,18 @@ bool DitheringCase::drawAndCheckGradient (const bool isVerticallyIncreasing, con
 
                                if (constPos > 0 && clr != prevConstantDirectionPix)
                                {
-                                       log << TestLog::Message
-                                               << "Failure: colors should be constant per " << (isVerticallyIncreasing ? "row" : "column")
-                                               << " (since dithering is disabled), but the color at position (" << x << ", " << y << ") is " << clr
-                                               << " and does not equal the color at (" << (isVerticallyIncreasing ? x-1 : x) << ", " << (isVerticallyIncreasing ? y : y-1) << "), which is " << prevConstantDirectionPix
-                                               << TestLog::EndMessage;
+                                       if (colorHasChanged)
+                                       {
+                                               log << TestLog::Message
+                                                       << "Failure: colors should be constant per " << (isVerticallyIncreasing ? "row" : "column")
+                                                       << " (since dithering is disabled), but the color at position (" << x << ", " << y << ") is " << clr
+                                                       << " and does not equal the color at (" << (isVerticallyIncreasing ? x-1 : x) << ", " << (isVerticallyIncreasing ? y : y-1) << "), which is " << prevConstantDirectionPix
+                                                       << TestLog::EndMessage;
 
-                                       return false;
+                                               return false;
+                                       }
+                                       else
+                                               colorHasChanged = true;
                                }
 
                                prevConstantDirectionPix = clr;
index d72ef55..e170b6f 100644 (file)
@@ -148,7 +148,7 @@ void FboTestCase::checkError (void)
                throw glu::Error((int)err, (string("Got ") + glu::getErrorStr(err).toString()).c_str(), DE_NULL, __FILE__, __LINE__);
 }
 
-static bool isRequiredFormat (deUint32 format)
+static bool isRequiredFormat (deUint32 format, glu::RenderContext& renderContext)
 {
        switch (format)
        {
@@ -198,16 +198,25 @@ static bool isRequiredFormat (deUint32 format)
                case GL_STENCIL_INDEX8:
                        return true;
 
+               // Float formats
+               case GL_RGBA32F:
+               case GL_RGB32F:
+               case GL_R11F_G11F_B10F:
+               case GL_RG32F:
+               case GL_R32F:
+                       return glu::contextSupports(renderContext.getType(), glu::ApiType::es(3, 2));;
+
                default:
                        return false;
        }
 }
 
-static std::vector<std::string> getEnablingExtensions (deUint32 format)
+static std::vector<std::string> getEnablingExtensions (deUint32 format, glu::RenderContext& renderContext)
 {
-       std::vector<std::string> out;
+       const bool                                      isES32 = glu::contextSupports(renderContext.getType(), glu::ApiType::es(3, 2));
+       std::vector<std::string>        out;
 
-       DE_ASSERT(!isRequiredFormat(format));
+       DE_ASSERT(!isRequiredFormat(format, renderContext));
 
        switch (format)
        {
@@ -225,7 +234,8 @@ static std::vector<std::string> getEnablingExtensions (deUint32 format)
                case GL_R11F_G11F_B10F:
                case GL_RG32F:
                case GL_R32F:
-                       out.push_back("GL_EXT_color_buffer_float");
+                       if (!isES32)
+                               out.push_back("GL_EXT_color_buffer_float");
 
                default:
                        break;
@@ -249,8 +259,8 @@ static bool isAnyExtensionSupported (Context& context, const std::vector<std::st
 
 void FboTestCase::checkFormatSupport (deUint32 sizedFormat)
 {
-       const bool                                              isCoreFormat    = isRequiredFormat(sizedFormat);
-       const std::vector<std::string>  requiredExts    = (!isCoreFormat) ? getEnablingExtensions(sizedFormat) : std::vector<std::string>();
+       const bool                                              isCoreFormat    = isRequiredFormat(sizedFormat, m_context.getRenderContext());
+       const std::vector<std::string>  requiredExts    = (!isCoreFormat) ? getEnablingExtensions(sizedFormat, m_context.getRenderContext()) : std::vector<std::string>();
 
        // Check that we don't try to use invalid formats.
        DE_ASSERT(isCoreFormat || !requiredExts.empty());
index e66cd8c..a2613be 100644 (file)
@@ -1158,9 +1158,11 @@ void NegativeBufferApiTests::init (void)
                        glBindTexture                   (GL_TEXTURE_2D, texture[0]);
                        glTexImage2D                    (GL_TEXTURE_2D, 0, GL_RGBA32UI, 32, 32, 0, GL_RGBA_INTEGER, GL_UNSIGNED_INT, NULL);
                        glFramebufferTexture2D  (GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture[0], 0);
-                       glTexImage2D                    (GL_TEXTURE_2D, 0, GL_RGBA8, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+
+                       glBindTexture                   (GL_TEXTURE_2D, texture[1]);
+                       glTexImage2D                    (GL_TEXTURE_2D, 0, GL_RGBA32UI, 32, 32, 0, GL_RGBA_INTEGER, GL_UNSIGNED_INT, NULL);
                        glFramebufferTexture2D  (GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture[1], 0);
-                       m_log << TestLog::Message << "// Read buffer: GL_RGBA32I, draw buffer: GL_RGBA8" << TestLog::EndMessage;
+                       m_log << TestLog::Message << "// Read buffer: GL_RGBA32UI, draw buffer: GL_RGBA32UI" << TestLog::EndMessage;
                        glBlitFramebuffer               (0, 0, 16, 16, 0, 0, 16, 16, GL_COLOR_BUFFER_BIT, GL_LINEAR);
                        expectError                             (GL_INVALID_OPERATION);
                        m_log << TestLog::EndSection;
index cd3fe1d..8aefd03 100644 (file)
@@ -432,20 +432,25 @@ void NegativeShaderApiTests::init (void)
                        glGetProgramiv          (srcProgram.getProgram(), GL_LINK_STATUS,                       &linkStatus);
                        m_log << TestLog::Message << "// GL_PROGRAM_BINARY_LENGTH = " << bufSize << TestLog::EndMessage;
                        m_log << TestLog::Message << "// GL_LINK_STATUS = " << linkStatus << TestLog::EndMessage;
-                       TCU_CHECK(bufSize > 0);
-                       binaryBuf.resize(bufSize);
-                       glGetProgramBinary      (srcProgram.getProgram(), bufSize, &binaryLength, &binaryFormat, &binaryBuf[0]);
-                       expectError                     (GL_NO_ERROR);
 
-                       m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not the name of an existing program object.");
-                       glProgramBinary         (dummyShader, binaryFormat, &binaryBuf[0], binaryLength);
-                       expectError                     (GL_INVALID_OPERATION);
-                       m_log << TestLog::EndSection;
+                       TCU_CHECK(bufSize >= 0);
 
-                       m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if binaryFormat is not a value recognized by the implementation.");
-                       glProgramBinary         (dstProgram, -1, &binaryBuf[0], binaryLength);
-                       expectError                     (GL_INVALID_ENUM);
-                       m_log << TestLog::EndSection;
+                       if (bufSize > 0)
+                       {
+                               binaryBuf.resize(bufSize);
+                               glGetProgramBinary      (srcProgram.getProgram(), bufSize, &binaryLength, &binaryFormat, &binaryBuf[0]);
+                               expectError                     (GL_NO_ERROR);
+
+                               m_log << TestLog::Section("", "GL_INVALID_OPERATION is generated if program is not the name of an existing program object.");
+                               glProgramBinary         (dummyShader, binaryFormat, &binaryBuf[0], binaryLength);
+                               expectError                     (GL_INVALID_OPERATION);
+                               m_log << TestLog::EndSection;
+
+                               m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if binaryFormat is not a value recognized by the implementation.");
+                               glProgramBinary         (dstProgram, -1, &binaryBuf[0], binaryLength);
+                               expectError                     (GL_INVALID_ENUM);
+                               m_log << TestLog::EndSection;
+                       }
 
                        glDeleteShader(dummyShader);
                        glDeleteProgram(dstProgram);
index 95a6102..00073ad 100644 (file)
@@ -145,6 +145,10 @@ set(DEQP_GLES31_FUNCTIONAL_SRCS
        es31fNegativeVertexArrayApiTests.hpp
        es31fNegativeStateApiTests.cpp
        es31fNegativeStateApiTests.hpp
+       es31fNegativeAtomicCounterTests.cpp
+       es31fNegativeAtomicCounterTests.hpp
+       es31fNegativeShaderImageLoadStoreTests.cpp
+       es31fNegativeShaderImageLoadStoreTests.hpp
        es31fTextureGatherTests.cpp
        es31fTextureGatherTests.hpp
        es31fTextureFormatTests.cpp
index dae25bf..6274edc 100644 (file)
@@ -90,21 +90,21 @@ static const char* getEquationName (glw::GLenum equation)
 {
        switch (equation)
        {
-               case GL_MULTIPLY_KHR:           return "multiply";
-               case GL_SCREEN_KHR:                     return "screen";
-               case GL_OVERLAY_KHR:            return "overlay";
-               case GL_DARKEN_KHR:                     return "darken";
-               case GL_LIGHTEN_KHR:            return "lighten";
-               case GL_COLORDODGE_KHR:         return "colordodge";
-               case GL_COLORBURN_KHR:          return "colorburn";
-               case GL_HARDLIGHT_KHR:          return "hardlight";
-               case GL_SOFTLIGHT_KHR:          return "softlight";
-               case GL_DIFFERENCE_KHR:         return "difference";
-               case GL_EXCLUSION_KHR:          return "exclusion";
-               case GL_HSL_HUE_KHR:            return "hsl_hue";
-               case GL_HSL_SATURATION_KHR:     return "hsl_saturation";
-               case GL_HSL_COLOR_KHR:          return "hsl_color";
-               case GL_HSL_LUMINOSITY_KHR:     return "hsl_luminosity";
+               case GL_MULTIPLY:               return "multiply";
+               case GL_SCREEN:                 return "screen";
+               case GL_OVERLAY:                return "overlay";
+               case GL_DARKEN:                 return "darken";
+               case GL_LIGHTEN:                return "lighten";
+               case GL_COLORDODGE:             return "colordodge";
+               case GL_COLORBURN:              return "colorburn";
+               case GL_HARDLIGHT:              return "hardlight";
+               case GL_SOFTLIGHT:              return "softlight";
+               case GL_DIFFERENCE:             return "difference";
+               case GL_EXCLUSION:              return "exclusion";
+               case GL_HSL_HUE:                return "hsl_hue";
+               case GL_HSL_SATURATION: return "hsl_saturation";
+               case GL_HSL_COLOR:              return "hsl_color";
+               case GL_HSL_LUMINOSITY: return "hsl_luminosity";
                default:
                        DE_ASSERT(false);
                        return DE_NULL;
@@ -207,9 +207,11 @@ const char* getBlendLayoutQualifier (rr::BlendEquationAdvanced equation)
        return s_qualifiers[equation];
 }
 
-glu::ProgramSources getBlendProgramSrc (rr::BlendEquationAdvanced equation)
+glu::ProgramSources getBlendProgramSrc (rr::BlendEquationAdvanced equation, glu::RenderContext& renderContext)
 {
-       static const char*      s_vertSrc       = "#version 310 es\n"
+       const bool isES32 = glu::contextSupports(renderContext.getType(), glu::ApiType::es(3, 2));
+
+       static const char*      s_vertSrc       = "${GLSL_VERSION_DECL}\n"
                                                                          "in highp vec4 a_position;\n"
                                                                          "in mediump vec4 a_color;\n"
                                                                          "out mediump vec4 v_color;\n"
@@ -218,8 +220,8 @@ glu::ProgramSources getBlendProgramSrc (rr::BlendEquationAdvanced equation)
                                                                          "     gl_Position = a_position;\n"
                                                                          "     v_color = a_color;\n"
                                                                          "}\n";
-       static const char*      s_fragSrc       = "#version 310 es\n"
-                                                                         "#extension GL_KHR_blend_equation_advanced : require\n"
+       static const char*      s_fragSrc       = "${GLSL_VERSION_DECL}\n"
+                                                                         "${EXTENSION}"
                                                                          "in mediump vec4 v_color;\n"
                                                                          "layout(${SUPPORT_QUALIFIER}) out;\n"
                                                                          "layout(location = 0) out mediump vec4 o_color;\n"
@@ -229,11 +231,12 @@ glu::ProgramSources getBlendProgramSrc (rr::BlendEquationAdvanced equation)
                                                                          "}\n";
 
        map<string, string> args;
-
+       args["GLSL_VERSION_DECL"] = isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+       args["EXTENSION"] = isES32 ? "\n" : "#extension GL_KHR_blend_equation_advanced : require\n";
        args["SUPPORT_QUALIFIER"] = getBlendLayoutQualifier(equation);
 
        return glu::ProgramSources()
-               << glu::VertexSource(s_vertSrc)
+               << glu::VertexSource(tcu::StringTemplate(s_vertSrc).specialize(args))
                << glu::FragmentSource(tcu::StringTemplate(s_fragSrc).specialize(args));
 }
 
@@ -243,21 +246,22 @@ void AdvancedBlendCase::init (void)
        const bool                              useFbo                  = m_rtType != RENDERTARGETTYPE_DEFAULT;
        const bool                              useSRGB                 = m_rtType == RENDERTARGETTYPE_SRGB_FBO;
 
-       if (!m_context.getContextInfo().isExtensionSupported("GL_KHR_blend_equation_advanced"))
-               throw tcu::NotSupportedError("GL_KHR_blend_equation_advanced is not supported", DE_NULL, __FILE__, __LINE__);
+       m_coherentExtensionSupported = m_context.getContextInfo().isExtensionSupported("GL_KHR_blend_equation_advanced_coherent");
+
+       if (!glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+               if (!m_context.getContextInfo().isExtensionSupported("GL_KHR_blend_equation_advanced"))
+                       TCU_THROW(NotSupportedError, "GL_KHR_blend_equation_advanced is not supported");
 
-       if (m_coherentBlending && !m_context.getContextInfo().isExtensionSupported("GL_KHR_blend_equation_advanced_coherent"))
-               throw tcu::NotSupportedError("GL_KHR_blend_equation_advanced_coherent is not supported", DE_NULL, __FILE__, __LINE__);
+       if (m_coherentBlending && !m_coherentExtensionSupported)
+               TCU_THROW(NotSupportedError, "GL_KHR_blend_equation_advanced_coherent is not supported");
 
-       TCU_CHECK(gl.blendBarrierKHR);
+       TCU_CHECK(gl.blendBarrier);
 
        DE_ASSERT(!m_program);
        DE_ASSERT(!m_referenceRenderer);
        DE_ASSERT(!m_refColorBuffer);
 
-       m_coherentExtensionSupported = m_context.getContextInfo().isExtensionSupported("GL_KHR_blend_equation_advanced_coherent");
-
-       m_program = new glu::ShaderProgram(m_context.getRenderContext(), getBlendProgramSrc(sglr::rr_util::mapGLBlendEquationAdvanced(m_blendMode)));
+       m_program = new glu::ShaderProgram(m_context.getRenderContext(), getBlendProgramSrc(sglr::rr_util::mapGLBlendEquationAdvanced(m_blendMode), m_context.getRenderContext()));
        m_testCtx.getLog() << *m_program;
 
        if (!m_program->isOk())
@@ -463,7 +467,7 @@ AdvancedBlendCase::IterateResult AdvancedBlendCase::iterate (void)
                gl.enable(GL_BLEND);
 
                if (!m_coherentBlending)
-                       gl.blendBarrierKHR();
+                       gl.blendBarrier();
 
                if (m_coherentBlending)
                {
@@ -474,7 +478,7 @@ AdvancedBlendCase::IterateResult AdvancedBlendCase::iterate (void)
                        for (int quadNdx = 1; quadNdx < numQuads; quadNdx++)
                        {
                                gl.drawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, (const void*)(deUintptr)(quadNdx*6*sizeof(deUint16)));
-                               gl.blendBarrierKHR();
+                               gl.blendBarrier();
                        }
                }
 
@@ -525,10 +529,10 @@ AdvancedBlendCase::IterateResult AdvancedBlendCase::iterate (void)
                gl.bindFramebuffer(GL_FRAMEBUFFER, m_fbo);
 
        {
-               const bool      isHSLMode       = m_blendMode == GL_HSL_HUE_KHR                 ||
-                                                                 m_blendMode == GL_HSL_SATURATION_KHR  ||
-                                                                 m_blendMode == GL_HSL_COLOR_KHR               ||
-                                                                 m_blendMode == GL_HSL_LUMINOSITY_KHR;
+               const bool      isHSLMode       = m_blendMode == GL_HSL_HUE                     ||
+                                                                 m_blendMode == GL_HSL_SATURATION      ||
+                                                                 m_blendMode == GL_HSL_COLOR           ||
+                                                                 m_blendMode == GL_HSL_LUMINOSITY;
                bool            comparePass     = false;
 
                if (isHSLMode)
@@ -657,7 +661,8 @@ BlendEquationStateCase::BlendEquationStateCase      (Context&                                               context,
 
 BlendEquationStateCase::IterateResult BlendEquationStateCase::iterate (void)
 {
-       TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_blend_equation_advanced"), "GL_KHR_blend_equation_advanced is not supported");
+       if (!glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+               TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_blend_equation_advanced"), "GL_KHR_blend_equation_advanced is not supported");
 
        glu::CallLogWrapper             gl              (m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
        tcu::ResultCollector    result  (m_testCtx.getLog(), " // ERROR: ");
@@ -710,8 +715,11 @@ BlendEquationIndexedStateCase::BlendEquationIndexedStateCase       (Context&                                               cont
 
 BlendEquationIndexedStateCase::IterateResult BlendEquationIndexedStateCase::iterate (void)
 {
-       TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_blend_equation_advanced"), "GL_KHR_blend_equation_advanced is not supported");
-       TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_EXT_draw_buffers_indexed"), "GL_EXT_draw_buffers_indexed is not supported");
+       if (!glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+       {
+               TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_KHR_blend_equation_advanced"), "GL_KHR_blend_equation_advanced is not supported");
+               TCU_CHECK_AND_THROW(NotSupportedError, m_context.getContextInfo().isExtensionSupported("GL_EXT_draw_buffers_indexed"), "GL_EXT_draw_buffers_indexed is not supported");
+       }
 
        glu::CallLogWrapper             gl              (m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
        tcu::ResultCollector    result  (m_testCtx.getLog(), " // ERROR: ");
@@ -735,7 +743,7 @@ BlendEquationIndexedStateCase::IterateResult BlendEquationIndexedStateCase::iter
 } // anonymous
 
 AdvancedBlendTests::AdvancedBlendTests (Context& context)
-       : TestCaseGroup(context, "blend_equation_advanced", "GL_KHR_blend_equation_advanced Tests")
+       : TestCaseGroup(context, "blend_equation_advanced", "GL_blend_equation_advanced Tests")
 {
 }
 
@@ -747,21 +755,21 @@ void AdvancedBlendTests::init (void)
 {
        static const glw::GLenum s_blendEquations[] =
        {
-               GL_MULTIPLY_KHR,
-               GL_SCREEN_KHR,
-               GL_OVERLAY_KHR,
-               GL_DARKEN_KHR,
-               GL_LIGHTEN_KHR,
-               GL_COLORDODGE_KHR,
-               GL_COLORBURN_KHR,
-               GL_HARDLIGHT_KHR,
-               GL_SOFTLIGHT_KHR,
-               GL_DIFFERENCE_KHR,
-               GL_EXCLUSION_KHR,
-               GL_HSL_HUE_KHR,
-               GL_HSL_SATURATION_KHR,
-               GL_HSL_COLOR_KHR,
-               GL_HSL_LUMINOSITY_KHR,
+               GL_MULTIPLY,
+               GL_SCREEN,
+               GL_OVERLAY,
+               GL_DARKEN,
+               GL_LIGHTEN,
+               GL_COLORDODGE,
+               GL_COLORBURN,
+               GL_HARDLIGHT,
+               GL_SOFTLIGHT,
+               GL_DIFFERENCE,
+               GL_EXCLUSION,
+               GL_HSL_HUE,
+               GL_HSL_SATURATION,
+               GL_HSL_COLOR,
+               GL_HSL_LUMINOSITY,
        };
 
        tcu::TestCaseGroup* const       stateQueryGroup         = new tcu::TestCaseGroup(m_testCtx, "state_query",              "State query tests");
index 6a18fce..e12b329 100644 (file)
@@ -58,17 +58,20 @@ static const char* getVerifierSuffix (QueryType type)
 class IsEnabledStateTestCase : public TestCase, private glu::CallLogWrapper
 {
 public:
-       IsEnabledStateTestCase (Context& context, QueryType verifier, const char* name, const char* description, glw::GLenum targetName, bool initial)
+       IsEnabledStateTestCase (Context& context, QueryType verifier, const char* name, const char* description, glw::GLenum targetName, bool initial, glu::ApiType minimumContextVersion)
                : TestCase                              (context, name, description)
                , glu::CallLogWrapper   (context.getRenderContext().getFunctions(), context.getTestContext().getLog())
                , m_targetName                  (targetName)
                , m_initial                             (initial)
                , m_verifier                    (verifier)
+               , m_minimumVersion              (minimumContextVersion)
        {
        }
 
        IterateResult iterate (void)
        {
+               TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(m_context.getRenderContext().getType(), m_minimumVersion), "This test requires a higher context version.");
+
                tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
                enableLogging(true);
 
@@ -93,6 +96,7 @@ private:
        const glw::GLenum               m_targetName;
        const bool                              m_initial;
        const QueryType                 m_verifier;
+       const glu::ApiType              m_minimumVersion;
 };
 
 } // anonymous
@@ -108,6 +112,8 @@ BooleanStateQueryTests::~BooleanStateQueryTests (void)
 
 void BooleanStateQueryTests::init (void)
 {
+       const bool isDebugContext = (m_context.getRenderContext().getType().getFlags() & glu::CONTEXT_DEBUG) != 0;
+
        static const QueryType isEnabledVerifiers[] =
        {
                QUERY_ISENABLED,
@@ -131,15 +137,22 @@ void BooleanStateQueryTests::init (void)
                const char*             description;
                glw::GLenum             targetName;
                bool                    value;
-       };
-       const StateBoolean isEnableds[] =
-       {
-               { "sample_mask",        "SAMPLE_MASK",  GL_SAMPLE_MASK, false},
+               glu::ApiType    minimumContext;
        };
 
-       for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(isEnableds); testNdx++)
        {
-               FOR_EACH_VERIFIER(isEnabledVerifiers, new IsEnabledStateTestCase(m_context, verifier, (std::string(isEnableds[testNdx].name) + "_" + verifierSuffix).c_str(), isEnableds[testNdx].description, isEnableds[testNdx].targetName, isEnableds[testNdx].value));
+               const StateBoolean isEnableds[] =
+               {
+                       { "sample_mask",                                "SAMPLE_MASK",                          GL_SAMPLE_MASK,                                 false,                  glu::ApiType::es(3, 1)},
+                       { "sample_shading",                             "SAMPLE_SHADING",                       GL_SAMPLE_SHADING,                              false,                  glu::ApiType::es(3, 2)},
+                       { "debug_output",                               "DEBUG_OUTPUT",                         GL_DEBUG_OUTPUT,                                isDebugContext, glu::ApiType::es(3, 2)},
+                       { "debug_output_synchronous",   "DEBUG_OUTPUT_SYNCHRONOUS",     GL_DEBUG_OUTPUT_SYNCHRONOUS,    false,                  glu::ApiType::es(3, 2)},
+               };
+
+               for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(isEnableds); testNdx++)
+               {
+                       FOR_EACH_VERIFIER(isEnabledVerifiers, new IsEnabledStateTestCase(m_context, verifier, (std::string(isEnableds[testNdx].name) + "_" + verifierSuffix).c_str(), isEnableds[testNdx].description, isEnableds[testNdx].targetName, isEnableds[testNdx].value, isEnableds[testNdx].minimumContext));
+               }
        }
 
 #undef FOR_EACH_VERIFIER
index f2db081..8407d3a 100644 (file)
@@ -987,6 +987,8 @@ void decompressTexture (vector<ArrayBuffer<deUint8> >&                      levelDatas,
        const tcu::CompressedTexFormat  compressedFormat        = glu::mapGLCompressedTexFormat(info.getFormat());
        const tcu::TextureFormat                decompressedFormat      = tcu::getUncompressedFormat(compressedFormat);
        const IVec3                                             size                            = info.getSize();
+       const bool                                              isES32                          = glu::contextSupports(renderContext.getType(), glu::ApiType::es(3, 2));
+
        de::UniquePtr<glu::ContextInfo> ctxInfo                         (glu::ContextInfo::create(renderContext));
        tcu::TexDecompressionParams             decompressParams;
 
@@ -994,7 +996,7 @@ void decompressTexture (vector<ArrayBuffer<deUint8> >&                      levelDatas,
        {
                if (ctxInfo->isExtensionSupported("GL_KHR_texture_compression_astc_hdr"))
                        decompressParams = tcu::TexDecompressionParams(tcu::TexDecompressionParams::ASTCMODE_HDR);
-               else if (ctxInfo->isExtensionSupported("GL_KHR_texture_compression_astc_ldr"))
+               else if (isES32 || ctxInfo->isExtensionSupported("GL_KHR_texture_compression_astc_ldr"))
                        decompressParams = tcu::TexDecompressionParams(tcu::TexDecompressionParams::ASTCMODE_LDR);
                else
                        DE_ASSERT(false);
@@ -1253,6 +1255,8 @@ void verifyTextureCubemap (tcu::TestContext&                                      testContext,
                const int                                               texelBlockSize          = getTexelBlockSize(info.getFormat());
                const IVec3                                             texelBlockPixelSize = getTexelBlockPixelSize(info.getFormat());
 
+               const bool                                              isES32                          = glu::contextSupports(renderContext.getType(), glu::ApiType::es(3, 2));
+
                vector<tcu::PixelBufferAccess>  levelAccesses[6];
                vector<ArrayBuffer<deUint8> >   levelDatas[6];
                de::UniquePtr<glu::ContextInfo> ctxInfo                         (glu::ContextInfo::create(renderContext));
@@ -1262,7 +1266,7 @@ void verifyTextureCubemap (tcu::TestContext&                                      testContext,
                {
                        if (ctxInfo->isExtensionSupported("GL_KHR_texture_compression_astc_hdr"))
                                decompressParams = tcu::TexDecompressionParams(tcu::TexDecompressionParams::ASTCMODE_HDR);
-                       else if (ctxInfo->isExtensionSupported("GL_KHR_texture_compression_astc_ldr"))
+                       else if (isES32 || ctxInfo->isExtensionSupported("GL_KHR_texture_compression_astc_ldr"))
                                decompressParams = tcu::TexDecompressionParams(tcu::TexDecompressionParams::ASTCMODE_LDR);
                        else
                                DE_ASSERT(false);
@@ -1683,8 +1687,10 @@ CopyImageTest::~CopyImageTest (void)
        deinit();
 }
 
-void checkFormatSupport (glu::ContextInfo& info, deUint32 format, deUint32 target)
+void checkFormatSupport (glu::ContextInfo& info, deUint32 format, deUint32 target, glu::RenderContext& ctx)
 {
+       const bool isES32 = glu::contextSupports(ctx.getType(), glu::ApiType::es(3, 2));
+
        if (glu::isCompressedFormat(format))
        {
                if (isAstcFormat(glu::mapGLCompressedTexFormat(format)))
@@ -1695,7 +1701,7 @@ void checkFormatSupport (glu::ContextInfo& info, deUint32 format, deUint32 targe
                        {
                                if (target == GL_TEXTURE_3D)
                                        TCU_THROW(NotSupportedError, "TEXTURE_3D target requires HDR astc support.");
-                               if (!info.isExtensionSupported("GL_KHR_texture_compression_astc_ldr"))
+                               if (!isES32 && !info.isExtensionSupported("GL_KHR_texture_compression_astc_ldr"))
                                        TCU_THROW(NotSupportedError, "Compressed astc texture not supported.");
                        }
                }
@@ -1710,12 +1716,13 @@ void checkFormatSupport (glu::ContextInfo& info, deUint32 format, deUint32 targe
 void CopyImageTest::init (void)
 {
        de::UniquePtr<glu::ContextInfo> ctxInfo(glu::ContextInfo::create(m_context.getRenderContext()));
+       const bool                                              isES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
 
-       if (!ctxInfo->isExtensionSupported("GL_EXT_copy_image"))
+       if (!isES32 && !ctxInfo->isExtensionSupported("GL_EXT_copy_image"))
                throw tcu::NotSupportedError("Extension GL_EXT_copy_image not supported.", "", __FILE__, __LINE__);
 
-       checkFormatSupport(*ctxInfo, m_srcImageInfo.getFormat(), m_srcImageInfo.getTarget());
-       checkFormatSupport(*ctxInfo, m_dstImageInfo.getFormat(), m_dstImageInfo.getTarget());
+       checkFormatSupport(*ctxInfo, m_srcImageInfo.getFormat(), m_srcImageInfo.getTarget(), m_context.getRenderContext());
+       checkFormatSupport(*ctxInfo, m_dstImageInfo.getFormat(), m_dstImageInfo.getTarget(), m_context.getRenderContext());
 
        {
                SeedBuilder builder;
@@ -2269,60 +2276,60 @@ void CopyImageTests::init (void)
        compressedTextureFormatViewClasses[VIEWCLASS_ETC2_EAC_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC);
 
        // VIEWCLASS_ASTC_4x4_RGBA
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_4x4_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_4x4_KHR);
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_4x4_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_4x4_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_4x4);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_4x4_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4);
 
        // VIEWCLASS_ASTC_5x4_RGBA
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_5x4_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_5x4_KHR);
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_5x4_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_5x4_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_5x4);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_5x4_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4);
 
        // VIEWCLASS_ASTC_5x5_RGBA
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_5x5_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_5x5_KHR);
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_5x5_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_5x5_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_5x5);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_5x5_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5);
 
        // VIEWCLASS_ASTC_6x5_RGBA
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_6x5_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_6x5_KHR);
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_6x5_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_6x5_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_6x5);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_6x5_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5);
 
        // VIEWCLASS_ASTC_6x6_RGBA
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_6x6_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_6x6_KHR);
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_6x6_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_6x6_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_6x6);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_6x6_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6);
 
        // VIEWCLASS_ASTC_8x5_RGBA
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_8x5_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_8x5_KHR);
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_8x5_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_8x5_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_8x5);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_8x5_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5);
 
        // VIEWCLASS_ASTC_8x6_RGBA
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_8x6_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_8x6_KHR);
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_8x6_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_8x6_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_8x6);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_8x6_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6);
 
        // VIEWCLASS_ASTC_8x8_RGBA
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_8x8_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_8x8_KHR);
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_8x8_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_8x8_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_8x8);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_8x8_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8);
 
        // VIEWCLASS_ASTC_10x5_RGBA
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_10x5_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_10x5_KHR);
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_10x5_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_10x5_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_10x5);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_10x5_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5);
 
        // VIEWCLASS_ASTC_10x6_RGBA
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_10x6_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_10x6_KHR);
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_10x6_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_10x6_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_10x6);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_10x6_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6);
 
        // VIEWCLASS_ASTC_10x8_RGBA
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_10x8_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_10x8_KHR);
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_10x8_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_10x8_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_10x8);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_10x8_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8);
 
        // VIEWCLASS_ASTC_10x10_RGBA
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_10x10_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_10x10_KHR);
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_10x10_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_10x10_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_10x10);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_10x10_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10);
 
        // VIEWCLASS_ASTC_12x10_RGBA
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_12x10_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_12x10_KHR);
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_12x10_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_12x10_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_12x10);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_12x10_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10);
 
        // VIEWCLASS_ASTC_12x12_RGBA
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_12x12_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_12x12_KHR);
-       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_12x12_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_12x12_RGBA].push_back(GL_COMPRESSED_RGBA_ASTC_12x12);
+       compressedTextureFormatViewClasses[VIEWCLASS_ASTC_12x12_RGBA].push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12);
 
        // Mixed view classes
        mixedViewClasses[VIEWCLASS_128_BITS] = pair<vector<deUint32>, vector<deUint32> >();
@@ -2340,34 +2347,34 @@ void CopyImageTests::init (void)
        mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC);
        mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RG11_EAC);
        mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SIGNED_RG11_EAC);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_4x4_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_5x4_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_5x5_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_6x5_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_6x6_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_8x5_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_8x6_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_8x8_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_10x5_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_10x6_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_10x8_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_10x10_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_12x10_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_12x12_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR);
-       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_4x4);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_5x4);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_5x5);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_6x5);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_6x6);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_8x5);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_8x6);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_8x8);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_10x5);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_10x6);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_10x8);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_10x10);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_12x10);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_RGBA_ASTC_12x12);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10);
+       mixedViewClasses[VIEWCLASS_128_BITS].second.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12);
 
        // 64 bits
 
index ef0cdab..f9c87d4 100644 (file)
@@ -30,6 +30,8 @@
 #include "es31fNegativeFragmentApiTests.hpp"
 #include "es31fNegativeVertexArrayApiTests.hpp"
 #include "es31fNegativeStateApiTests.hpp"
+#include "es31fNegativeAtomicCounterTests.hpp"
+#include "es31fNegativeShaderImageLoadStoreTests.hpp"
 
 #include "deUniquePtr.hpp"
 #include "deRandom.hpp"
@@ -97,6 +99,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 +647,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 +716,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 +922,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 +1234,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 +1337,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 +1434,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();
@@ -1646,7 +1654,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";
@@ -1790,7 +1798,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";
@@ -1838,7 +1846,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: ");
@@ -1908,7 +1916,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
        {
@@ -2012,7 +2020,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: ");
@@ -2122,7 +2130,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: ");
@@ -2351,7 +2359,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: ");
@@ -2478,7 +2486,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: ");
@@ -2588,7 +2596,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: ");
@@ -2638,7 +2646,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: ");
@@ -2701,7 +2709,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: ");
@@ -2737,7 +2745,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: ");
@@ -2782,7 +2790,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: ");
@@ -2821,7 +2829,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: ");
@@ -2904,13 +2913,15 @@ 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> externalFuncs                           = getUserMessageFuncs();
 
        {
                using namespace gls::StateQueryUtil;
@@ -3001,12 +3012,14 @@ 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));
                }
 
                {
@@ -3014,12 +3027,14 @@ 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));
                }
 
                {
@@ -3027,12 +3042,14 @@ 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));
                }
        }
 
index 55942e8..7aedcbc 100644 (file)
@@ -999,12 +999,12 @@ void renderQuad (TestLog&                                         log,
        gl.drawBuffers((glw::GLsizei)bufs.size(), &(bufs[0]));
 
        if (requiresBlendBarriers)
-               gl.blendBarrierKHR();
+               gl.blendBarrier();
 
        renderGLQuad(renderContext, program);
 
        if (requiresBlendBarriers)
-               gl.blendBarrierKHR();
+               gl.blendBarrier();
 
        gl.drawBuffers(0, 0);
        gl.bindFramebuffer(GL_FRAMEBUFFER, 0);
index 618f78e..2490607 100644 (file)
@@ -124,8 +124,8 @@ public:
 protected:
        void preCheck (void)
        {
-               if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_cube_map_array"))
-                       throw tcu::NotSupportedError("GL_EXT_texture_cube_map_array not supported");
+               if (!glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)) && !m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_cube_map_array"))
+                       TCU_THROW(NotSupportedError, "Test requires extension GL_EXT_texture_cube_map_array or a context version equal or higher than 3.2");
 
                checkFormatSupport(m_format);
        }
index 4497508..0a0f85a 100644 (file)
@@ -152,8 +152,9 @@ void FboTestCase::checkError (void)
                throw glu::Error((int)err, (string("Got ") + glu::getErrorStr(err).toString()).c_str(), DE_NULL, __FILE__, __LINE__);
 }
 
-static bool isRequiredFormat (deUint32 format)
+static bool isRequiredFormat (deUint32 format, glu::RenderContext& renderContext)
 {
+       const bool isES32 = glu::contextSupports(renderContext.getType(), glu::ApiType::es(3, 2));
        switch (format)
        {
                // Color-renderable formats
@@ -202,16 +203,26 @@ static bool isRequiredFormat (deUint32 format)
                case GL_STENCIL_INDEX8:
                        return true;
 
+               // Float format
+               case GL_RGBA32F:
+               case GL_RGB32F:
+               case GL_R11F_G11F_B10F:
+               case GL_RG32F:
+               case GL_R32F:
+                       return isES32;
+
+
                default:
                        return false;
        }
 }
 
-static std::vector<std::string> getEnablingExtensions (deUint32 format)
+static std::vector<std::string> getEnablingExtensions (deUint32 format, glu::RenderContext& renderContext)
 {
-       std::vector<std::string> out;
+       const bool                                      isES32 = glu::contextSupports(renderContext.getType(), glu::ApiType::es(3, 2));
+       std::vector<std::string>        out;
 
-       DE_ASSERT(!isRequiredFormat(format));
+       DE_ASSERT(!isRequiredFormat(format, renderContext));
 
        switch (format)
        {
@@ -229,7 +240,8 @@ static std::vector<std::string> getEnablingExtensions (deUint32 format)
                case GL_R11F_G11F_B10F:
                case GL_RG32F:
                case GL_R32F:
-                       out.push_back("GL_EXT_color_buffer_float");
+                       if (!isES32)
+                               out.push_back("GL_EXT_color_buffer_float");
                        break;
 
                default:
@@ -254,8 +266,8 @@ static bool isAnyExtensionSupported (Context& context, const std::vector<std::st
 
 void FboTestCase::checkFormatSupport (deUint32 sizedFormat)
 {
-       const bool                                              isCoreFormat    = isRequiredFormat(sizedFormat);
-       const std::vector<std::string>  requiredExts    = (!isCoreFormat) ? getEnablingExtensions(sizedFormat) : std::vector<std::string>();
+       const bool                                              isCoreFormat    = isRequiredFormat(sizedFormat, m_context.getRenderContext());
+       const std::vector<std::string>  requiredExts    = (!isCoreFormat) ? getEnablingExtensions(sizedFormat, m_context.getRenderContext()) : std::vector<std::string>();
 
        // Check that we don't try to use invalid formats.
        DE_ASSERT(isCoreFormat || !requiredExts.empty());
index fe55d52..88e1625 100644 (file)
@@ -5956,7 +5956,7 @@ void GeometryShaderTests::init (void)
        {
                // limits with a corresponding glsl constant
                queryGroup->addChild(new GeometryProgramLimitCase(m_context, "max_geometry_input_components",                           "", GL_MAX_GEOMETRY_INPUT_COMPONENTS,                           "MaxGeometryInputComponents",           64));
-               queryGroup->addChild(new GeometryProgramLimitCase(m_context, "max_geometry_output_components",                          "", GL_MAX_GEOMETRY_OUTPUT_COMPONENTS,                          "MaxGeometryOutputComponents",          128));
+               queryGroup->addChild(new GeometryProgramLimitCase(m_context, "max_geometry_output_components",                          "", GL_MAX_GEOMETRY_OUTPUT_COMPONENTS,                          "MaxGeometryOutputComponents",          64));
                queryGroup->addChild(new GeometryProgramLimitCase(m_context, "max_geometry_image_uniforms",                                     "", GL_MAX_GEOMETRY_IMAGE_UNIFORMS,                                     "MaxGeometryImageUniforms",                     0));
                queryGroup->addChild(new GeometryProgramLimitCase(m_context, "max_geometry_texture_image_units",                        "", GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS,                        "MaxGeometryTextureImageUnits",         16));
                queryGroup->addChild(new GeometryProgramLimitCase(m_context, "max_geometry_output_vertices",                            "", GL_MAX_GEOMETRY_OUTPUT_VERTICES,                            "MaxGeometryOutputVertices",            256));
index 458b5b8..7ebf685 100644 (file)
@@ -63,6 +63,17 @@ static const char* getVerifierSuffix (QueryType type)
        }
 }
 
+void isExtensionSupported (Context& context, std::string extensionName)
+{
+       if (extensionName == "GL_EXT_draw_buffers_indexed" || extensionName == "GL_KHR_blend_equation_advanced")
+       {
+               if (!contextSupports(context.getRenderContext().getType(), glu::ApiType::es(3, 2)) && !context.getContextInfo().isExtensionSupported(extensionName.c_str()))
+                       TCU_THROW(NotSupportedError, (std::string("Extension ") + extensionName + std::string(" not supported.")).c_str());
+       }
+       else if (!context.getContextInfo().isExtensionSupported(extensionName.c_str()))
+               TCU_THROW(NotSupportedError, (std::string("Extension ") + extensionName + std::string(" not supported.")).c_str());
+}
+
 class SampleMaskCase : public TestCase
 {
 public:
@@ -862,8 +873,7 @@ EnableBlendCase::EnableBlendCase (Context& context, const char* name, const char
 
 void EnableBlendCase::init (void)
 {
-       if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_draw_buffers_indexed"))
-               throw tcu::NotSupportedError("Extension GL_EXT_draw_buffers_indexed not supported", "", __FILE__, __LINE__);
+       isExtensionSupported(m_context, "GL_EXT_draw_buffers_indexed");
 }
 
 EnableBlendCase::IterateResult EnableBlendCase::iterate (void)
@@ -947,8 +957,7 @@ ColorMaskCase::ColorMaskCase (Context& context, const char* name, const char* de
 
 void ColorMaskCase::init (void)
 {
-       if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_draw_buffers_indexed"))
-               throw tcu::NotSupportedError("Extension GL_EXT_draw_buffers_indexed not supported", "", __FILE__, __LINE__);
+       isExtensionSupported(m_context, "GL_EXT_draw_buffers_indexed");
 }
 
 ColorMaskCase::IterateResult ColorMaskCase::iterate (void)
@@ -1021,8 +1030,7 @@ BlendFuncCase::BlendFuncCase (Context& context, const char* name, const char* de
 
 void BlendFuncCase::init (void)
 {
-       if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_draw_buffers_indexed"))
-               throw tcu::NotSupportedError("Extension GL_EXT_draw_buffers_indexed not supported", "", __FILE__, __LINE__);
+       isExtensionSupported(m_context, "GL_EXT_draw_buffers_indexed");
 }
 
 BlendFuncCase::IterateResult BlendFuncCase::iterate (void)
@@ -1214,8 +1222,7 @@ BlendEquationCase::BlendEquationCase (Context& context, const char* name, const
 
 void BlendEquationCase::init (void)
 {
-       if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_draw_buffers_indexed"))
-               throw tcu::NotSupportedError("Extension GL_EXT_draw_buffers_indexed not supported", "", __FILE__, __LINE__);
+       isExtensionSupported(m_context, "GL_EXT_draw_buffers_indexed");
 }
 
 BlendEquationCase::IterateResult BlendEquationCase::iterate (void)
@@ -1346,11 +1353,8 @@ BlendEquationAdvancedCase::BlendEquationAdvancedCase (Context& context, const ch
 
 void BlendEquationAdvancedCase::init (void)
 {
-       if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_draw_buffers_indexed"))
-               throw tcu::NotSupportedError("Extension GL_EXT_draw_buffers_indexed not supported", "", __FILE__, __LINE__);
-
-       if (!m_context.getContextInfo().isExtensionSupported("GL_KHR_blend_equation_advanced"))
-               throw tcu::NotSupportedError("Extension GL_KHR_blend_equation_advanced not supported", "", __FILE__, __LINE__);
+       isExtensionSupported(m_context, "GL_EXT_draw_buffers_indexed");
+       isExtensionSupported(m_context, "GL_KHR_blend_equation_advanced");
 }
 
 BlendEquationAdvancedCase::IterateResult BlendEquationAdvancedCase::iterate (void)
@@ -1366,21 +1370,21 @@ BlendEquationAdvancedCase::IterateResult BlendEquationAdvancedCase::iterate (voi
 
        const deUint32 blendEquationAdvanced[] =
        {
-               GL_MULTIPLY_KHR,
-               GL_SCREEN_KHR,
-               GL_OVERLAY_KHR,
-               GL_DARKEN_KHR,
-               GL_LIGHTEN_KHR,
-               GL_COLORDODGE_KHR,
-               GL_COLORBURN_KHR,
-               GL_HARDLIGHT_KHR,
-               GL_SOFTLIGHT_KHR,
-               GL_DIFFERENCE_KHR,
-               GL_EXCLUSION_KHR,
-               GL_HSL_HUE_KHR,
-               GL_HSL_SATURATION_KHR,
-               GL_HSL_COLOR_KHR,
-               GL_HSL_LUMINOSITY_KHR
+               GL_MULTIPLY,
+               GL_SCREEN,
+               GL_OVERLAY,
+               GL_DARKEN,
+               GL_LIGHTEN,
+               GL_COLORDODGE,
+               GL_COLORBURN,
+               GL_HARDLIGHT,
+               GL_SOFTLIGHT,
+               GL_DIFFERENCE,
+               GL_EXCLUSION,
+               GL_HSL_HUE,
+               GL_HSL_SATURATION,
+               GL_HSL_COLOR,
+               GL_HSL_LUMINOSITY
        };
 
        glu::CallLogWrapper             gl                              (m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
@@ -1395,13 +1399,13 @@ BlendEquationAdvancedCase::IterateResult BlendEquationAdvancedCase::iterate (voi
        {
                const tcu::ScopedLogSection section (m_testCtx.getLog(), "AfterSettingCommon", "After setting common");
 
-               gl.glBlendEquation(GL_SCREEN_KHR);
+               gl.glBlendEquation(GL_SCREEN);
 
                for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
-                       verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, GL_SCREEN_KHR, m_verifierType);
+                       verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, GL_SCREEN, m_verifierType);
 
                for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
-                       verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, GL_SCREEN_KHR, m_verifierType);
+                       verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, GL_SCREEN, m_verifierType);
        }
        {
                const tcu::ScopedLogSection section (m_testCtx.getLog(), "AfterSettingIndexed", "After setting indexed");
@@ -1421,13 +1425,13 @@ BlendEquationAdvancedCase::IterateResult BlendEquationAdvancedCase::iterate (voi
                for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
                        gl.glBlendEquationi(ndx, blendEquationAdvanced[ndx % DE_LENGTH_OF_ARRAY(blendEquationAdvanced)]);
 
-               gl.glBlendEquation(GL_MULTIPLY_KHR);
+               gl.glBlendEquation(GL_MULTIPLY);
 
                for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
-                       verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, GL_MULTIPLY_KHR, m_verifierType);
+                       verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, GL_MULTIPLY, m_verifierType);
 
                for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
-                       verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, GL_MULTIPLY_KHR, m_verifierType);
+                       verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, GL_MULTIPLY, m_verifierType);
        }
        {
                const tcu::ScopedLogSection section (m_testCtx.getLog(), "AfterResettingIndexedSeparateWithCommon", "After resetting indexed separate with common");
@@ -1435,13 +1439,13 @@ BlendEquationAdvancedCase::IterateResult BlendEquationAdvancedCase::iterate (voi
                for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
                        gl.glBlendEquationSeparatei(ndx, blendEquations[ndx % DE_LENGTH_OF_ARRAY(blendEquations)], blendEquations[(ndx + 1) % DE_LENGTH_OF_ARRAY(blendEquations)]);
 
-               gl.glBlendEquation(GL_LIGHTEN_KHR);
+               gl.glBlendEquation(GL_LIGHTEN);
 
                for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
-                       verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, GL_LIGHTEN_KHR, m_verifierType);
+                       verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, GL_LIGHTEN, m_verifierType);
 
                for (int ndx = 0; ndx < maxDrawBuffers; ++ndx)
-                       verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, GL_LIGHTEN_KHR, m_verifierType);
+                       verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, GL_LIGHTEN, m_verifierType);
        }
 
        result.setTestContextResult(m_testCtx);
@@ -1485,13 +1489,13 @@ void IndexedStateQueryTests::init (void)
        FOR_EACH_VERIFIER(new MinValueIndexed3Case              (m_context, (std::string() + "max_compute_work_group_count_" + verifierSuffix).c_str(),         "Test MAX_COMPUTE_WORK_GROUP_COUNT",    GL_MAX_COMPUTE_WORK_GROUP_COUNT,        tcu::IVec3(65535,65535,65535),  verifier))
        FOR_EACH_VERIFIER(new MinValueIndexed3Case              (m_context, (std::string() + "max_compute_work_group_size_" + verifierSuffix).c_str(),          "Test MAX_COMPUTE_WORK_GROUP_SIZE",             GL_MAX_COMPUTE_WORK_GROUP_SIZE,         tcu::IVec3(128, 128, 64),               verifier))
 
-       FOR_EACH_VERIFIER(new BufferBindingCase                 (m_context, (std::string() + "atomic_counter_buffer_binding_" + verifierSuffix).c_str(),        "Test ATOMIC_COUNTER_BUFFER_BINDING",   GL_ATOMIC_COUNTER_BUFFER_BINDING,       GL_ATOMIC_COUNTER_BUFFER,       GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, verifier))
+       FOR_EACH_VERIFIER(new BufferBindingCase                 (m_context, (std::string() + "atomic_counter_buffer_binding_" + verifierSuffix).c_str(),        "Test ATOMIC_COUNTER_BUFFER_BINDING",   GL_ATOMIC_COUNTER_BUFFER_BINDING,       GL_ATOMIC_COUNTER_BUFFER,       GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS,  verifier))
        FOR_EACH_VERIFIER(new BufferStartCase                   (m_context, (std::string() + "atomic_counter_buffer_start_" + verifierSuffix).c_str(),          "Test ATOMIC_COUNTER_BUFFER_START",             GL_ATOMIC_COUNTER_BUFFER_START,         GL_ATOMIC_COUNTER_BUFFER,       GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS,  verifier))
        FOR_EACH_VERIFIER(new BufferSizeCase                    (m_context, (std::string() + "atomic_counter_buffer_size_" + verifierSuffix).c_str(),           "Test ATOMIC_COUNTER_BUFFER_SIZE",              GL_ATOMIC_COUNTER_BUFFER_SIZE,          GL_ATOMIC_COUNTER_BUFFER,       GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS,  verifier))
 
-       FOR_EACH_VERIFIER(new BufferBindingCase                 (m_context, (std::string() + "shader_storager_buffer_binding_" + verifierSuffix).c_str(),       "Test SHADER_STORAGE_BUFFER_BINDING",   GL_SHADER_STORAGE_BUFFER_BINDING,       GL_SHADER_STORAGE_BUFFER,       GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS,  verifier))
-       FOR_EACH_VERIFIER(new BufferStartCase                   (m_context, (std::string() + "shader_storager_buffer_start_" + verifierSuffix).c_str(),         "Test SHADER_STORAGE_BUFFER_START",             GL_SHADER_STORAGE_BUFFER_START,         GL_SHADER_STORAGE_BUFFER,       GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS,  verifier))
-       FOR_EACH_VERIFIER(new BufferSizeCase                    (m_context, (std::string() + "shader_storager_buffer_size_" + verifierSuffix).c_str(),          "Test SHADER_STORAGE_BUFFER_SIZE",              GL_SHADER_STORAGE_BUFFER_SIZE,          GL_SHADER_STORAGE_BUFFER,       GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS,  verifier))
+       FOR_EACH_VERIFIER(new BufferBindingCase                 (m_context, (std::string() + "shader_storage_buffer_binding_" + verifierSuffix).c_str(),        "Test SHADER_STORAGE_BUFFER_BINDING",   GL_SHADER_STORAGE_BUFFER_BINDING,       GL_SHADER_STORAGE_BUFFER,       GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS,  verifier))
+       FOR_EACH_VERIFIER(new BufferStartCase                   (m_context, (std::string() + "shader_storage_buffer_start_" + verifierSuffix).c_str(),          "Test SHADER_STORAGE_BUFFER_START",             GL_SHADER_STORAGE_BUFFER_START,         GL_SHADER_STORAGE_BUFFER,       GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS,  verifier))
+       FOR_EACH_VERIFIER(new BufferSizeCase                    (m_context, (std::string() + "shader_storage_buffer_size_" + verifierSuffix).c_str(),           "Test SHADER_STORAGE_BUFFER_SIZE",              GL_SHADER_STORAGE_BUFFER_SIZE,          GL_SHADER_STORAGE_BUFFER,       GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS,  verifier))
 
        FOR_EACH_VERIFIER(new ImageBindingNameCase              (m_context, (std::string() + "image_binding_name_" + verifierSuffix).c_str(),                           "Test IMAGE_BINDING_NAME",                              verifier))
        FOR_EACH_VERIFIER(new ImageBindingLevelCase             (m_context, (std::string() + "image_binding_level_" + verifierSuffix).c_str(),                          "Test IMAGE_BINDING_LEVEL",                             verifier))
index 775b7d1..bcb3854 100644 (file)
@@ -46,6 +46,10 @@ namespace
 
 using namespace gls::StateQueryUtil;
 
+const int MAX_FRAG_ATOMIC_COUNTER_BUFFERS_GLES32       = 1;
+const int MAX_FRAG_ATOMIC_COUNTERS_GLES32                      = 8;
+const int MAX_FRAG_SHADER_STORAGE_BLOCKS_GLES32                = 4;
+
 static const char* getVerifierSuffix (QueryType type)
 {
        switch (type)
@@ -115,10 +119,15 @@ TexBindingCase::TexBindingCase (Context& context, const char* name, const char*
 
 void TexBindingCase::init (void)
 {
+       if (contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+               return;
+
        if (m_texTarget == GL_TEXTURE_2D_MULTISAMPLE_ARRAY && !m_context.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
                throw tcu::NotSupportedError("Test requires OES_texture_storage_multisample_2d_array extension");
        if (m_texTarget == GL_TEXTURE_CUBE_MAP_ARRAY && !m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_cube_map_array"))
                throw tcu::NotSupportedError("Test requires GL_EXT_texture_cube_map_array extension");
+       if (m_texTarget == GL_TEXTURE_BUFFER && !m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_buffer"))
+               throw tcu::NotSupportedError("Test requires GL_EXT_texture_buffer extension");
 }
 
 TexBindingCase::IterateResult TexBindingCase::iterate (void)
@@ -165,12 +174,14 @@ class MinimumValueCase : public TestCase
 {
 public:
                                                MinimumValueCase        (Context& context, const char* name, const char* desc, glw::GLenum target, int minValue, QueryType verifierType);
+                                               MinimumValueCase        (Context& context, const char* name, const char* desc, glw::GLenum target, int minValue, QueryType verifierType, glu::ApiType minVersion);
 private:
        IterateResult           iterate                         (void);
 
        const glw::GLenum       m_target;
        const int                       m_minValue;
        const QueryType         m_verifierType;
+       const glu::ApiType      m_minimumVersion;
 };
 
 MinimumValueCase::MinimumValueCase (Context& context, const char* name, const char* desc, glw::GLenum target, int minValue, QueryType verifierType)
@@ -178,16 +189,36 @@ MinimumValueCase::MinimumValueCase (Context& context, const char* name, const ch
        , m_target                      (target)
        , m_minValue            (minValue)
        , m_verifierType        (verifierType)
+       , m_minimumVersion      (glu::ApiType::es(3, 1))
+{
+}
+
+MinimumValueCase::MinimumValueCase (Context& context, const char* name, const char* desc, glw::GLenum target, int minValue, QueryType verifierType, glu::ApiType minVersion)
+       : TestCase                      (context, name, desc)
+       , m_target                      (target)
+       , m_minValue            (minValue)
+       , m_verifierType        (verifierType)
+       , m_minimumVersion      (minVersion)
 {
 }
 
 MinimumValueCase::IterateResult MinimumValueCase::iterate (void)
 {
+       TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(m_context.getRenderContext().getType(), m_minimumVersion), "Test not supported in this context version.");
+
        glu::CallLogWrapper             gl              (m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
        tcu::ResultCollector    result  (m_testCtx.getLog(), " // ERROR: ");
 
+       // \note: In GL ES 3.2, the following targets have different limits as in 3.1
+       const int                               value   = contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2))
+                                                                       ? (m_target == GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS   ? MAX_FRAG_ATOMIC_COUNTER_BUFFERS_GLES32        // 1
+                                                                       : m_target == GL_MAX_FRAGMENT_ATOMIC_COUNTERS                   ? MAX_FRAG_ATOMIC_COUNTERS_GLES32                       // 8
+                                                                       : m_target == GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS             ? MAX_FRAG_SHADER_STORAGE_BLOCKS_GLES32         // 4
+                                                                       : m_minValue)
+                                                                       : m_minValue;
+
        gl.enableLogging(true);
-       verifyStateIntegerMin(result, gl, m_target, m_minValue, m_verifierType);
+       verifyStateIntegerMin(result, gl, m_target, value, m_verifierType);
 
        result.setTestContextResult(m_testCtx);
        return STOP;
@@ -197,12 +228,14 @@ class AlignmentCase : public TestCase
 {
 public:
                                                AlignmentCase   (Context& context, const char* name, const char* desc, glw::GLenum target, int minValue, QueryType verifierType);
+                                               AlignmentCase   (Context& context, const char* name, const char* desc, glw::GLenum target, int minValue, QueryType verifierType, glu::ApiType minVersion);
 private:
        IterateResult           iterate                 (void);
 
        const glw::GLenum       m_target;
        const int                       m_minValue;
        const QueryType         m_verifierType;
+       const glu::ApiType      m_minimumVersion;
 };
 
 AlignmentCase::AlignmentCase (Context& context, const char* name, const char* desc, glw::GLenum target, int minValue, QueryType verifierType)
@@ -210,11 +243,23 @@ AlignmentCase::AlignmentCase (Context& context, const char* name, const char* de
        , m_target                      (target)
        , m_minValue            (minValue)
        , m_verifierType        (verifierType)
+       , m_minimumVersion      (glu::ApiType::es(3, 1))
+{
+}
+
+AlignmentCase::AlignmentCase (Context& context, const char* name, const char* desc, glw::GLenum target, int minValue, QueryType verifierType, glu::ApiType minVersion)
+       : TestCase                      (context, name, desc)
+       , m_target                      (target)
+       , m_minValue            (minValue)
+       , m_verifierType        (verifierType)
+       , m_minimumVersion      (minVersion)
 {
 }
 
 AlignmentCase::IterateResult AlignmentCase::iterate (void)
 {
+       TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(m_context.getRenderContext().getType(), m_minimumVersion), "Test not supported in this context.");
+
        glu::CallLogWrapper             gl              (m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
        tcu::ResultCollector    result  (m_testCtx.getLog(), " // ERROR: ");
 
@@ -433,26 +478,52 @@ LegacyVectorLimitCase::IterateResult LegacyVectorLimitCase::iterate (void)
        return STOP;
 }
 
-class CombinedComputeUniformComponentsCase : public TestCase
+class CombinedUniformComponentsCase : public TestCase
 {
 public:
-                                               CombinedComputeUniformComponentsCase    (Context& context, const char* name, const char* desc, QueryType verifierType);
+                                               CombinedUniformComponentsCase   (Context& context, const char* name, const char* desc, glw::GLenum target, QueryType verifierType);
+                                               CombinedUniformComponentsCase   (Context& context, const char* name, const char* desc, glw::GLenum target, QueryType verifierType, glu::ApiType minVersion);
 private:
        IterateResult           iterate                                                                 (void);
-
+       const glw::GLenum       m_target;
        const QueryType         m_verifierType;
+       const glu::ApiType      m_minimumVersion;
 };
 
-CombinedComputeUniformComponentsCase::CombinedComputeUniformComponentsCase (Context& context, const char* name, const char* desc, QueryType verifierType)
+CombinedUniformComponentsCase::CombinedUniformComponentsCase (Context& context, const char* name, const char* desc, glw::GLenum target, QueryType verifierType)
        : TestCase                      (context, name, desc)
+       , m_target                      (target)
        , m_verifierType        (verifierType)
+       , m_minimumVersion      (glu::ApiType::es(3, 1))
 {
 }
 
-CombinedComputeUniformComponentsCase::IterateResult CombinedComputeUniformComponentsCase::iterate (void)
+CombinedUniformComponentsCase::CombinedUniformComponentsCase (Context& context, const char* name, const char* desc, glw::GLenum target, QueryType verifierType, glu::ApiType minVersion)
+       : TestCase                      (context, name, desc)
+       , m_target                      (target)
+       , m_verifierType        (verifierType)
+       , m_minimumVersion      (minVersion)
 {
-       glu::CallLogWrapper             gl              (m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
-       tcu::ResultCollector    result  (m_testCtx.getLog(), " // ERROR: ");
+}
+
+CombinedUniformComponentsCase::IterateResult CombinedUniformComponentsCase::iterate (void)
+{
+       TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(m_context.getRenderContext().getType(), m_minimumVersion), "Test not supported in this context.");
+
+       glu::CallLogWrapper             gl                                                      (m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
+       tcu::ResultCollector    result                                          (m_testCtx.getLog(), " // ERROR: ");
+
+       const glw::GLenum               maxUniformBlocksEnum            = (m_target == GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS) ? GL_MAX_COMPUTE_UNIFORM_BLOCKS
+                                                                                                               : (m_target == GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS) ? GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS
+                                                                                                               : (m_target == GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS) ? GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS
+                                                                                                               : (m_target == GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS) ? GL_MAX_GEOMETRY_UNIFORM_BLOCKS
+                                                                                                               : -1;
+
+       const glw::GLenum               maxUniformComponentsEnum        = (m_target == GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS) ? GL_MAX_COMPUTE_UNIFORM_COMPONENTS
+                                                                                                               : (m_target == GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS) ? GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS
+                                                                                                               : (m_target == GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS) ? GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS
+                                                                                                               : (m_target == GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS) ? GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+                                                                                                               : -1;
 
        gl.enableLogging(true);
 
@@ -461,7 +532,7 @@ CombinedComputeUniformComponentsCase::IterateResult CombinedComputeUniformCompon
                                                << tcu::TestLog::EndMessage;
 
        StateQueryMemoryWriteGuard<glw::GLint> maxUniformBlocks;
-       gl.glGetIntegerv(GL_MAX_COMPUTE_UNIFORM_BLOCKS, &maxUniformBlocks);
+       gl.glGetIntegerv(maxUniformBlocksEnum, &maxUniformBlocks);
        GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "glGetIntegerv");
 
        StateQueryMemoryWriteGuard<glw::GLint> maxUniformBlockSize;
@@ -469,11 +540,11 @@ CombinedComputeUniformComponentsCase::IterateResult CombinedComputeUniformCompon
        GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "glGetIntegerv");
 
        StateQueryMemoryWriteGuard<glw::GLint> maxUniformComponents;
-       gl.glGetIntegerv(GL_MAX_COMPUTE_UNIFORM_COMPONENTS, &maxUniformComponents);
+       gl.glGetIntegerv(maxUniformComponentsEnum, &maxUniformComponents);
        GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "glGetIntegerv");
 
        if (maxUniformBlocks.verifyValidity(result) && maxUniformBlockSize.verifyValidity(result) && maxUniformComponents.verifyValidity(result))
-               verifyStateIntegerMin(result, gl, GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS, ((int)maxUniformBlocks) * ((int)maxUniformBlockSize) / 4 + (int)maxUniformComponents, m_verifierType);
+               verifyStateIntegerMin(result, gl, m_target, ((int)maxUniformBlocks) * ((int)maxUniformBlockSize) / 4 + (int)maxUniformComponents, m_verifierType);
 
        result.setTestContextResult(m_testCtx);
        return STOP;
@@ -543,23 +614,30 @@ MaxUniformBufferBindingsCase::IterateResult MaxUniformBufferBindingsCase::iterat
 
        gl.enableLogging(true);
 
-       if (m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader"))
+       if (contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
        {
-               m_testCtx.getLog()      << tcu::TestLog::Message
-                                                       << "GL_EXT_tessellation_shader increases the minimum value of GL_MAX_UNIFORM_BUFFER_BINDINGS to 72"
-                                                       << tcu::TestLog::EndMessage;
                minMax = 72;
        }
-       else if (m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader"))
-       {
-               m_testCtx.getLog()      << tcu::TestLog::Message
-                                                       << "GL_EXT_geometry_shader increases the minimum value of GL_MAX_UNIFORM_BUFFER_BINDINGS to 48"
-                                                       << tcu::TestLog::EndMessage;
-               minMax = 48;
-       }
        else
        {
-               minMax = 36;
+               if (m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader"))
+               {
+                       m_testCtx.getLog()      << tcu::TestLog::Message
+                                                               << "GL_EXT_tessellation_shader increases the minimum value of GL_MAX_UNIFORM_BUFFER_BINDINGS to 72"
+                                                               << tcu::TestLog::EndMessage;
+                       minMax = 72;
+               }
+               else if (m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader"))
+               {
+                       m_testCtx.getLog()      << tcu::TestLog::Message
+                                                               << "GL_EXT_geometry_shader increases the minimum value of GL_MAX_UNIFORM_BUFFER_BINDINGS to 48"
+                                                               << tcu::TestLog::EndMessage;
+                       minMax = 48;
+               }
+               else
+               {
+                       minMax = 36;
+               }
        }
 
        // range [0, inf)
@@ -593,23 +671,30 @@ MaxCombinedUniformBlocksCase::IterateResult MaxCombinedUniformBlocksCase::iterat
 
        gl.enableLogging(true);
 
-       if (m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader"))
+       if (contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
        {
-               m_testCtx.getLog()      << tcu::TestLog::Message
-                                                       << "GL_EXT_tessellation_shader increases the minimum value of GL_MAX_COMBINED_UNIFORM_BLOCKS to 60"
-                                                       << tcu::TestLog::EndMessage;
                minMax = 60;
        }
-       else if (m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader"))
-       {
-               m_testCtx.getLog()      << tcu::TestLog::Message
-                                                       << "GL_EXT_geometry_shader increases the minimum value of GL_MAX_COMBINED_UNIFORM_BLOCKS to 36"
-                                                       << tcu::TestLog::EndMessage;
-               minMax = 36;
-       }
        else
        {
-               minMax = 24;
+               if (m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader"))
+               {
+                       m_testCtx.getLog()      << tcu::TestLog::Message
+                                                               << "GL_EXT_tessellation_shader increases the minimum value of GL_MAX_COMBINED_UNIFORM_BLOCKS to 60"
+                                                               << tcu::TestLog::EndMessage;
+                       minMax = 60;
+               }
+               else if (m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader"))
+               {
+                       m_testCtx.getLog()      << tcu::TestLog::Message
+                                                               << "GL_EXT_geometry_shader increases the minimum value of GL_MAX_COMBINED_UNIFORM_BLOCKS to 36"
+                                                               << tcu::TestLog::EndMessage;
+                       minMax = 36;
+               }
+               else
+               {
+                       minMax = 24;
+               }
        }
 
        // range [0, inf)
@@ -642,24 +727,30 @@ MaxCombinedTexImageUnitsCase::IterateResult MaxCombinedTexImageUnitsCase::iterat
        int                                             minMax;
 
        gl.enableLogging(true);
-
-       if (m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader"))
+       if (contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)))
        {
-               m_testCtx.getLog()      << tcu::TestLog::Message
-                                                       << "GL_EXT_tessellation_shader increases the minimum value of GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS to 96"
-                                                       << tcu::TestLog::EndMessage;
                minMax = 96;
        }
-       else if (m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader"))
-       {
-               m_testCtx.getLog()      << tcu::TestLog::Message
-                                                       << "GL_EXT_geometry_shader increases the minimum value of GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS to 36"
-                                                       << tcu::TestLog::EndMessage;
-               minMax = 64;
-       }
        else
        {
-               minMax = 48;
+               if (m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader"))
+               {
+                       m_testCtx.getLog()      << tcu::TestLog::Message
+                                                               << "GL_EXT_tessellation_shader increases the minimum value of GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS to 96"
+                                                               << tcu::TestLog::EndMessage;
+                       minMax = 96;
+               }
+               else if (m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader"))
+               {
+                       m_testCtx.getLog()      << tcu::TestLog::Message
+                                                               << "GL_EXT_geometry_shader increases the minimum value of GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS to 36"
+                                                               << tcu::TestLog::EndMessage;
+                       minMax = 64;
+               }
+               else
+               {
+                       minMax = 48;
+               }
        }
 
        // range [0, inf)
@@ -683,7 +774,7 @@ IntegerStateQueryTests::~IntegerStateQueryTests (void)
 void IntegerStateQueryTests::init (void)
 {
        // Verifiers
-       const QueryType verifiers[] = { QUERY_BOOLEAN, QUERY_INTEGER, QUERY_INTEGER64, QUERY_FLOAT };
+       const QueryType verifiers[]     = { QUERY_BOOLEAN, QUERY_INTEGER, QUERY_INTEGER64, QUERY_FLOAT };
 
 #define FOR_EACH_VERIFIER(X) \
        for (int verifierNdx = 0; verifierNdx < DE_LENGTH_OF_ARRAY(verifiers); ++verifierNdx)   \
@@ -700,6 +791,7 @@ void IntegerStateQueryTests::init (void)
        FOR_EACH_VERIFIER(new TexBindingCase(m_context,         (std::string() + "texture_binding_2d_multisample_" + verifierSuffix).c_str(),                   "Test TEXTURE_BINDING_2D_MULTISAMPLE",                  GL_TEXTURE_2D_MULTISAMPLE,                      GL_TEXTURE_BINDING_2D_MULTISAMPLE,                      verifier))
        FOR_EACH_VERIFIER(new TexBindingCase(m_context,         (std::string() + "texture_binding_2d_multisample_array_" + verifierSuffix).c_str(),             "Test TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY",    GL_TEXTURE_2D_MULTISAMPLE_ARRAY,        GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY,        verifier))
        FOR_EACH_VERIFIER(new TexBindingCase(m_context,         (std::string() + "texture_binding_cube_map_array_" + verifierSuffix).c_str(),                   "Test TEXTURE_BINDING_CUBE_MAP_ARRAY",                  GL_TEXTURE_CUBE_MAP_ARRAY,                      GL_TEXTURE_BINDING_CUBE_MAP_ARRAY,                      verifier))
+       FOR_EACH_VERIFIER(new TexBindingCase(m_context,         (std::string() + "texture_binding_buffer_" + verifierSuffix).c_str(),                                   "Test TEXTURE_BINDING_BUFFER",                                  GL_TEXTURE_BUFFER,                                      GL_TEXTURE_BINDING_BUFFER,                                      verifier))
 
        FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_vertex_attrib_relative_offset_" + verifierSuffix).c_str(),                "Test MAX_VERTEX_ATTRIB_RELATIVE_OFFSET",               GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET,   2047,   verifier))
        FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_vertex_attrib_bindings_" + verifierSuffix).c_str(),                               "Test MAX_VERTEX_ATTRIB_BINDINGS",                              GL_MAX_VERTEX_ATTRIB_BINDINGS,                  16,             verifier))
@@ -756,10 +848,10 @@ void IntegerStateQueryTests::init (void)
        FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_combined_shader_storage_blocks_" + verifierSuffix).c_str(),               "Test MAX_COMBINED_SHADER_STORAGE_BLOCKS",              GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS,          4,              verifier))
        FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_combined_shader_output_resources_" + verifierSuffix).c_str(),             "Test MAX_COMBINED_SHADER_OUTPUT_RESOURCES",    GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES,        4,              verifier))
 
-       FOR_EACH_VERIFIER(new MaxUniformBufferBindingsCase                      (m_context,     (std::string() + "max_uniform_buffer_bindings_" + verifierSuffix).c_str(),                              "Test MAX_UNIFORM_BUFFER_BINDINGS",                             verifier))
-       FOR_EACH_VERIFIER(new MaxCombinedUniformBlocksCase                      (m_context,     (std::string() + "max_combined_uniform_blocks_" + verifierSuffix).c_str(),                              "Test MAX_COMBINED_UNIFORM_BLOCKS",                             verifier))
-       FOR_EACH_VERIFIER(new MaxCombinedTexImageUnitsCase                      (m_context,     (std::string() + "max_combined_texture_image_units_" + verifierSuffix).c_str(),                 "Test MAX_COMBINED_TEXTURE_IMAGE_UNITS",                verifier))
-       FOR_EACH_VERIFIER(new CombinedComputeUniformComponentsCase      (m_context,     (std::string() + "max_combined_compute_uniform_components_" + verifierSuffix).c_str(), "Test MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS",  verifier))
+       FOR_EACH_VERIFIER(new MaxUniformBufferBindingsCase      (m_context,     (std::string() + "max_uniform_buffer_bindings_" + verifierSuffix).c_str(),                              "Test MAX_UNIFORM_BUFFER_BINDINGS",                             verifier))
+       FOR_EACH_VERIFIER(new MaxCombinedUniformBlocksCase      (m_context,     (std::string() + "max_combined_uniform_blocks_" + verifierSuffix).c_str(),                              "Test MAX_COMBINED_UNIFORM_BLOCKS",                             verifier))
+       FOR_EACH_VERIFIER(new MaxCombinedTexImageUnitsCase      (m_context,     (std::string() + "max_combined_texture_image_units_" + verifierSuffix).c_str(),                 "Test MAX_COMBINED_TEXTURE_IMAGE_UNITS",                verifier))
+       FOR_EACH_VERIFIER(new CombinedUniformComponentsCase     (m_context,     (std::string() + "max_combined_compute_uniform_components_" + verifierSuffix).c_str(),  "Test MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS", GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS, verifier))
 
        FOR_EACH_VERIFIER(new LegacyVectorLimitCase(m_context,  (std::string() + "max_vertex_uniform_vectors_" + verifierSuffix).c_str(),                       "Test MAX_VERTEX_UNIFORM_VECTORS",                              GL_MAX_VERTEX_UNIFORM_VECTORS,                  GL_MAX_VERTEX_UNIFORM_COMPONENTS,       verifier))
        FOR_EACH_VERIFIER(new LegacyVectorLimitCase(m_context,  (std::string() + "max_fragment_uniform_vectors_" + verifierSuffix).c_str(),                     "Test MAX_FRAGMENT_UNIFORM_VECTORS",                    GL_MAX_FRAGMENT_UNIFORM_VECTORS,                GL_MAX_FRAGMENT_UNIFORM_COMPONENTS,     verifier))
@@ -767,6 +859,68 @@ void IntegerStateQueryTests::init (void)
        FOR_EACH_VERIFIER(new TextureGatherLimitCase(m_context, (std::string() + "min_program_texture_gather_offset_" + verifierSuffix).c_str(),        "Test MIN_PROGRAM_TEXTURE_GATHER_OFFSET",               false,          verifier))
        FOR_EACH_VERIFIER(new TextureGatherLimitCase(m_context, (std::string() + "max_program_texture_gather_offset_" + verifierSuffix).c_str(),        "Test MAX_PROGRAM_TEXTURE_GATHER_OFFSET",               true,           verifier))
 
+       // GL ES 3.2 tests
+       FOR_EACH_VERIFIER(new MinimumValueCase  (m_context,     (std::string() + "max_framebuffer_layers_" + verifierSuffix).c_str(),                                           "Test MAX_FRAMEBUFFER_LAYERS",                                          GL_MAX_FRAMEBUFFER_LAYERS,                                              256,    verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase  (m_context,     (std::string() + "fragment_interpolation_offset_bits_" + verifierSuffix).c_str(),                       "Test FRAGMENT_INTERPOLATION_OFFSET_BITS",                      GL_FRAGMENT_INTERPOLATION_OFFSET_BITS,                  4,              verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase  (m_context,     (std::string() + "max_texture_buffer_size_" + verifierSuffix).c_str(),                                          "Test MAX_TEXTURE_BUFFER_SIZE",                                         GL_MAX_TEXTURE_BUFFER_SIZE,                                             65536,  verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new AlignmentCase             (m_context,     (std::string() + "texture_buffer_offset_alignment_" + verifierSuffix).c_str(),                          "Test TEXTURE_BUFFER_OFFSET_ALIGNMENT",                         GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT,                             256,    verifier,       glu::ApiType::es(3, 2)))
+
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_tess_gen_level_" + verifierSuffix).c_str(),                                                       "Test MAX_TESS_GEN_LEVEL",                                                      GL_MAX_TESS_GEN_LEVEL,                                                  64,             verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_patch_vertices_" + verifierSuffix).c_str(),                                                       "Test MAX_PATCH_VERTICES",                                                      GL_MAX_PATCH_VERTICES,                                                  32,             verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_tess_patch_components_" + verifierSuffix).c_str(),                                        "Test MAX_TESS_PATCH_COMPONENTS",                                       GL_MAX_TESS_PATCH_COMPONENTS,                                   120,    verifier,       glu::ApiType::es(3, 2)))
+
+       // tess control
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_tess_control_uniform_components_" + verifierSuffix).c_str(),                      "Test MAX_TESS_CONTROL_UNIFORM_COMPONENTS",                     GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS,                 1024,   verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_tess_control_texture_image_units_" + verifierSuffix).c_str(),                     "Test MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS",            GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS,                16,             verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_tess_control_output_components_" + verifierSuffix).c_str(),                       "Test MAX_TESS_CONTROL_OUTPUT_COMPONENTS",                      GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS,                  64,             verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_tess_control_total_output_components_" + verifierSuffix).c_str(),         "Test MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS",        GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS,    4096,   verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_tess_control_input_components_" + verifierSuffix).c_str(),                        "Test MAX_TESS_CONTROL_INPUT_COMPONENTS",                       GL_MAX_TESS_CONTROL_INPUT_COMPONENTS,                   64,             verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_tess_control_uniform_blocks_" + verifierSuffix).c_str(),                          "Test MAX_TESS_CONTROL_UNIFORM_BLOCKS",                         GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS,                             12,             verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_tess_control_atomic_counter_buffers_" + verifierSuffix).c_str(),          "Test MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS",         GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS,             0,              verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_tess_control_atomic_counters_" + verifierSuffix).c_str(),                         "Test MAX_TESS_CONTROL_ATOMIC_COUNTERS",                        GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS,                    0,              verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_tess_control_shader_storage_blocks_" + verifierSuffix).c_str(),           "Test MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS",          GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS,              0,              verifier,       glu::ApiType::es(3, 2)))
+
+       // tess evaluation
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_tess_evaluation_uniform_components_" + verifierSuffix).c_str(),           "Test MAX_TESS_EVALUATION_UNIFORM_COMPONENTS",          GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS,              1024,   verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_tess_evaluation_texture_image_units_" + verifierSuffix).c_str(),          "Test MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS",         GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS,             16,             verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_tess_evaluation_output_components_" + verifierSuffix).c_str(),            "Test MAX_TESS_EVALUATION_OUTPUT_COMPONENTS",           GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS,               64,             verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_tess_evaluation_input_components_" + verifierSuffix).c_str(),                     "Test MAX_TESS_EVALUATION_INPUT_COMPONENTS",            GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS,                64,             verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_tess_evaluation_uniform_blocks_" + verifierSuffix).c_str(),                       "Test MAX_TESS_EVALUATION_UNIFORM_BLOCKS",                      GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS,                  12,             verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_tess_evaluation_atomic_counter_buffers_" + verifierSuffix).c_str(),       "Test MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS",      GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS,  0,              verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_tess_evaluation_atomic_counters_" + verifierSuffix).c_str(),                      "Test MAX_TESS_EVALUATION_ATOMIC_COUNTERS",                     GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS,                 0,              verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_tess_evaluation_shader_storage_blocks_" + verifierSuffix).c_str(),        "Test MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS",       GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS,   0,              verifier,       glu::ApiType::es(3, 2)))
+
+       // geometry
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_geometry_uniform_components_" + verifierSuffix).c_str(),                          "Test MAX_GEOMETRY_UNIFORM_COMPONENTS",                         GL_MAX_GEOMETRY_UNIFORM_COMPONENTS,                             1024,   verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_geometry_uniform_blocks_" + verifierSuffix).c_str(),                                      "Test MAX_GEOMETRY_UNIFORM_BLOCKS",                                     GL_MAX_GEOMETRY_UNIFORM_BLOCKS,                                 12,             verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_geometry_input_components_" + verifierSuffix).c_str(),                            "Test MAX_GEOMETRY_INPUT_COMPONENTS",                           GL_MAX_GEOMETRY_INPUT_COMPONENTS,                               64,             verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_geometry_output_components_" + verifierSuffix).c_str(),                           "Test MAX_GEOMETRY_OUTPUT_COMPONENTS",                          GL_MAX_GEOMETRY_OUTPUT_COMPONENTS,                              64,             verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_geometry_output_vertices_" + verifierSuffix).c_str(),                                     "Test MAX_GEOMETRY_OUTPUT_VERTICES",                            GL_MAX_GEOMETRY_OUTPUT_VERTICES,                                256,    verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_geometry_total_output_components_" + verifierSuffix).c_str(),                     "Test MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS",            GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS,                1024,   verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_geometry_texture_image_units_" + verifierSuffix).c_str(),                         "Test MAX_GEOMETRY_TEXTURE_IMAGE_UNITS",                        GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS,                    16,             verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_geometry_shader_invocations_" + verifierSuffix).c_str(),                          "Test MAX_GEOMETRY_SHADER_INVOCATIONS",                         GL_MAX_GEOMETRY_SHADER_INVOCATIONS,                             32,             verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_geometry_atomic_counter_buffers_" + verifierSuffix).c_str(),                      "Test MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS",                     GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS,                 0,              verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_geometry_atomic_counters_" + verifierSuffix).c_str(),                                     "Test MAX_GEOMETRY_ATOMIC_COUNTERS",                            GL_MAX_GEOMETRY_ATOMIC_COUNTERS,                                0,              verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_geometry_shader_storage_blocks_" + verifierSuffix).c_str(),                       "Test MAX_GEOMETRY_SHADER_STORAGE_BLOCKS",                      GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS,                  0,              verifier,       glu::ApiType::es(3, 2)))
+
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_tess_control_image_uniforms_" + verifierSuffix).c_str(),                          "Test MAX_TESS_CONTROL_IMAGE_UNIFORMS",                         GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS,                             0,              verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_tess_evaluation_image_uniforms_" + verifierSuffix).c_str(),                       "Test MAX_TESS_EVALUATION_IMAGE_UNIFORMS",                      GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS,                  0,              verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_geometry_image_uniforms_" + verifierSuffix).c_str(),                                      "Test MAX_GEOMETRY_IMAGE_UNIFORMS",                                     GL_MAX_GEOMETRY_IMAGE_UNIFORMS,                                 0,              verifier,       glu::ApiType::es(3, 2)))
+
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "debug_logged_messages_" + verifierSuffix).c_str(),                                            "Test DEBUG_LOGGED_MESSAGES",                                           GL_DEBUG_LOGGED_MESSAGES,                                               0,              verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "debug_next_logged_message_length_" + verifierSuffix).c_str(),                         "Test DEBUG_NEXT_LOGGED_MESSAGE_LENGTH",                        GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH,                    0,              verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "debug_group_stack_depth_" + verifierSuffix).c_str(),                                          "Test DEBUG_GROUP_STACK_DEPTH",                                         GL_DEBUG_GROUP_STACK_DEPTH,                                             0,              verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_debug_message_length_" + verifierSuffix).c_str(),                                         "Test MAX_DEBUG_MESSAGE_LENGTH",                                        GL_MAX_DEBUG_MESSAGE_LENGTH,                                    1,              verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_debug_logged_messages_" + verifierSuffix).c_str(),                                        "Test MAX_DEBUG_LOGGED_MESSAGES",                                       GL_MAX_DEBUG_LOGGED_MESSAGES,                                   1,              verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_debug_group_stack_depth_" + verifierSuffix).c_str(),                                      "Test MAX_DEBUG_GROUP_STACK_DEPTH",                                     GL_MAX_DEBUG_GROUP_STACK_DEPTH,                                 64,             verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "max_label_length_" + verifierSuffix).c_str(),                                                         "Test MAX_LABEL_LENGTH",                                                        GL_MAX_LABEL_LENGTH,                                                    256,    verifier,       glu::ApiType::es(3, 2)))
+
+       FOR_EACH_VERIFIER(new MinimumValueCase(m_context,       (std::string() + "texture_buffer_binding_" + verifierSuffix).c_str(),                                           "Test TEXTURE_BUFFER_BINDING",                                          GL_TEXTURE_BUFFER_BINDING,                                              0,              verifier,       glu::ApiType::es(3, 2)))
+
+       FOR_EACH_VERIFIER(new CombinedUniformComponentsCase     (m_context,     (std::string() + "max_combined_tess_control_uniform_components_" + verifierSuffix).c_str(),             "Test MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS",    GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS,        verifier,       glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new CombinedUniformComponentsCase     (m_context,     (std::string() + "max_combined_tess_evaluation_uniform_components_" + verifierSuffix).c_str(),  "Test MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS", GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS, verifier,   glu::ApiType::es(3, 2)))
+       FOR_EACH_VERIFIER(new CombinedUniformComponentsCase     (m_context,     (std::string() + "max_combined_geometry_uniform_components_" + verifierSuffix).c_str(),                 "Test MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS",                GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS,            verifier,       glu::ApiType::es(3, 2)))
+
 #undef FOR_EACH_VERIFIER
 }
 
index d91f84d..55b6e6a 100644 (file)
@@ -71,23 +71,38 @@ FormatSamplesCase::FormatSamplesCase (Context& ctx, const char* name, const char
 
 void FormatSamplesCase::init (void)
 {
-       const bool isTextureTarget = (m_target == GL_TEXTURE_2D_MULTISAMPLE) ||
-                                                                (m_target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY);
+       const bool isTextureTarget      =       (m_target == GL_TEXTURE_2D_MULTISAMPLE) ||
+                                                                       (m_target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY);
+       const bool isES32                       =       contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
 
-       if (m_target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY && !m_context.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
-               throw tcu::NotSupportedError("Test requires OES_texture_storage_multisample_2d_array extension");
+       if (!isES32 && m_target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY && !m_context.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
+               TCU_THROW(NotSupportedError, "Test requires OES_texture_storage_multisample_2d_array extension or a context version equal or higher than 3.2");
 
        // stencil8 textures are not supported without GL_OES_texture_stencil8 extension
-       if (isTextureTarget && m_internalFormat == GL_STENCIL_INDEX8 && !m_context.getContextInfo().isExtensionSupported("GL_OES_texture_stencil8"))
-               throw tcu::NotSupportedError("Test requires GL_OES_texture_stencil8 extension");
+       if (!isES32 && isTextureTarget && m_internalFormat == GL_STENCIL_INDEX8 && !m_context.getContextInfo().isExtensionSupported("GL_OES_texture_stencil8"))
+               TCU_THROW(NotSupportedError, "Test requires GL_OES_texture_stencil8 extension or a context version equal or higher than 3.2");
 }
 
 FormatSamplesCase::IterateResult FormatSamplesCase::iterate (void)
 {
        const glw::Functions&   gl                              = m_context.getRenderContext().getFunctions();
+       bool                                    isFloatFormat   = false;
        bool                                    error                   = false;
        glw::GLint                              maxSamples              = 0;
        glw::GLint                              numSampleCounts = 0;
+       const bool                              isES32                  = contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+
+       if (!isES32)
+       {
+               if (m_internalFormat == GL_RGBA16F || m_internalFormat == GL_R32F || m_internalFormat == GL_RG32F || m_internalFormat == GL_RGBA32F || m_internalFormat == GL_R16F || m_internalFormat == GL_RG16F || m_internalFormat == GL_R11F_G11F_B10F)
+               {
+                       TCU_THROW(NotSupportedError, "The internal format is not supported in a context lower than 3.2");
+               }
+       }
+       else if (m_internalFormat == GL_RGBA16F || m_internalFormat == GL_R32F || m_internalFormat == GL_RG32F || m_internalFormat == GL_RGBA32F)
+       {
+               isFloatFormat = true;
+       }
 
        // Lowest limit
        {
@@ -113,10 +128,13 @@ FormatSamplesCase::IterateResult FormatSamplesCase::iterate (void)
 
                m_testCtx.getLog() << tcu::TestLog::Message << "GL_NUM_SAMPLE_COUNTS = " << numSampleCounts << tcu::TestLog::EndMessage;
 
-               if (numSampleCounts < 1)
+               if (!isFloatFormat)
                {
-                       m_testCtx.getLog() << tcu::TestLog::Message << "ERROR: Format MUST support some multisample configuration, got GL_NUM_SAMPLE_COUNTS = " << numSampleCounts << tcu::TestLog::EndMessage;
-                       error = true;
+                       if (numSampleCounts < 1)
+                       {
+                               m_testCtx.getLog() << tcu::TestLog::Message << "ERROR: Format MUST support some multisample configuration, got GL_NUM_SAMPLE_COUNTS = " << numSampleCounts << tcu::TestLog::EndMessage;
+                               error = true;
+                       }
                }
        }
 
@@ -125,7 +143,7 @@ FormatSamplesCase::IterateResult FormatSamplesCase::iterate (void)
                tcu::MessageBuilder             samplesMsg(&m_testCtx.getLog());
                std::vector<glw::GLint> samples;
 
-               if (numSampleCounts > 0)
+               if (numSampleCounts > 0 || isFloatFormat)
                {
                        samples.resize(numSampleCounts, -1);
 
@@ -169,10 +187,13 @@ FormatSamplesCase::IterateResult FormatSamplesCase::iterate (void)
                }
 
                // maxSamples must be supported
-               if (samples[0] < maxSamples)
+               if (!isFloatFormat)
                {
-                       m_testCtx.getLog() << tcu::TestLog::Message << "ERROR: MAX_*_SAMPLES must be supported." << tcu::TestLog::EndMessage;
-                       error = true;
+                       if (samples[0] < maxSamples)
+                       {
+                               m_testCtx.getLog() << tcu::TestLog::Message << "ERROR: MAX_*_SAMPLES must be supported." << tcu::TestLog::EndMessage;
+                               error = true;
+                       }
                }
        }
 
@@ -387,6 +408,15 @@ void InternalFormatQueryTests::init (void)
                { "rgba32i",                            GL_RGBA32I,                             FormatSamplesCase::FORMAT_INT                   },
                { "rgba32ui",                           GL_RGBA32UI,                    FormatSamplesCase::FORMAT_INT                   },
 
+               // float formats
+               { "r16f",                                       GL_R16F,                                FormatSamplesCase::FORMAT_COLOR                 },
+               { "rg16f",                                      GL_RG16F,                               FormatSamplesCase::FORMAT_COLOR                 },
+               { "rgba16f",                            GL_RGBA16F,                             FormatSamplesCase::FORMAT_COLOR                 },
+               { "r32f",                                       GL_R32F,                                FormatSamplesCase::FORMAT_INT                   },
+               { "rg32f",                                      GL_RG32F,                               FormatSamplesCase::FORMAT_INT                   },
+               { "rgba32f",                            GL_RGBA32F,                             FormatSamplesCase::FORMAT_INT                   },
+               { "r11f_g11f_b10f",                     GL_R11F_G11F_B10F,              FormatSamplesCase::FORMAT_COLOR                 },
+
                // depth renderable
                { "depth_component16",          GL_DEPTH_COMPONENT16,   FormatSamplesCase::FORMAT_DEPTH_STENCIL },
                { "depth_component24",          GL_DEPTH_COMPONENT24,   FormatSamplesCase::FORMAT_DEPTH_STENCIL },
diff --git a/modules/gles31/functional/es31fNegativeAtomicCounterTests.cpp b/modules/gles31/functional/es31fNegativeAtomicCounterTests.cpp
new file mode 100644 (file)
index 0000000..254a3fe
--- /dev/null
@@ -0,0 +1,247 @@
+/*-------------------------------------------------------------------------
+ * drawElements Quality Program OpenGL ES 3.1 Module
+ * -------------------------------------------------
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief Negative Atomic Counter Tests
+ *//*--------------------------------------------------------------------*/
+
+#include "es31fNegativeAtomicCounterTests.hpp"
+
+#include "deUniquePtr.hpp"
+
+#include "glwEnums.hpp"
+#include "gluShaderProgram.hpp"
+
+#include "tcuTestLog.hpp"
+
+namespace deqp
+{
+namespace gles31
+{
+namespace Functional
+{
+namespace NegativeTestShared
+{
+namespace
+{
+
+enum TestCase
+{
+       TESTCASE_LAYOUT_LARGE_BINDING = 0,
+       TESTCASE_LAYOUT_MEDIUMP_PRECISION,
+       TESTCASE_LAYOUT_LOWP_PRECISION,
+       TESTCASE_LAYOUT_BINDING_OFFSET_OVERLAP,
+       TESTCASE_LAYOUT_BINDING_OMITTED,
+       TESTCASE_STRUCT,
+       TESTCASE_BODY_WRITE,
+       TESTCASE_BODY_DECLARE,
+
+       TESTCASE_LAST
+};
+
+static const glu::ShaderType s_shaders[] =
+{
+       glu::SHADERTYPE_VERTEX,
+       glu::SHADERTYPE_FRAGMENT,
+       glu::SHADERTYPE_GEOMETRY,
+       glu::SHADERTYPE_TESSELLATION_CONTROL,
+       glu::SHADERTYPE_TESSELLATION_EVALUATION,
+       glu::SHADERTYPE_COMPUTE
+};
+
+std::string genShaderSource (NegativeTestContext& ctx, TestCase test, glu::ShaderType type)
+{
+       DE_ASSERT(test < TESTCASE_LAST && type < glu::SHADERTYPE_LAST);
+
+       glw::GLint maxBuffers = -1;
+       std::ostringstream shader;
+
+       ctx.glGetIntegerv(GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, &maxBuffers);
+
+       shader << getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES) << "\n";
+
+       switch (type)
+       {
+               case glu::SHADERTYPE_GEOMETRY:
+                       shader << "#extension GL_EXT_geometry_shader : enable\n";
+                       shader << "layout(max_vertices = 3) out;\n";
+                       break;
+
+               case glu::SHADERTYPE_TESSELLATION_CONTROL:
+               case glu::SHADERTYPE_TESSELLATION_EVALUATION:
+                       shader << "#extension GL_EXT_tessellation_shader : enable\n";
+                       break;
+
+               default:
+                       break;
+       }
+
+       switch (test)
+       {
+               case TESTCASE_LAYOUT_LARGE_BINDING:
+                       shader << "layout (binding = " << maxBuffers << ", offset = 0) uniform atomic_uint counter0;\n";
+                       break;
+
+               case TESTCASE_LAYOUT_MEDIUMP_PRECISION:
+                       shader << "layout (binding = 1, offset = 0) " << glu::getPrecisionName(glu::PRECISION_MEDIUMP) << " uniform atomic_uint counter0;\n";
+                       break;
+
+               case TESTCASE_LAYOUT_LOWP_PRECISION:
+                       shader << "layout (binding = 1, offset = 0) " << glu::getPrecisionName(glu::PRECISION_LOWP) << " uniform atomic_uint counter0;\n";
+                       break;
+
+               case TESTCASE_LAYOUT_BINDING_OFFSET_OVERLAP:
+                       shader << "layout (binding = 1, offset = 0) uniform atomic_uint counter0;\n"
+                                  << "layout (binding = 1, offset = 2) uniform atomic_uint counter1;\n";
+                       break;
+
+               case TESTCASE_LAYOUT_BINDING_OMITTED:
+                       shader << "layout (offset = 0) uniform atomic_uint counter0;\n";
+                       break;
+
+               case TESTCASE_STRUCT:
+                       shader << "struct\n"
+                                  << "{\n"
+                                  << "  int a;\n"
+                                  << "  atomic_uint counter;\n"
+                                  << "} S;\n";
+                       break;
+
+               case TESTCASE_BODY_WRITE:
+                       shader << "layout (binding = 1) uniform atomic_uint counter;\n";
+                       break;
+
+               default:
+                       break;
+       }
+
+       shader << "void main (void)\n"
+                                << "{\n";
+
+       switch (test)
+       {
+               case TESTCASE_BODY_WRITE:
+                       shader << "counter = 1;\n";
+                       break;
+
+               case TESTCASE_BODY_DECLARE:
+                       shader << "atomic_uint counter;\n";
+                       break;
+
+               default:
+                       break;
+       }
+
+       shader << "}\n";
+
+       return shader.str();
+}
+
+void iterateShaders (NegativeTestContext& ctx, TestCase testCase)
+{
+       tcu::TestLog& log = ctx.getLog();
+       for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(s_shaders); ndx++)
+       {
+               if (ctx.isShaderSupported(s_shaders[ndx]))
+               {
+                       ctx.beginSection(std::string("Verify shader: ") + glu::getShaderTypeName(s_shaders[ndx]));
+                       const glu::ShaderProgram program(ctx.getRenderContext(), glu::ProgramSources() << glu::ShaderSource(s_shaders[ndx], genShaderSource(ctx, testCase, s_shaders[ndx])));
+                       if (program.getShaderInfo(s_shaders[ndx]).compileOk)
+                       {
+                               log << program;
+                               log << tcu::TestLog::Message << "Expected program to fail, but compilation passed." << tcu::TestLog::EndMessage;
+                               ctx.fail("Shader was not expected to compile.");
+                       }
+                       ctx.endSection();
+               }
+       }
+}
+
+void atomic_max_counter_bindings (NegativeTestContext& ctx)
+{
+       ctx.beginSection("It is a compile-time error to bind an atomic counter with a binding value greater than or equal to gl_MaxAtomicCounterBindings.");
+       iterateShaders(ctx, TESTCASE_LAYOUT_LARGE_BINDING);
+       ctx.endSection();
+}
+
+void atomic_precision (NegativeTestContext& ctx)
+{
+       ctx.beginSection("It is an error to declare an atomic type with a lowp or mediump precision.");
+       iterateShaders(ctx, TESTCASE_LAYOUT_MEDIUMP_PRECISION);
+       iterateShaders(ctx, TESTCASE_LAYOUT_LOWP_PRECISION);
+       ctx.endSection();
+}
+
+void atomic_binding_offset_overlap (NegativeTestContext& ctx)
+{
+       ctx.beginSection("Atomic counters may not have overlapping offsets in the same binding.");
+       iterateShaders(ctx, TESTCASE_LAYOUT_BINDING_OFFSET_OVERLAP);
+       ctx.endSection();
+}
+
+void atomic_binding_omitted (NegativeTestContext& ctx)
+{
+       ctx.beginSection("Atomic counters must specify a binding point");
+       iterateShaders(ctx, TESTCASE_LAYOUT_BINDING_OMITTED);
+       ctx.endSection();
+}
+
+void atomic_struct (NegativeTestContext& ctx)
+{
+       ctx.beginSection("Structures may not have an atomic_uint variable.");
+       iterateShaders(ctx, TESTCASE_STRUCT);
+       ctx.endSection();
+}
+
+void atomic_body_write (NegativeTestContext& ctx)
+{
+       ctx.beginSection("An atomic_uint variable cannot be directly written to.");
+       iterateShaders(ctx, TESTCASE_BODY_WRITE);
+       ctx.endSection();
+}
+
+void atomic_body_declare (NegativeTestContext& ctx)
+{
+       ctx.beginSection("An atomic_uint variable cannot be declared in local scope");
+       iterateShaders(ctx, TESTCASE_BODY_DECLARE);
+       ctx.endSection();
+}
+
+} // anonymous
+
+std::vector<FunctionContainer> getNegativeAtomicCounterTestFunctions ()
+{
+       const FunctionContainer funcs[] =
+       {
+               {atomic_max_counter_bindings,           "atomic_max_counter_bindings",          "Invalid atomic counter buffer binding."        },
+               {atomic_precision,                                      "atomic_precision",                                     "Invalid precision qualifier."                          },
+               {atomic_binding_offset_overlap,         "atomic_binding_offset_overlap",        "Invalid offset."                                                       },
+               {atomic_binding_omitted,                        "atomic_binding_omitted",                       "Binding not specified."                                        },
+               {atomic_struct,                                         "atomic_struct",                                        "Invalid atomic_uint usage in struct."          },
+               {atomic_body_write,                                     "atomic_body_write",                            "Invalid write access to atomic_uint."          },
+               {atomic_body_declare,                           "atomic_body_declare",                          "Invalid precision qualifier."                          },
+       };
+
+       return std::vector<FunctionContainer>(DE_ARRAY_BEGIN(funcs), DE_ARRAY_END(funcs));
+}
+
+} // NegativeTestShared
+} // Functional
+} // gles31
+} // deqp
diff --git a/modules/gles31/functional/es31fNegativeAtomicCounterTests.hpp b/modules/gles31/functional/es31fNegativeAtomicCounterTests.hpp
new file mode 100644 (file)
index 0000000..fed75e5
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef _ES31FNEGATIVEATOMICCOUNTERTESTS_HPP
+#define _ES31FNEGATIVEATOMICCOUNTERTESTS_HPP
+/*-------------------------------------------------------------------------
+ * drawElements Quality Program OpenGL ES 3.1 Module
+ * -------------------------------------------------
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief Negative Atomic Counter Tests
+ *//*--------------------------------------------------------------------*/
+
+#include "tcuDefs.hpp"
+#include "es31fNegativeTestShared.hpp"
+
+namespace deqp
+{
+namespace gles31
+{
+namespace Functional
+{
+namespace NegativeTestShared
+{
+
+std::vector<FunctionContainer> getNegativeAtomicCounterTestFunctions (void);
+
+} // NegativeTestShared
+} // Functional
+} // gles31
+} // deqp
+
+#endif // _ES31FNEGATIVEATOMICCOUNTERTESTS_HPP
index 263ddf9..0a5ad9e 100644 (file)
@@ -24,6 +24,8 @@
 #include "es31fNegativeFragmentApiTests.hpp"
 
 #include "gluCallLogWrapper.hpp"
+#include "gluContextInfo.hpp"
+#include "gluRenderContext.hpp"
 
 #include "glwDefs.hpp"
 #include "glwEnums.hpp"
@@ -155,6 +157,50 @@ void blend_equation_separate (NegativeTestContext& ctx)
        ctx.endSection();
 }
 
+void blend_equationi (NegativeTestContext& ctx)
+{
+       glw::GLint maxDrawBuffers = -1;
+
+       if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) && !ctx.getContextInfo().isExtensionSupported("GL_KHR_blend_equation_advanced"))
+               throw tcu::NotSupportedError("GL_KHR_blend_equation_advanced is not supported", DE_NULL, __FILE__, __LINE__);
+
+       ctx.glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxDrawBuffers);
+       ctx.beginSection("GL_INVALID_ENUM is generated if mode is not GL_FUNC_ADD, GL_FUNC_SUBTRACT, GL_FUNC_REVERSE_SUBTRACT, GL_MAX or GL_MIN.");
+       ctx.glBlendEquationi(0, -1);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+       ctx.beginSection("GL_INVALID_VALUE is generated if buf is not in the range zero to the value of MAX_DRAW_BUFFERS minus one.");
+       ctx.glBlendEquationi(-1, GL_FUNC_ADD);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glBlendEquationi(maxDrawBuffers, GL_FUNC_ADD);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+}
+
+void blend_equation_separatei (NegativeTestContext& ctx)
+{
+       glw::GLint maxDrawBuffers = -1;
+
+       if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) && !ctx.getContextInfo().isExtensionSupported("GL_KHR_blend_equation_advanced"))
+               throw tcu::NotSupportedError("GL_KHR_blend_equation_advanced is not supported", DE_NULL, __FILE__, __LINE__);
+
+       ctx.glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxDrawBuffers);
+       ctx.beginSection("GL_INVALID_ENUM is generated if modeRGB is not GL_FUNC_ADD, GL_FUNC_SUBTRACT, GL_FUNC_REVERSE_SUBTRACT, GL_MAX or GL_MIN.");
+       ctx.glBlendEquationSeparatei(0, -1, GL_FUNC_ADD);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+       ctx.beginSection("GL_INVALID_ENUM is generated if modeAlpha is not GL_FUNC_ADD, GL_FUNC_SUBTRACT, GL_FUNC_REVERSE_SUBTRACT, GL_MAX or GL_MIN.");
+       ctx.glBlendEquationSeparatei(0, GL_FUNC_ADD, -1);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+       ctx.beginSection("GL_INVALID_VALUE is generated if buf is not in the range zero to the value of MAX_DRAW_BUFFERS minus one.");
+       ctx.glBlendEquationSeparatei(-1, GL_FUNC_ADD, GL_FUNC_ADD);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glBlendEquationSeparatei(maxDrawBuffers, GL_FUNC_ADD, GL_FUNC_ADD);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+}
+
 void blend_func (NegativeTestContext& ctx)
 {
        ctx.beginSection("GL_INVALID_ENUM is generated if either sfactor or dfactor is not an accepted value.");
@@ -179,6 +225,54 @@ void blend_func_separate (NegativeTestContext& ctx)
        ctx.endSection();
 }
 
+void blend_funci (NegativeTestContext& ctx)
+{
+       glw::GLint maxDrawBuffers = -1;
+
+       if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) && !ctx.getContextInfo().isExtensionSupported("GL_KHR_blend_equation_advanced"))
+               throw tcu::NotSupportedError("GL_KHR_blend_equation_advanced is not supported", DE_NULL, __FILE__, __LINE__);
+
+       ctx.glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxDrawBuffers);
+       ctx.beginSection("GL_INVALID_ENUM is generated if either sfactor or dfactor is not an accepted value.");
+       ctx.glBlendFunci(0, -1, GL_ONE);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glBlendFunci(0, GL_ONE, -1);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+       ctx.beginSection("GL_INVALID_VALUE is generated if buf is not in the range zero to the value of MAX_DRAW_BUFFERS minus one.");
+       ctx.glBlendFunci(-1, GL_ONE, GL_ONE);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glBlendFunci(maxDrawBuffers, GL_ONE, GL_ONE);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+}
+
+void blend_func_separatei (NegativeTestContext& ctx)
+{
+       glw::GLint maxDrawBuffers = -1;
+
+       if (!glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) && !ctx.getContextInfo().isExtensionSupported("GL_KHR_blend_equation_advanced"))
+               throw tcu::NotSupportedError("GL_KHR_blend_equation_advanced is not supported", DE_NULL, __FILE__, __LINE__);
+
+       ctx.glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxDrawBuffers);
+       ctx.beginSection("GL_INVALID_ENUM is generated if srcRGB, dstRGB, srcAlpha, or dstAlpha is not an accepted value.");
+       ctx.glBlendFuncSeparatei(0, -1, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glBlendFuncSeparatei(0, GL_ZERO, -1, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glBlendFuncSeparatei(0, GL_ZERO, GL_ONE, -1, GL_ONE_MINUS_SRC_COLOR);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glBlendFuncSeparatei(0, GL_ZERO, GL_ONE, GL_SRC_COLOR, -1);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+       ctx.beginSection("GL_INVALID_VALUE is generated if buf is not in the range zero to the value of MAX_DRAW_BUFFERS minus one.");
+       ctx.glBlendFuncSeparatei(-1, GL_ONE, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glBlendFuncSeparatei(maxDrawBuffers, GL_ONE, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+}
+
 // Rasterization API functions
 void cull_face (NegativeTestContext& ctx)
 {
@@ -380,29 +474,33 @@ std::vector<FunctionContainer> getNegativeFragmentApiTestFunctions ()
 {
        FunctionContainer funcs[] =
        {
-               {scissor,                                       "scissor",                                      "Invalid glScissor() usage"                              },
-               {depth_func,                            "depth_func",                           "Invalid glDepthFunc() usage"                    },
-               {viewport,                                      "viewport",                                     "Invalid glViewport() usage"                     },
-               {stencil_func,                          "stencil_func",                         "Invalid glStencilFunc() usage"                  },
-               {stencil_func_separate,         "stencil_func_separate",        "Invalid glStencilFuncSeparate() usage"  },
-               {stencil_op,                            "stencil_op",                           "Invalid glStencilOp() usage"                    },
-               {stencil_op_separate,           "stencil_op_separate",          "Invalid glStencilOpSeparate() usage"    },
-               {stencil_mask_separate,         "stencil_mask_separate",        "Invalid glStencilMaskSeparate() usage"  },
-               {blend_equation,                        "blend_equation",                       "Invalid glBlendEquation() usage"                },
-               {blend_equation_separate,       "blend_equation_separate",      "Invalid glBlendEquationSeparate() usage"},
-               {blend_func,                            "blend_func",                           "Invalid glBlendFunc() usage"                    },
-               {blend_func_separate,           "blend_func_separate",          "Invalid glBlendFuncSeparate() usage"    },
-               {cull_face,                                     "cull_face",                            "Invalid glCullFace() usage"                     },
-               {front_face,                            "front_face",                           "Invalid glFrontFace() usage"                    },
-               {line_width,                            "line_width",                           "Invalid glLineWidth() usage"                    },
-               {gen_queries,                           "gen_queries",                          "Invalid glGenQueries() usage"                   },
-               {begin_query,                           "begin_query",                          "Invalid glBeginQuery() usage"                   },
-               {end_query,                                     "end_query",                            "Invalid glEndQuery() usage"                     },
-               {delete_queries,                        "delete_queries",                       "Invalid glDeleteQueries() usage"                },
-               {fence_sync,                            "fence_sync",                           "Invalid glFenceSync() usage"                    },
-               {wait_sync,                                     "wait_sync",                            "Invalid glWaitSync() usage"                     },
-               {client_wait_sync,                      "client_wait_sync",                     "Invalid glClientWaitSync() usage"               },
-               {delete_sync,                           "delete_sync",                          "Invalid glDeleteSync() usage"                   },
+               {scissor,                                       "scissor",                                      "Invalid glScissor() usage"                                     },
+               {depth_func,                            "depth_func",                           "Invalid glDepthFunc() usage"                           },
+               {viewport,                                      "viewport",                                     "Invalid glViewport() usage"                            },
+               {stencil_func,                          "stencil_func",                         "Invalid glStencilFunc() usage"                         },
+               {stencil_func_separate,         "stencil_func_separate",        "Invalid glStencilFuncSeparate() usage"         },
+               {stencil_op,                            "stencil_op",                           "Invalid glStencilOp() usage"                           },
+               {stencil_op_separate,           "stencil_op_separate",          "Invalid glStencilOpSeparate() usage"           },
+               {stencil_mask_separate,         "stencil_mask_separate",        "Invalid glStencilMaskSeparate() usage"         },
+               {blend_equation,                        "blend_equation",                       "Invalid glBlendEquation() usage"                       },
+               {blend_equationi,                       "blend_equationi",                      "Invalid glBlendEquationi() usage"                      },
+               {blend_equation_separate,       "blend_equation_separate",      "Invalid glBlendEquationSeparate() usage"       },
+               {blend_equation_separatei,      "blend_equation_separatei",     "Invalid glBlendEquationSeparatei() usage"      },
+               {blend_func,                            "blend_func",                           "Invalid glBlendFunc() usage"                           },
+               {blend_funci,                           "blend_funci",                          "Invalid glBlendFunci() usage"                          },
+               {blend_func_separate,           "blend_func_separate",          "Invalid glBlendFuncSeparate() usage"           },
+               {blend_func_separatei,          "blend_func_separatei",         "Invalid glBlendFuncSeparatei() usage"          },
+               {cull_face,                                     "cull_face",                            "Invalid glCullFace() usage"                            },
+               {front_face,                            "front_face",                           "Invalid glFrontFace() usage"                           },
+               {line_width,                            "line_width",                           "Invalid glLineWidth() usage"                           },
+               {gen_queries,                           "gen_queries",                          "Invalid glGenQueries() usage"                          },
+               {begin_query,                           "begin_query",                          "Invalid glBeginQuery() usage"                          },
+               {end_query,                                     "end_query",                            "Invalid glEndQuery() usage"                            },
+               {delete_queries,                        "delete_queries",                       "Invalid glDeleteQueries() usage"                       },
+               {fence_sync,                            "fence_sync",                           "Invalid glFenceSync() usage"                           },
+               {wait_sync,                                     "wait_sync",                            "Invalid glWaitSync() usage"                            },
+               {client_wait_sync,                      "client_wait_sync",                     "Invalid glClientWaitSync() usage"                      },
+               {delete_sync,                           "delete_sync",                          "Invalid glDeleteSync() usage"                          },
        };
 
        return std::vector<FunctionContainer>(DE_ARRAY_BEGIN(funcs), DE_ARRAY_END(funcs));
index a35b941..9f36f47 100644 (file)
@@ -31,6 +31,8 @@
 #include "gluShaderProgram.hpp"
 #include "gluCallLogWrapper.hpp"
 
+#include "gluContextInfo.hpp"
+#include "gluRenderContext.hpp"
 
 
 namespace deqp
@@ -150,6 +152,11 @@ void delete_shader (NegativeTestContext& ctx)
 void shader_binary (NegativeTestContext& ctx)
 {
        std::vector<deInt32> binaryFormats;
+       deBool shaderBinarySupported = !binaryFormats.empty();
+       GLuint shaders[2];
+       GLuint shaderPair[2];
+       GLuint nonProgram[2];
+       GLuint shaderProgram[2];
 
        {
                deInt32 numFormats = 0x1234;
@@ -164,15 +171,19 @@ void shader_binary (NegativeTestContext& ctx)
                }
        }
 
-       deBool shaderBinarySupported = !binaryFormats.empty();
        if (!shaderBinarySupported)
                ctx.getLog() << TestLog::Message << "// Shader binaries not supported." << TestLog::EndMessage;
        else
                ctx.getLog() << TestLog::Message << "// Shader binaries supported" << TestLog::EndMessage;
 
-       GLuint shaders[2];
-       shaders[0]              = ctx.glCreateShader(GL_VERTEX_SHADER);
-       shaders[1]              = ctx.glCreateShader(GL_VERTEX_SHADER);
+       shaders[0]                      = ctx.glCreateShader(GL_VERTEX_SHADER);
+       shaders[1]                      = ctx.glCreateShader(GL_VERTEX_SHADER);
+       shaderPair[0]           = ctx.glCreateShader(GL_VERTEX_SHADER);
+       shaderPair[1]           = ctx.glCreateShader(GL_FRAGMENT_SHADER);
+       nonProgram[0]           = -1;
+       nonProgram[1]           = -1;
+       shaderProgram[0]        = ctx.glCreateShader(GL_VERTEX_SHADER);
+       shaderProgram[1]        = ctx.glCreateProgram();
 
        ctx.beginSection("GL_INVALID_ENUM is generated if binaryFormat is not an accepted value.");
        ctx.glShaderBinary(1, &shaders[0], -1, 0, 0);
@@ -191,6 +202,23 @@ void shader_binary (NegativeTestContext& ctx)
                ctx.glShaderBinary(2, &shaders[0], binaryFormats[0], 0, 0);
                ctx.expectError(GL_INVALID_OPERATION, GL_INVALID_VALUE);
                ctx.endSection();
+
+               ctx.beginSection("GL_INVALID_VALUE is generated if count or length is negative.");
+               ctx.glShaderBinary(2, &shaderPair[0], binaryFormats[0], 0, -1);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.glShaderBinary(-1, &shaderPair[0], binaryFormats[0], 0, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.endSection();
+
+               ctx.beginSection("GL_INVALID_VALUE is generated if shaders contains anything other than shader or program objects.");
+               ctx.glShaderBinary(2, &nonProgram[0], binaryFormats[0], 0, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.endSection();
+
+               ctx.beginSection("GL_INVALID_OPERATION is generated if shaders refers to a program object.");
+               ctx.glShaderBinary(2, &shaderProgram[0], binaryFormats[0], 0, 0);
+               ctx.expectError(GL_INVALID_OPERATION);
+               ctx.endSection();
        }
 
        ctx.glDeleteShader(shaders[0]);
@@ -374,10 +402,19 @@ void use_program (NegativeTestContext& ctx)
 
 void delete_program (NegativeTestContext& ctx)
 {
+       GLuint shader = ctx.glCreateShader(GL_VERTEX_SHADER);
+
        ctx.beginSection("GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
        ctx.glDeleteProgram(-1);
        ctx.expectError(GL_INVALID_VALUE);
        ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if program is not zero and is the name of a shader object.");
+       ctx.glDeleteProgram(shader);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.glDeleteShader(shader);
 }
 
 void validate_program (NegativeTestContext& ctx)
@@ -473,24 +510,31 @@ void program_binary (NegativeTestContext& ctx)
 
 void program_parameteri (NegativeTestContext& ctx)
 {
-       GLuint  program = ctx.glCreateProgram();
+       GLuint program  = ctx.glCreateProgram();
+       GLuint shader   = ctx.glCreateShader(GL_VERTEX_SHADER);
 
        ctx.beginSection("GL_INVALID_VALUE is generated if program is not the name of an existing program object.");
-       ctx.glProgramParameteri         (0, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE);
-       ctx.expectError                 (GL_INVALID_VALUE);
+       ctx.glProgramParameteri(0, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE);
+       ctx.expectError(GL_INVALID_VALUE);
        ctx.endSection();
 
-       ctx.beginSection("GL_INVALID_ENUM is generated if pname is not GL_PROGRAM_BINARY_RETRIEVABLE_HINT.");
-       ctx.glProgramParameteri         (program, -1, GL_TRUE);
-       ctx.expectError                 (GL_INVALID_ENUM);
+       ctx.beginSection("GL_INVALID_OPERATION is generated if program is the name of a shader object.");
+       ctx.glProgramParameteri(shader, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if pname is not GL_PROGRAM_BINARY_RETRIEVABLE_HINT or PROGRAM_SEPARABLE.");
+       ctx.glProgramParameteri(program, -1, GL_TRUE);
+       ctx.expectError(GL_INVALID_ENUM);
        ctx.endSection();
 
        ctx.beginSection("GL_INVALID_VALUE is generated if value is not GL_FALSE or GL_TRUE.");
-       ctx.glProgramParameteri         (program, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, 2);
-       ctx.expectError                 (GL_INVALID_VALUE);
+       ctx.glProgramParameteri(program, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, 2);
+       ctx.expectError(GL_INVALID_VALUE);
        ctx.endSection();
 
        ctx.glDeleteProgram(program);
+       ctx.glDeleteShader(shader);
 }
 
 void gen_samplers (NegativeTestContext& ctx)
@@ -572,21 +616,76 @@ void get_sampler_parameterfv (NegativeTestContext& ctx)
        ctx.glDeleteSamplers(1, &sampler);
 }
 
+void get_sampler_parameterIiv (NegativeTestContext& ctx)
+{
+       if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+               throw tcu::NotSupportedError("glGetSamplerParameterIiv is not supported.", DE_NULL, __FILE__, __LINE__);
+
+       GLuint  sampler         = 0x1234;
+       GLint   borderColor     = 0x1234;
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if sampler is not the name of a sampler object returned from a previous call to ctx.glGenSamplers.");
+       ctx.glGetSamplerParameterIiv(sampler, GL_TEXTURE_BORDER_COLOR, &borderColor);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.glGenSamplers(1, &sampler);
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if pname is not an accepted value.");
+       ctx.glGetSamplerParameterIiv(sampler, -1, &borderColor);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
+       ctx.glDeleteSamplers(1, &sampler);
+}
+
+void get_sampler_parameterIuiv (NegativeTestContext& ctx)
+{
+       if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+               throw tcu::NotSupportedError("glGetSamplerParameterIuiv is not supported.", DE_NULL, __FILE__, __LINE__);
+
+       GLuint  sampler         = 0x1234;
+       GLuint  borderColor     = 0x1234;
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if sampler is not the name of a sampler object returned from a previous call to ctx.glGenSamplers.");
+       ctx.glGetSamplerParameterIuiv(sampler, GL_TEXTURE_BORDER_COLOR, &borderColor);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.glGenSamplers(1, &sampler);
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if pname is not an accepted value.");
+       ctx.glGetSamplerParameterIuiv(sampler, -1, &borderColor);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
+       ctx.glDeleteSamplers(1, &sampler);
+}
+
 void sampler_parameteri (NegativeTestContext& ctx)
 {
-       GLuint                  sampler = 0;
-       ctx.glGenSamplers       (1, &sampler);
+       GLuint sampler = 0;
+
+       ctx.glGenSamplers(1, &sampler);
 
        ctx.beginSection("GL_INVALID_OPERATION is generated if sampler is not the name of a sampler object previously returned from a call to ctx.glGenSamplers.");
-       ctx.glSamplerParameteri         (-1, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
-       ctx.expectError                 (GL_INVALID_OPERATION);
+       ctx.glSamplerParameteri(-1, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+       ctx.expectError(GL_INVALID_OPERATION);
        ctx.endSection();
 
        ctx.beginSection("GL_INVALID_ENUM is generated if params should have a defined constant value (based on the value of pname) and does not.");
-       ctx.glSamplerParameteri         (sampler, GL_TEXTURE_WRAP_S, -1);
-       ctx.expectError                 (GL_INVALID_ENUM);
+       ctx.glSamplerParameteri(sampler, GL_TEXTURE_WRAP_S, -1);
+       ctx.expectError(GL_INVALID_ENUM);
        ctx.endSection();
 
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+       {
+               ctx.beginSection("GL_INVALID_ENUM is generated if glSamplerParameteri is called for a non-scalar parameter.");
+               ctx.glSamplerParameteri(sampler, GL_TEXTURE_BORDER_COLOR, 0);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.endSection();
+       }
+
        ctx.glDeleteSamplers(1, &sampler);
 }
 
@@ -613,19 +712,28 @@ void sampler_parameteriv (NegativeTestContext& ctx)
 
 void sampler_parameterf (NegativeTestContext& ctx)
 {
-       GLuint                  sampler = 0;
-       ctx.glGenSamplers       (1, &sampler);
+       GLuint sampler = 0;
+
+       ctx.glGenSamplers(1, &sampler);
 
        ctx.beginSection("GL_INVALID_OPERATION is generated if sampler is not the name of a sampler object previously returned from a call to ctx.glGenSamplers.");
-       ctx.glSamplerParameterf         (-1, GL_TEXTURE_MIN_LOD, -1000.0f);
-       ctx.expectError                 (GL_INVALID_OPERATION);
+       ctx.glSamplerParameterf(-1, GL_TEXTURE_MIN_LOD, -1000.0f);
+       ctx.expectError(GL_INVALID_OPERATION);
        ctx.endSection();
 
        ctx.beginSection("GL_INVALID_ENUM is generated if params should have a defined constant value (based on the value of pname) and does not.");
-       ctx.glSamplerParameterf         (sampler, GL_TEXTURE_WRAP_S, -1.0f);
-       ctx.expectError                 (GL_INVALID_ENUM);
+       ctx.glSamplerParameterf(sampler, GL_TEXTURE_WRAP_S, -1.0f);
+       ctx.expectError(GL_INVALID_ENUM);
        ctx.endSection();
 
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+       {
+               ctx.beginSection("GL_INVALID_ENUM is generated if glSamplerParameterf is called for a non-scalar parameter.");
+               ctx.glSamplerParameteri(sampler, GL_TEXTURE_BORDER_COLOR, 0);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.endSection();
+       }
+
        ctx.glDeleteSamplers(1, &sampler);
 }
 
@@ -650,6 +758,48 @@ void sampler_parameterfv (NegativeTestContext& ctx)
        ctx.glDeleteSamplers(1, &sampler);
 }
 
+void sampler_parameterIiv (NegativeTestContext& ctx)
+{
+       if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+               throw tcu::NotSupportedError("glSamplerParameterIiv is not supported.", DE_NULL, __FILE__, __LINE__);
+
+       GLuint  sampler;
+       GLint   color[] = {0, 0, 0, 0};
+
+       ctx.glGenSamplers(1, &sampler);
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if sampler is not the name of a sampler object previously returned from a call to ctx.glGenSamplers.");
+       ctx.glSamplerParameterIiv(-1, GL_TEXTURE_BORDER_COLOR, color);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if pname is not an accepted sampler state name.");
+       ctx.glSamplerParameterIiv(sampler, -1, color);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+}
+
+void sampler_parameterIuiv (NegativeTestContext& ctx)
+{
+       if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+               throw tcu::NotSupportedError("glSamplerParameterIuiv is not supported.", DE_NULL, __FILE__, __LINE__);
+
+       GLuint  sampler;
+       GLuint  color[] = {0, 0, 0, 0};
+
+       ctx.glGenSamplers(1, &sampler);
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if sampler is not the name of a sampler object previously returned from a call to ctx.glGenSamplers.");
+       ctx.glSamplerParameterIuiv(-1, GL_TEXTURE_BORDER_COLOR, color);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if pname is not an accepted sampler state name.");
+       ctx.glSamplerParameterIuiv(sampler, -1, color);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+}
+
 // Shader data commands
 
 void get_attrib_location (NegativeTestContext& ctx)
@@ -745,16 +895,18 @@ void bind_attrib_location (NegativeTestContext& ctx)
 
 void uniform_block_binding (NegativeTestContext& ctx)
 {
-       glu::ShaderProgram program(ctx.getRenderContext(), glu::makeVtxFragSources(uniformBlockVertSource, uniformTestFragSource));
+       GLint                           maxUniformBufferBindings        = -1;
+       GLint                           numActiveUniforms                       = -1;
+       GLint                           numActiveBlocks                         = -1;
+       GLuint                          shader                                          = -1;
+       glu::ShaderProgram      program(ctx.getRenderContext(), glu::makeVtxFragSources(uniformBlockVertSource, uniformTestFragSource));
 
-       ctx.glUseProgram        (program.getProgram());
+       shader = ctx.glCreateShader(GL_VERTEX_SHADER);
+       ctx.glUseProgram(program.getProgram());
 
-       GLint                   maxUniformBufferBindings        = -1;
-       GLint                   numActiveUniforms                       = -1;
-       GLint                   numActiveBlocks                         = -1;
-       ctx.glGetIntegerv       (GL_MAX_UNIFORM_BUFFER_BINDINGS, &maxUniformBufferBindings);
-       ctx.glGetProgramiv      (program.getProgram(), GL_ACTIVE_UNIFORMS,                      &numActiveUniforms);
-       ctx.glGetProgramiv      (program.getProgram(), GL_ACTIVE_UNIFORM_BLOCKS,        &numActiveBlocks);
+       ctx.glGetIntegerv(GL_MAX_UNIFORM_BUFFER_BINDINGS, &maxUniformBufferBindings);
+       ctx.glGetProgramiv(program.getProgram(), GL_ACTIVE_UNIFORMS, &numActiveUniforms);
+       ctx.glGetProgramiv(program.getProgram(), GL_ACTIVE_UNIFORM_BLOCKS, &numActiveBlocks);
        ctx.getLog() << TestLog::Message << "// GL_MAX_UNIFORM_BUFFER_BINDINGS = " << maxUniformBufferBindings << TestLog::EndMessage;
        ctx.getLog() << TestLog::Message << "// GL_ACTIVE_UNIFORMS = "                          << numActiveUniforms            << TestLog::EndMessage;
        ctx.getLog() << TestLog::Message << "// GL_ACTIVE_UNIFORM_BLOCKS = "            << numActiveBlocks                      << TestLog::EndMessage;
@@ -776,6 +928,13 @@ void uniform_block_binding (NegativeTestContext& ctx)
        ctx.glUniformBlockBinding(-1, 0, 0);
        ctx.expectError(GL_INVALID_VALUE);
        ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if program is the name of a shader object.");
+       ctx.glUniformBlockBinding(shader, 0, 0);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.glDeleteShader(shader);
 }
 
 // ctx.glUniform*f
@@ -1753,19 +1912,61 @@ void bind_transform_feedback (NegativeTestContext& ctx)
        ctx.glDeleteBuffers                             (1, &buf);
        ctx.glDeleteTransformFeedbacks  (2, tfID);
        ctx.expectError                         (GL_NO_ERROR);
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if id has been deleted with glDeleteTransformFeedback().");
+       ctx.glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, tfID[0]);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if id is not 0 or a value returned from glGenTransformFeedbacks().");
+       ctx.glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, -1);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
 }
 
 void delete_transform_feedbacks (NegativeTestContext& ctx)
 {
-       GLuint id = 0;
+       GLuint                          id                      = 0;
+       GLuint                          tfID[2];
+       deUint32                        buf             = 0x1234;
+       const char*             tfVarying       = "gl_Position";
+       glu::ShaderProgram      program         (ctx.getRenderContext(), glu::makeVtxFragSources(vertexShaderSource, fragmentShaderSource));
+
+       ctx.glGenBuffers(1, &buf);
        ctx.glGenTransformFeedbacks(1, &id);
+       ctx.glGenTransformFeedbacks(2, tfID);
 
        ctx.beginSection("GL_INVALID_VALUE is generated if n is negative.");
        ctx.glDeleteTransformFeedbacks(-1, &id);
        ctx.expectError(GL_INVALID_VALUE);
        ctx.endSection();
 
+       ctx.beginSection("GL_INVALID_OPERATION is generated if the transform feedback operation for any object named by ids is currently active.");
+       ctx.glUseProgram(program.getProgram());
+       ctx.glTransformFeedbackVaryings(program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
+       ctx.glLinkProgram(program.getProgram());
+       ctx.glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, tfID[0]);
+       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.glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, tfID[1]);
+       ctx.expectError(GL_INVALID_OPERATION);
+
+       ctx.glDeleteTransformFeedbacks(2, tfID);
+       ctx.expectError(GL_INVALID_OPERATION);
+
+       ctx.glEndTransformFeedback();
+       ctx.expectError(GL_NO_ERROR);
+       ctx.endSection();
+
+
        ctx.glDeleteTransformFeedbacks(1, &id);
+       ctx.glDeleteTransformFeedbacks(2, tfID);
+       ctx.glDeleteBuffers(1, &buf);
+
 }
 
 void begin_transform_feedback (NegativeTestContext& ctx)
@@ -1973,10 +2174,11 @@ void get_transform_feedback_varying (NegativeTestContext& ctx)
 
 void transform_feedback_varyings (NegativeTestContext& ctx)
 {
-       GLuint                                  tfID = 0;
-       glu::ShaderProgram              program(ctx.getRenderContext(), glu::makeVtxFragSources(vertexShaderSource, fragmentShaderSource));
-       const char* tfVarying   = "gl_Position";
-       GLint                                   maxTransformFeedbackSeparateAttribs = 0;
+       GLuint                                                                          tfID = 0;
+       GLuint shader                                                           = -1;
+       glu::ShaderProgram program                                      (ctx.getRenderContext(), glu::makeVtxFragSources(vertexShaderSource, fragmentShaderSource));
+       const char* tfVarying                                           = "gl_Position";
+       GLint maxTransformFeedbackSeparateAttribs       = 0;
 
        ctx.glGenTransformFeedbacks                             (1, &tfID);
        ctx.expectError                                         (GL_NO_ERROR);
@@ -1986,6 +2188,23 @@ void transform_feedback_varyings (NegativeTestContext& ctx)
        ctx.expectError                                         (GL_INVALID_VALUE);
        ctx.endSection();
 
+       ctx.beginSection("GL_INVALID_OPERATION is generated if program is the name of a shader object.");
+       shader = ctx.glCreateShader(GL_VERTEX_SHADER);
+       ctx.glTransformFeedbackVaryings(shader, 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.glDeleteShader(shader);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if count is negative.");
+       ctx.glTransformFeedbackVaryings(program.getProgram(), -1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if bufferMode is not SEPARATE_ATTRIBS or INTERLEAVED_ATTRIBS.");
+       ctx.glTransformFeedbackVaryings(program.getProgram(), 1, &tfVarying, 0);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
        ctx.beginSection("GL_INVALID_VALUE is generated if bufferMode is GL_SEPARATE_ATTRIBS and count is greater than GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS.");
        ctx.glGetIntegerv                                               (GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, &maxTransformFeedbackSeparateAttribs);
        ctx.glTransformFeedbackVaryings                 (program.getProgram(), maxTransformFeedbackSeparateAttribs+1, &tfVarying, GL_SEPARATE_ATTRIBS);
@@ -1994,6 +2213,161 @@ void transform_feedback_varyings (NegativeTestContext& ctx)
 
        ctx.glDeleteTransformFeedbacks                  (1, &tfID);
        ctx.expectError                                         (GL_NO_ERROR);
+
+}
+
+void link_compute_shader (NegativeTestContext& ctx)
+{
+       const char* computeShaderSource         =       "#version 320 es\n"
+                                                                                       "void main (void)\n"
+                                                                                       "{\n"
+                                                                                       "}\n\0";
+       {
+               const GLenum shaderTypes[]                      =       {
+                                                                                                       GL_VERTEX_SHADER,
+                                                                                                       GL_FRAGMENT_SHADER,
+                                                                                                       GL_GEOMETRY_SHADER,
+                                                                                                       GL_TESS_CONTROL_SHADER,
+                                                                                                       GL_TESS_EVALUATION_SHADER
+                                                                                               };
+
+               ctx.beginSection("Compute Shader linked with shader of other kind.");
+               for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(shaderTypes); ndx++)
+               {
+                       GLint linkStatus                                =       -1;
+                       GLuint program                                  =       ctx.glCreateProgram();
+                       GLuint computeShader                    =       ctx.glCreateShader(GL_COMPUTE_SHADER);
+                       GLuint otherShader                              =       ctx.glCreateShader(shaderTypes[ndx]);
+                       const char* otherShaderSource   =       (shaderTypes[ndx] != GL_GEOMETRY_SHADER)        ?
+                                                                                               computeShaderSource                                                     :
+                                                                                               "#version 320 es\n"
+                                                                                               "layout(max_vertices = 3) out;\n"
+                                                                                               "void main(void){}\n\0";
+
+                       ctx.glShaderSource(computeShader, 1, &computeShaderSource, DE_NULL);
+                       ctx.glShaderSource(otherShader, 1, &otherShaderSource, DE_NULL);
+                       ctx.glCompileShader(computeShader);
+                       ctx.glCompileShader(otherShader);
+                       ctx.glAttachShader(program, computeShader);
+                       ctx.glAttachShader(program, otherShader);
+                       ctx.glLinkProgram(program);
+                       ctx.glGetProgramiv(program, GL_LINK_STATUS, &linkStatus);
+                       ctx.glDeleteShader(otherShader);
+                       ctx.glDeleteShader(computeShader);
+                       ctx.glDeleteProgram(program);
+                       if (linkStatus != GL_FALSE)
+                               ctx.fail("Program should not have linked");
+               }
+               ctx.endSection();
+       }
+       {
+               const char* computeShaderSource310      =       "#version 310 es\n"
+                                                                                               "void main (void)\n"
+                                                                                               "{\n"
+                                                                                               "}\n\0";
+               GLint linkStatus                                        =       -1;
+               GLuint program                                          =       ctx.glCreateProgram();
+               GLuint computeShader                            =       ctx.glCreateShader(GL_COMPUTE_SHADER);
+               GLuint computeShader310                         =       ctx.glCreateShader(GL_FRAGMENT_SHADER);
+
+               ctx.glShaderSource(computeShader, 1, &computeShaderSource, DE_NULL);
+               ctx.glShaderSource(computeShader310, 1, &computeShaderSource310, DE_NULL);
+               ctx.beginSection("Compute Shader should not be linked with shaders of different version.");
+               ctx.glCompileShader(computeShader);
+               ctx.glCompileShader(computeShader310);
+               ctx.glAttachShader(program, computeShader);
+               ctx.glAttachShader(program, computeShader310);
+               ctx.glLinkProgram(program);
+               ctx.glGetProgramiv(program, GL_LINK_STATUS, &linkStatus);
+               ctx.glDeleteShader(computeShader310);
+               ctx.glDeleteShader(computeShader);
+               ctx.glDeleteProgram(program);
+               if (linkStatus != GL_FALSE)
+                       ctx.fail("Program should not have linked");
+               ctx.endSection();
+       }
+}
+
+void compile_compute_shader_helper (NegativeTestContext& ctx, const char** computeShaderSource, GLint* compileStatus)
+{
+       GLuint shader = ctx.glCreateShader(GL_COMPUTE_SHADER);
+
+       *compileStatus = -1;
+       ctx.glShaderSource(shader, 1, computeShaderSource, DE_NULL);
+       ctx.glCompileShader(shader);
+       ctx.glGetShaderiv(shader, GL_COMPILE_STATUS, compileStatus);
+       ctx.glDeleteShader(shader);
+}
+
+void compile_compute_shader (NegativeTestContext& ctx)
+{
+       GLint compileStatus;
+       ctx.beginSection("Compile Computer Shader");
+
+       {
+               const char* computeShaderSource         =       "#version 300 es\n"
+                                                                                               "void main (void)\n"
+                                                                                               "{\n"
+                                                                                               "}\n\0";
+
+               compile_compute_shader_helper(ctx, &computeShaderSource, &compileStatus);
+               if (compileStatus != GL_FALSE)
+                       ctx.fail("Compute Shader should not have compiled with #version 300 es.");
+       }
+       {
+               const char* computeShaderSource         =       "#version 310 es\n"
+                                                                                               "buffer SSBO { vec4 data }"
+                                                                                               "void main (void)\n"
+                                                                                               "{\n"
+                                                                                               "}\n\0";
+
+               compile_compute_shader_helper(ctx, &computeShaderSource, &compileStatus);
+               if (compileStatus != GL_FALSE)
+                       ctx.fail("Compute Shader should not have compiled: incorrect SSBO syntax.");
+       }
+       {
+               const char* computeShaderSource         =       "#version 310 es\n"
+                                                                                               "buffer SSBO { vec4 data;};"
+                                                                                               "uniform mat4 data;"
+                                                                                               "void main (void)\n"
+                                                                                               "{\n"
+                                                                                               "}\n\0";
+
+               compile_compute_shader_helper(ctx, &computeShaderSource, &compileStatus);
+               if (compileStatus != GL_FALSE)
+                       ctx.fail("Compute Shader should not have compiled: buffer variable redefinition.");
+       }
+       {
+               const char* computeShaderSource         =       "#version 310 es\n"
+                                                                                               "buffer SSBO { vec4 data[]; vec4 moreData;};"
+                                                                                               "void main (void)\n"
+                                                                                               "{\n"
+                                                                                               "}\n\0";
+
+               compile_compute_shader_helper(ctx, &computeShaderSource, &compileStatus);
+               if (compileStatus != GL_FALSE)
+                       ctx.fail("Compute Shader should not have compiled: unspecified length buffer member not at the end.");
+       }
+       {
+               const char* computeShaderSource         =       "#version 310 es\n"
+                                                                                               "in vec4 data;"
+                                                                                               "void main (void)\n"
+                                                                                               "{\n"
+                                                                                               "}\n\0";
+
+               compile_compute_shader_helper(ctx, &computeShaderSource, &compileStatus);
+               if (compileStatus != GL_FALSE)
+                       ctx.fail("Compute Shader should not have compiled: input qualifier used.");
+       }
+       {
+               const char* computeShaderSource         =       "#version 310 es\n"
+                                                                                               "shared uint data = 0;";
+
+               compile_compute_shader_helper(ctx, &computeShaderSource, &compileStatus);
+               if (compileStatus != GL_FALSE)
+                       ctx.fail("Compute Shader should not have compiled: shared-qualified variable initialized.");
+       }
+       ctx.endSection();
 }
 
 std::vector<FunctionContainer> getNegativeShaderApiTestFunctions ()
@@ -2019,10 +2393,14 @@ std::vector<FunctionContainer> getNegativeShaderApiTestFunctions ()
                {delete_samplers,                                               "delete_samplers",                                              "Invalid glDeleteSamplers() usage"                         },
                {get_sampler_parameteriv,                               "get_sampler_parameteriv",                              "Invalid glGetSamplerParameteriv() usage"          },
                {get_sampler_parameterfv,                               "get_sampler_parameterfv",                              "Invalid glGetSamplerParameterfv() usage"          },
+               {get_sampler_parameterIiv,                              "get_sampler_parameterIiv",                             "Invalid glGetSamplerParameterIiv() usage"         },
+               {get_sampler_parameterIuiv,                             "get_sampler_parameterIuiv",                    "Invalid glGetSamplerParameterIuiv() usage"        },
                {sampler_parameteri,                                    "sampler_parameteri",                                   "Invalid glSamplerParameteri() usage"              },
                {sampler_parameteriv,                                   "sampler_parameteriv",                                  "Invalid glSamplerParameteriv() usage"             },
                {sampler_parameterf,                                    "sampler_parameterf",                                   "Invalid glSamplerParameterf() usage"              },
                {sampler_parameterfv,                                   "sampler_parameterfv",                                  "Invalid glSamplerParameterfv() usage"             },
+               {sampler_parameterIiv,                                  "sampler_parameterIiv",                                 "Invalid glSamplerParameterIiv() usage"            },
+               {sampler_parameterIuiv,                                 "sampler_parameterIuiv",                                "Invalid glSamplerParameterIuiv() usage"                   },
                {get_attrib_location,                                   "get_attrib_location",                                  "Invalid glGetAttribLocation() usage"              },
                {get_uniform_location,                                  "get_uniform_location",                                 "Invalid glGetUniformLocation() usage"             },
                {bind_attrib_location,                                  "bind_attrib_location",                                 "Invalid glBindAttribLocation() usage"             },
@@ -2061,6 +2439,8 @@ std::vector<FunctionContainer> getNegativeShaderApiTestFunctions ()
                {end_transform_feedback,                                "end_transform_feedback",                               "Invalid glEndTransformFeedback() usage"           },
                {get_transform_feedback_varying,                "get_transform_feedback_varying",               "Invalid glGetTransformFeedbackVarying() usage"},
                {transform_feedback_varyings,                   "transform_feedback_varyings",                  "Invalid glTransformFeedbackVaryings() usage"  },
+               {compile_compute_shader,                                "compile_compute_shader",                               "Invalid Compute Shader compilation"               },
+               {link_compute_shader,                                   "link_compute_shader",                                  "Invalid Compute Shader linkage"                           },
        };
 
        return std::vector<FunctionContainer>(DE_ARRAY_BEGIN(funcs), DE_ARRAY_END(funcs));
diff --git a/modules/gles31/functional/es31fNegativeShaderImageLoadStoreTests.cpp b/modules/gles31/functional/es31fNegativeShaderImageLoadStoreTests.cpp
new file mode 100644 (file)
index 0000000..62c444c
--- /dev/null
@@ -0,0 +1,595 @@
+/*-------------------------------------------------------------------------
+ * drawElements Quality Program OpenGL ES 3.1 Module
+ * -------------------------------------------------
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief Negative Shader Image Load Store Tests
+ *//*--------------------------------------------------------------------*/
+
+#include "es31fNegativeShaderImageLoadStoreTests.hpp"
+
+#include "deUniquePtr.hpp"
+
+#include "glwEnums.hpp"
+
+#include "gluShaderProgram.hpp"
+
+#include "glsTextureTestUtil.hpp"
+
+#include "tcuStringTemplate.hpp"
+#include "tcuTexture.hpp"
+#include "tcuTestLog.hpp"
+
+namespace deqp
+{
+namespace gles31
+{
+namespace Functional
+{
+namespace NegativeTestShared
+{
+namespace
+{
+
+enum MemoryQualifier
+{
+       MEMORY_NONE = 0,
+       MEMORY_READONLY,
+       MEMORY_WRITEONLY,
+       MEMORY_BOTH,
+
+       MEMORY_LAST
+};
+
+enum ImageOperation
+{
+       IMAGE_OPERATION_STORE = 0,
+       IMAGE_OPERATION_LOAD,
+       IMAGE_OPERATION_ATOMIC_ADD,
+       IMAGE_OPERATION_ATOMIC_MIN,
+       IMAGE_OPERATION_ATOMIC_MAX,
+       IMAGE_OPERATION_ATOMIC_AND,
+       IMAGE_OPERATION_ATOMIC_OR,
+       IMAGE_OPERATION_ATOMIC_XOR,
+       IMAGE_OPERATION_ATOMIC_EXCHANGE,
+       IMAGE_OPERATION_ATOMIC_COMP_SWAP,
+
+       IMAGE_OPERATION_LAST
+};
+
+static const glu::ShaderType s_shaders[] =
+{
+       glu::SHADERTYPE_VERTEX,
+       glu::SHADERTYPE_FRAGMENT,
+       glu::SHADERTYPE_GEOMETRY,
+       glu::SHADERTYPE_TESSELLATION_CONTROL,
+       glu::SHADERTYPE_TESSELLATION_EVALUATION,
+       glu::SHADERTYPE_COMPUTE
+};
+
+static const gls::TextureTestUtil::TextureType s_imageTypes[] =
+{
+       gls::TextureTestUtil::TEXTURETYPE_2D,
+       gls::TextureTestUtil::TEXTURETYPE_3D,
+       gls::TextureTestUtil::TEXTURETYPE_CUBE,
+       gls::TextureTestUtil::TEXTURETYPE_2D_ARRAY,
+       gls::TextureTestUtil::TEXTURETYPE_BUFFER,
+       gls::TextureTestUtil::TEXTURETYPE_CUBE_ARRAY
+};
+
+std::string getShaderImageLayoutQualifier (const tcu::TextureFormat& format)
+{
+       std::ostringstream qualifier;
+
+       switch (format.order)
+       {
+               case tcu::TextureFormat::RGBA:  qualifier << "rgba";    break;
+               case tcu::TextureFormat::R:             qualifier << "r";               break;
+               default:
+                       DE_ASSERT(false);
+                       return std::string("");
+       }
+
+       switch (format.type)
+       {
+               case tcu::TextureFormat::FLOAT:                         qualifier << "32f";                     break;
+               case tcu::TextureFormat::HALF_FLOAT:            qualifier << "16f";                     break;
+               case tcu::TextureFormat::UNORM_INT8:            qualifier << "8";                       break;
+               case tcu::TextureFormat::SNORM_INT8:            qualifier << "8_snorm";         break;
+               case tcu::TextureFormat::SIGNED_INT32:          qualifier << "32i";                     break;
+               case tcu::TextureFormat::SIGNED_INT16:          qualifier << "16i";                     break;
+               case tcu::TextureFormat::SIGNED_INT8:           qualifier << "8i";                      break;
+               case tcu::TextureFormat::UNSIGNED_INT32:        qualifier << "32ui";            break;
+               case tcu::TextureFormat::UNSIGNED_INT16:        qualifier << "16ui";            break;
+               case tcu::TextureFormat::UNSIGNED_INT8:         qualifier << "8ui";                     break;
+               default:
+                       DE_ASSERT(false);
+                       return std::string("");
+       }
+
+       return qualifier.str();
+}
+
+std::string getShaderImageTypeDeclaration (const tcu::TextureFormat& format, gls::TextureTestUtil::TextureType imageType)
+{
+       std::ostringstream declaration;
+
+       switch (format.type)
+       {
+               case tcu::TextureFormat::FLOAT:
+               case tcu::TextureFormat::HALF_FLOAT:
+               case tcu::TextureFormat::UNORM_INT8:
+               case tcu::TextureFormat::SNORM_INT8:            declaration << "";              break;
+
+               case tcu::TextureFormat::SIGNED_INT32:
+               case tcu::TextureFormat::SIGNED_INT16:
+               case tcu::TextureFormat::SIGNED_INT8:           declaration << "i";             break;
+
+               case tcu::TextureFormat::UNSIGNED_INT32:
+               case tcu::TextureFormat::UNSIGNED_INT16:
+               case tcu::TextureFormat::UNSIGNED_INT8:         declaration << "u";             break;
+
+               default:
+                       DE_ASSERT(false);
+                       return std::string("");
+       }
+
+       declaration << "image";
+
+       switch(imageType)
+       {
+               case gls::TextureTestUtil::TEXTURETYPE_2D:                      declaration << "2D";                    break;
+               case gls::TextureTestUtil::TEXTURETYPE_3D:                      declaration << "3D";                    break;
+               case gls::TextureTestUtil::TEXTURETYPE_CUBE:            declaration << "Cube";                  break;
+               case gls::TextureTestUtil::TEXTURETYPE_2D_ARRAY:        declaration << "2DArray";               break;
+               case gls::TextureTestUtil::TEXTURETYPE_BUFFER:          declaration << "Buffer";                break;
+               case gls::TextureTestUtil::TEXTURETYPE_CUBE_ARRAY:      declaration << "CubeArray";             break;
+               default:
+                       DE_ASSERT(false);
+                       return std::string("");
+       }
+
+       return declaration.str();
+}
+
+std::string getShaderImageTypeExtensionString (gls::TextureTestUtil::TextureType imageType)
+{
+       std::string extension;
+
+       switch(imageType)
+       {
+               case gls::TextureTestUtil::TEXTURETYPE_2D:
+               case gls::TextureTestUtil::TEXTURETYPE_3D:
+               case gls::TextureTestUtil::TEXTURETYPE_CUBE:
+               case gls::TextureTestUtil::TEXTURETYPE_2D_ARRAY:
+                       extension = "";
+                       break;
+
+               case gls::TextureTestUtil::TEXTURETYPE_BUFFER:
+                       extension = "#extension GL_EXT_texture_buffer : enable";
+                       break;
+
+               case gls::TextureTestUtil::TEXTURETYPE_CUBE_ARRAY:
+                       extension = "#extension GL_EXT_texture_cube_map_array : enable";
+                       break;
+
+               default:
+                       DE_ASSERT(false);
+                       return std::string("");
+       }
+
+       return extension;
+}
+
+std::string getShaderImageParamP (gls::TextureTestUtil::TextureType imageType)
+{
+       switch(imageType)
+       {
+               case gls::TextureTestUtil::TEXTURETYPE_2D:
+                       return "ivec2(1, 1)";
+
+               case gls::TextureTestUtil::TEXTURETYPE_3D:
+               case gls::TextureTestUtil::TEXTURETYPE_CUBE:
+               case gls::TextureTestUtil::TEXTURETYPE_2D_ARRAY:
+               case gls::TextureTestUtil::TEXTURETYPE_CUBE_ARRAY:
+                       return "ivec3(1, 1, 1)";
+
+               case gls::TextureTestUtil::TEXTURETYPE_BUFFER:
+                       return "1";
+
+               default:
+                       DE_ASSERT(false);
+                       return std::string("");
+       }
+}
+
+std::string getOtherFunctionArguments (const tcu::TextureFormat& format, ImageOperation function)
+{
+       std::ostringstream data;
+       data << ", ";
+
+       bool isFloat = false;
+
+       switch(format.type)
+       {
+               case tcu::TextureFormat::FLOAT:
+               case tcu::TextureFormat::HALF_FLOAT:
+               case tcu::TextureFormat::UNORM_INT8:
+               case tcu::TextureFormat::SNORM_INT8:
+                       data << "";
+                       isFloat = true;
+                       break;
+
+               case tcu::TextureFormat::SIGNED_INT32:
+               case tcu::TextureFormat::SIGNED_INT16:
+               case tcu::TextureFormat::SIGNED_INT8:
+                       data << "i";
+                       break;
+
+               case tcu::TextureFormat::UNSIGNED_INT32:
+               case tcu::TextureFormat::UNSIGNED_INT16:
+               case tcu::TextureFormat::UNSIGNED_INT8:
+                       data << "u";
+                       break;
+
+               default:
+                       DE_ASSERT(false);
+                       return std::string("");
+       }
+
+       switch (function)
+       {
+               case IMAGE_OPERATION_LOAD:
+                       return "";
+
+               case IMAGE_OPERATION_STORE:
+                       data << "vec4(1, 1, 1, 1)";
+                       break;
+
+               case IMAGE_OPERATION_ATOMIC_ADD:
+               case IMAGE_OPERATION_ATOMIC_MIN:
+               case IMAGE_OPERATION_ATOMIC_MAX:
+               case IMAGE_OPERATION_ATOMIC_AND:
+               case IMAGE_OPERATION_ATOMIC_OR:
+               case IMAGE_OPERATION_ATOMIC_XOR:
+                       return ", 1";
+
+               case IMAGE_OPERATION_ATOMIC_EXCHANGE:
+                       return isFloat ? ", 1.0" : ", 1";
+
+               case IMAGE_OPERATION_ATOMIC_COMP_SWAP:
+                       return ", 1, 1";
+
+               default:
+                       DE_ASSERT(false);
+                       return std::string("");
+       }
+       return data.str();
+}
+
+std::string getMemoryQualifier (MemoryQualifier memory)
+{
+       switch (memory)
+       {
+               case MEMORY_NONE:
+                       return std::string("");
+
+               case MEMORY_WRITEONLY:
+                       return std::string("writeonly");
+
+               case MEMORY_READONLY:
+                       return std::string("readonly");
+
+               case MEMORY_BOTH:
+                       return std::string("writeonly readonly");
+
+               default:
+                       DE_ASSERT(DE_FALSE);
+       }
+
+       return std::string("");
+}
+
+std::string getShaderImageFunctionExtensionString (ImageOperation function)
+{
+       switch (function)
+       {
+               case IMAGE_OPERATION_STORE:
+               case IMAGE_OPERATION_LOAD:
+                       return std::string("");
+
+               case IMAGE_OPERATION_ATOMIC_ADD:
+               case IMAGE_OPERATION_ATOMIC_MIN:
+               case IMAGE_OPERATION_ATOMIC_MAX:
+               case IMAGE_OPERATION_ATOMIC_AND:
+               case IMAGE_OPERATION_ATOMIC_OR:
+               case IMAGE_OPERATION_ATOMIC_XOR:
+               case IMAGE_OPERATION_ATOMIC_EXCHANGE:
+               case IMAGE_OPERATION_ATOMIC_COMP_SWAP:
+                       return std::string("#extension GL_OES_shader_image_atomic : enable");
+
+               default:
+                       DE_ASSERT(DE_FALSE);
+       }
+       return std::string("");
+}
+
+std::string getFunctionName (ImageOperation function)
+{
+       switch (function)
+       {
+               case IMAGE_OPERATION_STORE:                             return std::string("imageStore");
+               case IMAGE_OPERATION_LOAD:                              return std::string("imageLoad");
+               case IMAGE_OPERATION_ATOMIC_ADD:                return std::string("imageAtomicAdd");
+               case IMAGE_OPERATION_ATOMIC_MIN:                return std::string("imageAtomicMin");
+               case IMAGE_OPERATION_ATOMIC_MAX:                return std::string("imageAtomicMax");
+               case IMAGE_OPERATION_ATOMIC_AND:                return std::string("imageAtomicAnd");
+               case IMAGE_OPERATION_ATOMIC_OR:                 return std::string("imageAtomicOr");
+               case IMAGE_OPERATION_ATOMIC_XOR:                return std::string("imageAtomicXor");
+               case IMAGE_OPERATION_ATOMIC_EXCHANGE:   return std::string("imageAtomicExchange");
+               case IMAGE_OPERATION_ATOMIC_COMP_SWAP:  return std::string("imageAtomicCompSwap");
+               default:
+                       DE_ASSERT(DE_FALSE);
+       }
+       return std::string("");
+}
+
+std::string generateShaderSource (ImageOperation function, MemoryQualifier memory, gls::TextureTestUtil::TextureType imageType, const tcu::TextureFormat& format, glu::ShaderType shaderType)
+{
+       const char* shaderTemplate =    "${GLSL_VERSION_DECL}\n"
+                                                                       "${GLSL_TYPE_EXTENSION}\n"
+                                                                       "${GLSL_FUNCTION_EXTENSION}\n"
+                                                                       "${GEOMETRY_SHADER_LAYOUT}\n"
+                                                                       "layout(${LAYOUT_FORMAT}, binding = 0) highp uniform ${MEMORY_QUALIFIER} ${IMAGE_TYPE} u_img0;\n"
+                                                                       "void main(void)\n"
+                                                                       "{\n"
+                                                                       " ${FUNCTION_NAME}(u_img0, ${IMAGE_PARAM_P}${FUNCTION_ARGUMENTS});\n"
+                                                                       "}\n";
+
+       std::map<std::string, std::string> params;
+
+       params["GLSL_VERSION_DECL"] = getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+       params["GLSL_TYPE_EXTENSION"] = getShaderImageTypeExtensionString(imageType);
+       params["GLSL_FUNCTION_EXTENSION"] = getShaderImageFunctionExtensionString(function);
+       params["GEOMETRY_SHADER_LAYOUT"] = getGLShaderType(shaderType) == GL_GEOMETRY_SHADER ? "layout(max_vertices = 3) out;" : "";
+       params["LAYOUT_FORMAT"] = getShaderImageLayoutQualifier(format);
+       params["MEMORY_QUALIFIER"] = getMemoryQualifier(memory);
+       params["IMAGE_TYPE"] = getShaderImageTypeDeclaration(format, imageType);
+       params["FUNCTION_NAME"] = getFunctionName(function);
+       params["IMAGE_PARAM_P"] = getShaderImageParamP(imageType);
+       params["FUNCTION_ARGUMENTS"] = getOtherFunctionArguments(format, function);
+
+       return tcu::StringTemplate(shaderTemplate).specialize(params);
+}
+
+void testShader (NegativeTestContext& ctx, ImageOperation function, MemoryQualifier memory, gls::TextureTestUtil::TextureType imageType, const tcu::TextureFormat& format)
+{
+       tcu::TestLog& log = ctx.getLog();
+       ctx.beginSection(getFunctionName(function) + " " + getMemoryQualifier(memory) + " " + getShaderImageLayoutQualifier(format));
+       for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(s_shaders); ndx++)
+       {
+               if (ctx.isShaderSupported(s_shaders[ndx]))
+               {
+                       ctx.beginSection(std::string("Verify shader: ") + glu::getShaderTypeName(s_shaders[ndx]));
+                       std::string                             shaderSource(generateShaderSource(function, memory, imageType, format, s_shaders[ndx]));
+                       const glu::ShaderProgram        program(ctx.getRenderContext(), glu::ProgramSources() << glu::ShaderSource(s_shaders[ndx], shaderSource));
+                       if (program.getShaderInfo(s_shaders[ndx]).compileOk)
+                       {
+                               log << program;
+                               log << tcu::TestLog::Message << "Expected program to fail, but compilation passed." << tcu::TestLog::EndMessage;
+                               ctx.fail("Shader was not expected to compile.");
+                       }
+                       ctx.endSection();
+               }
+       }
+       ctx.endSection();
+}
+
+void image_store (NegativeTestContext& ctx)
+{
+       const tcu::TextureFormat formats[] =
+       {
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::FLOAT),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::HALF_FLOAT),
+               tcu::TextureFormat(tcu::TextureFormat::R,               tcu::TextureFormat::FLOAT),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::UNORM_INT8),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::SNORM_INT8),
+
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::SIGNED_INT32),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::SIGNED_INT16),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::SIGNED_INT8),
+               tcu::TextureFormat(tcu::TextureFormat::R,               tcu::TextureFormat::SIGNED_INT32),
+
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::UNSIGNED_INT32),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::UNSIGNED_INT16),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::UNSIGNED_INT8),
+               tcu::TextureFormat(tcu::TextureFormat::R,               tcu::TextureFormat::UNSIGNED_INT32)
+       };
+
+       const MemoryQualifier memoryOptions[] =
+       {
+               MEMORY_READONLY,
+               MEMORY_BOTH
+       };
+
+       ctx.beginSection("It is an error to pass a readonly image to imageStore.");
+       for (int memoryNdx = 0; memoryNdx < DE_LENGTH_OF_ARRAY(memoryOptions); ++memoryNdx)
+       {
+               for (int fmtNdx = 0; fmtNdx < DE_LENGTH_OF_ARRAY(formats); ++fmtNdx)
+               {
+                       for (int typeNdx = 0; typeNdx < DE_LENGTH_OF_ARRAY(s_imageTypes); ++typeNdx)
+                       {
+                               testShader(ctx, IMAGE_OPERATION_STORE, memoryOptions[memoryNdx], s_imageTypes[typeNdx], formats[fmtNdx]);
+                       }
+               }
+       }
+       ctx.endSection();
+}
+
+void image_load (NegativeTestContext& ctx)
+{
+       const tcu::TextureFormat formats[] =
+       {
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::FLOAT),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::HALF_FLOAT),
+               tcu::TextureFormat(tcu::TextureFormat::R,               tcu::TextureFormat::FLOAT),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::UNORM_INT8),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::SNORM_INT8),
+
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::SIGNED_INT32),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::SIGNED_INT16),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::SIGNED_INT8),
+               tcu::TextureFormat(tcu::TextureFormat::R,               tcu::TextureFormat::SIGNED_INT32),
+
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::UNSIGNED_INT32),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::UNSIGNED_INT16),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::UNSIGNED_INT8),
+               tcu::TextureFormat(tcu::TextureFormat::R,               tcu::TextureFormat::UNSIGNED_INT32)
+       };
+
+       const MemoryQualifier memoryOptions[] =
+       {
+               MEMORY_WRITEONLY,
+               MEMORY_BOTH
+       };
+
+       ctx.beginSection("It is an error to pass a writeonly image to imageLoad.");
+       for (int memoryNdx = 0; memoryNdx < DE_LENGTH_OF_ARRAY(memoryOptions); ++memoryNdx)
+       {
+               for (int fmtNdx = 0; fmtNdx < DE_LENGTH_OF_ARRAY(formats); ++fmtNdx)
+               {
+                       for (int typeNdx = 0; typeNdx < DE_LENGTH_OF_ARRAY(s_imageTypes); ++typeNdx)
+                       {
+                               testShader(ctx, IMAGE_OPERATION_LOAD, memoryOptions[memoryNdx], s_imageTypes[typeNdx], formats[fmtNdx]);
+                       }
+               }
+       }
+       ctx.endSection();
+}
+
+void image_atomic (NegativeTestContext& ctx)
+{
+       const tcu::TextureFormat formats[] =
+       {
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::SIGNED_INT32),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::SIGNED_INT16),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::SIGNED_INT8),
+               tcu::TextureFormat(tcu::TextureFormat::R,               tcu::TextureFormat::SIGNED_INT32),
+
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::UNSIGNED_INT32),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::UNSIGNED_INT16),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::UNSIGNED_INT8),
+               tcu::TextureFormat(tcu::TextureFormat::R,               tcu::TextureFormat::UNSIGNED_INT32)
+       };
+
+       const MemoryQualifier memoryOptions[] =
+       {
+               MEMORY_READONLY,
+               MEMORY_WRITEONLY,
+               MEMORY_BOTH
+       };
+
+       const ImageOperation imageOperations[] =
+       {
+               IMAGE_OPERATION_ATOMIC_ADD,
+               IMAGE_OPERATION_ATOMIC_MIN,
+               IMAGE_OPERATION_ATOMIC_MAX,
+               IMAGE_OPERATION_ATOMIC_AND,
+               IMAGE_OPERATION_ATOMIC_OR,
+               IMAGE_OPERATION_ATOMIC_XOR,
+               IMAGE_OPERATION_ATOMIC_COMP_SWAP
+       };
+
+       ctx.beginSection("It is an error to pass a writeonly and/or readonly image to imageAtomic*.");
+       for (int memoryNdx = 0; memoryNdx < DE_LENGTH_OF_ARRAY(memoryOptions); ++memoryNdx)
+       {
+               for (int fmtNdx = 0; fmtNdx < DE_LENGTH_OF_ARRAY(formats); ++fmtNdx)
+               {
+                       for (int typeNdx = 0; typeNdx < DE_LENGTH_OF_ARRAY(s_imageTypes); ++typeNdx)
+                       {
+                               for (int functionNdx = 0; functionNdx < DE_LENGTH_OF_ARRAY(imageOperations); ++functionNdx)
+                               {
+                                       testShader(ctx, imageOperations[functionNdx], memoryOptions[memoryNdx], s_imageTypes[typeNdx], formats[fmtNdx]);
+                               }
+                       }
+               }
+       }
+       ctx.endSection();
+}
+
+void image_atomic_exchange (NegativeTestContext& ctx)
+{
+       const tcu::TextureFormat formats[] =
+       {
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::FLOAT),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::HALF_FLOAT),
+               tcu::TextureFormat(tcu::TextureFormat::R,               tcu::TextureFormat::FLOAT),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::UNORM_INT8),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::SNORM_INT8),
+
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::SIGNED_INT32),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::SIGNED_INT16),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::SIGNED_INT8),
+               tcu::TextureFormat(tcu::TextureFormat::R,               tcu::TextureFormat::SIGNED_INT32),
+
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::UNSIGNED_INT32),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::UNSIGNED_INT16),
+               tcu::TextureFormat(tcu::TextureFormat::RGBA,    tcu::TextureFormat::UNSIGNED_INT8),
+               tcu::TextureFormat(tcu::TextureFormat::R,               tcu::TextureFormat::UNSIGNED_INT32)
+       };
+
+       const MemoryQualifier memoryOptions[] =
+       {
+               MEMORY_READONLY,
+               MEMORY_WRITEONLY,
+               MEMORY_BOTH
+       };
+
+       ctx.beginSection("It is an error to pass a writeonly and/or readonly image to imageAtomic*.");
+       for (int memoryNdx = 0; memoryNdx < DE_LENGTH_OF_ARRAY(memoryOptions); ++memoryNdx)
+       {
+               for (int fmtNdx = 0; fmtNdx < DE_LENGTH_OF_ARRAY(formats); ++fmtNdx)
+               {
+                       for (int typeNdx = 0; typeNdx < DE_LENGTH_OF_ARRAY(s_imageTypes); ++typeNdx)
+                       {
+                               testShader(ctx, IMAGE_OPERATION_ATOMIC_EXCHANGE, memoryOptions[memoryNdx], s_imageTypes[typeNdx], formats[fmtNdx]);
+                       }
+               }
+       }
+       ctx.endSection();
+}
+
+} // anonymous
+
+std::vector<FunctionContainer> getNegativeShaderImageLoadStoreTestFunctions (void)
+{
+       const FunctionContainer funcs[] =
+       {
+               {image_store,                           "image_store",                          "Test incorrect usage of imageStore()"                  },
+               {image_load,                            "image_load",                           "Test incorrect usage of imageLoad()"                   },
+               {image_atomic,                          "image_atomic",                         "Test incorrect usage of imageAtomic*()"                },
+               {image_atomic_exchange,         "image_atomic_exchange",        "Test incorrect usage of imageAtomicExchange()" },
+       };
+
+       return std::vector<FunctionContainer>(DE_ARRAY_BEGIN(funcs), DE_ARRAY_END(funcs));
+}
+
+} // NegativeTestShared
+} // Functional
+} // gles31
+} // deqp
diff --git a/modules/gles31/functional/es31fNegativeShaderImageLoadStoreTests.hpp b/modules/gles31/functional/es31fNegativeShaderImageLoadStoreTests.hpp
new file mode 100644 (file)
index 0000000..b599bfd
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef _ES31FNEGATIVESHADERIMAGELOADSTORETESTS_HPP
+#define _ES31FNEGATIVESHADERIMAGELOADSTORETESTS_HPP
+/*-------------------------------------------------------------------------
+ * drawElements Quality Program OpenGL ES 3.1 Module
+ * -------------------------------------------------
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief Negative Shader Image Load Store Tests
+ *//*--------------------------------------------------------------------*/
+
+#include "tcuDefs.hpp"
+#include "es31fNegativeTestShared.hpp"
+
+namespace deqp
+{
+namespace gles31
+{
+namespace Functional
+{
+namespace NegativeTestShared
+{
+
+std::vector<FunctionContainer> getNegativeShaderImageLoadStoreTestFunctions (void);
+
+} // NegativeTestShared
+} // Functional
+} // gles31
+} // deqp
+
+#endif // _ES31FNEGATIVESHADERIMAGELOADSTORETESTS_HPP
index 761259f..90ac2bc 100644 (file)
 #include "glwDefs.hpp"
 #include "glwEnums.hpp"
 
+#include "tcuStringTemplate.hpp"
+
 #include "deMemory.h"
 
+#include <string>
+#include <map>
+
 namespace deqp
 {
 namespace gles31
@@ -45,7 +50,7 @@ using tcu::TestLog;
 using glu::CallLogWrapper;
 using namespace glw;
 
-static const char* uniformTestVertSource       =       "#version 300 es\n"
+static const char* uniformTestVertSource       =       "${GLSL_VERSION_DECL}\n"
                                                                                                "uniform mediump vec4 vUnif_vec4;\n"
                                                                                                "in mediump vec4 attr;"
                                                                                                "layout(shared) uniform Block { mediump vec4 blockVar; };\n"
@@ -53,7 +58,8 @@ static const char* uniformTestVertSource      =       "#version 300 es\n"
                                                                                                "{\n"
                                                                                                "       gl_Position = vUnif_vec4 + blockVar + attr;\n"
                                                                                                "}\n\0";
-static const char* uniformTestFragSource       =       "#version 300 es\n"
+
+static const char* uniformTestFragSource       =       "${GLSL_VERSION_DECL}\n"
                                                                                                "uniform mediump ivec4 fUnif_ivec4;\n"
                                                                                                "uniform mediump uvec4 fUnif_uvec4;\n"
                                                                                                "layout(location = 0) out mediump vec4 fragColor;"
@@ -62,6 +68,17 @@ static const char* uniformTestFragSource     =       "#version 300 es\n"
                                                                                                "       fragColor = vec4(vec4(fUnif_ivec4) + vec4(fUnif_uvec4));\n"
                                                                                                "}\n\0";
 
+static std::string getVtxFragVersionSources (const std::string source, NegativeTestContext& ctx)
+{
+       const bool isES32 = glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+
+       std::map<std::string, std::string> args;
+
+       args["GLSL_VERSION_DECL"] = isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_300_ES);
+
+       return tcu::StringTemplate(source).specialize(args);
+}
+
 // Enabling & disabling states
 void enable (NegativeTestContext& ctx)
 {
@@ -71,6 +88,22 @@ void enable (NegativeTestContext& ctx)
        ctx.endSection();
 }
 
+// Enabling & disabling states
+void enablei (NegativeTestContext& ctx)
+{
+       TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a higher context version.");
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if cap is not one of the allowed values.");
+       ctx.glEnablei(-1, -1);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_VALUE is generated  if index is greater than or equal to the number of indexed capabilities for cap.");
+       ctx.glEnablei(GL_BLEND, -1);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+}
+
 void disable (NegativeTestContext& ctx)
 {
        ctx.beginSection("GL_INVALID_ENUM is generated if cap is not one of the allowed values.");
@@ -79,6 +112,21 @@ void disable (NegativeTestContext& ctx)
        ctx.endSection();
 }
 
+void disablei (NegativeTestContext& ctx)
+{
+       TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a higher context version.");
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if cap is not one of the allowed values.");
+       ctx.glDisablei(-1,-1);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_VALUE is generated  if index is greater than or equal to the number of indexed capabilities for cap.");
+       ctx.glDisablei(GL_BLEND, -1);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+}
+
 // Simple state queries
 void get_booleanv (NegativeTestContext& ctx)
 {
@@ -89,6 +137,24 @@ void get_booleanv (NegativeTestContext& ctx)
        ctx.endSection();
 }
 
+void get_booleani_v (NegativeTestContext& ctx)
+{
+       GLboolean       data                                            = -1;
+       GLint           maxUniformBufferBindings        = 0;
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if target is not indexed state queriable with these commands.");
+       ctx.glGetBooleani_v(-1, 0, &data);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if index is outside of the valid range for the indexed state target.");
+       ctx.glGetIntegerv(GL_MAX_UNIFORM_BUFFER_BINDINGS, &maxUniformBufferBindings);
+       ctx.expectError(GL_NO_ERROR);
+       ctx.glGetBooleani_v(GL_UNIFORM_BUFFER_BINDING, maxUniformBufferBindings, &data);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+}
+
 void get_floatv (NegativeTestContext& ctx)
 {
        ctx.beginSection("GL_INVALID_ENUM is generated if pname is not one of the allowed values.");
@@ -100,8 +166,8 @@ void get_floatv (NegativeTestContext& ctx)
 
 void get_integerv (NegativeTestContext& ctx)
 {
-       ctx.beginSection("GL_INVALID_ENUM is generated if pname is not one of the allowed values.");
        GLint params = -1;
+       ctx.beginSection("GL_INVALID_ENUM is generated if pname is not one of the allowed values.");
        ctx.glGetIntegerv(-1, &params);
        ctx.expectError(GL_INVALID_ENUM);
        ctx.endSection();
@@ -109,8 +175,8 @@ void get_integerv (NegativeTestContext& ctx)
 
 void get_integer64v (NegativeTestContext& ctx)
 {
-       ctx.beginSection("GL_INVALID_ENUM is generated if pname is not one of the allowed values.");
        GLint64 params = -1;
+       ctx.beginSection("GL_INVALID_ENUM is generated if pname is not one of the allowed values.");
        ctx.glGetInteger64v(-1, &params);
        ctx.expectError(GL_INVALID_ENUM);
        ctx.endSection();
@@ -136,8 +202,8 @@ void get_integeri_v (NegativeTestContext& ctx)
 
 void get_integer64i_v (NegativeTestContext& ctx)
 {
-       GLint64 data                                    = (GLint64)-1;
-       GLint maxUniformBufferBindings  = 0;
+       GLint64 data                                            = (GLint64)-1;
+       GLint   maxUniformBufferBindings        = 0;
 
        ctx.beginSection("GL_INVALID_ENUM is generated if name is not an accepted value.");
        ctx.glGetInteger64i_v(-1, 0, &data);
@@ -180,10 +246,10 @@ void get_stringi (NegativeTestContext& ctx)
 
 void get_attached_shaders (NegativeTestContext& ctx)
 {
-       GLuint shaders[1]       = { 0 };
-       GLuint shaderObject = ctx.glCreateShader(GL_VERTEX_SHADER);
-       GLuint program          = ctx.glCreateProgram();
-       GLsizei count[1]        = { 0 };
+       GLuint  shaders[1]              = { 0 };
+       GLuint  shaderObject    = ctx.glCreateShader(GL_VERTEX_SHADER);
+       GLuint  program                 = ctx.glCreateProgram();
+       GLsizei count[1]                = { 0 };
 
        ctx.beginSection("GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
        ctx.glGetAttachedShaders(-1, 1, &count[0], &shaders[0]);
@@ -206,14 +272,14 @@ void get_attached_shaders (NegativeTestContext& ctx)
 
 void get_shaderiv (NegativeTestContext& ctx)
 {
-       GLboolean shaderCompilerSupported;
+       GLboolean       shaderCompilerSupported;
+       GLuint          shader          = ctx.glCreateShader(GL_VERTEX_SHADER);
+       GLuint          program         = ctx.glCreateProgram();
+       GLint           param[1]        = { -1 };
+
        ctx.glGetBooleanv(GL_SHADER_COMPILER, &shaderCompilerSupported);
        ctx.getLog() << TestLog::Message << "// GL_SHADER_COMPILER = " << (shaderCompilerSupported ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage;
 
-       GLuint shader   = ctx.glCreateShader(GL_VERTEX_SHADER);
-       GLuint program  = ctx.glCreateProgram();
-       GLint param[1]  = { -1 };
-
        ctx.beginSection("GL_INVALID_ENUM is generated if pname is not an accepted value.");
        ctx.glGetShaderiv(shader, -1, &param[0]);
        ctx.expectError(GL_INVALID_ENUM);
@@ -261,13 +327,13 @@ void get_shader_info_log (NegativeTestContext& ctx)
 
 void get_shader_precision_format (NegativeTestContext& ctx)
 {
-       GLboolean shaderCompilerSupported;
+       GLboolean       shaderCompilerSupported;
+       GLint           range[2];
+       GLint           precision[1];
+
        ctx.glGetBooleanv(GL_SHADER_COMPILER, &shaderCompilerSupported);
        ctx.getLog() << TestLog::Message << "// GL_SHADER_COMPILER = " << (shaderCompilerSupported ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage;
 
-       GLint range[2];
-       GLint precision[1];
-
        deMemset(&range[0], 0xcd, sizeof(range));
        deMemset(&precision[0], 0xcd, sizeof(precision));
 
@@ -364,7 +430,7 @@ void get_program_info_log (NegativeTestContext& ctx)
 
 void get_tex_parameterfv (NegativeTestContext& ctx)
 {
-       GLfloat params[1]       = { 0 };
+       GLfloat params[1] = { 0 };
 
        ctx.beginSection("GL_INVALID_ENUM is generated if target or pname is not an accepted value.");
        ctx.glGetTexParameterfv (-1, GL_TEXTURE_MAG_FILTER, &params[0]);
@@ -378,7 +444,7 @@ void get_tex_parameterfv (NegativeTestContext& ctx)
 
 void get_tex_parameteriv (NegativeTestContext& ctx)
 {
-       GLint params[1] = { 0 };
+       GLint params[1] = { 0 };
 
        ctx.beginSection("GL_INVALID_ENUM is generated if target or pname is not an accepted value.");
        ctx.glGetTexParameteriv (-1, GL_TEXTURE_MAG_FILTER, &params[0]);
@@ -390,18 +456,54 @@ void get_tex_parameteriv (NegativeTestContext& ctx)
        ctx.endSection();
 }
 
+void get_tex_parameteriiv (NegativeTestContext& ctx)
+{
+       TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a higher context version.");
+
+       GLint params[1] = { 0 };
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if target or pname is not an accepted value.");
+       ctx.glGetTexParameterIiv(-1, GL_TEXTURE_MAG_FILTER, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glGetTexParameterIiv(GL_TEXTURE_2D, -1, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glGetTexParameterIiv(-1, -1, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+}
+
+void get_tex_parameteriuiv (NegativeTestContext& ctx)
+{
+       TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a higher context version.");
+
+       GLuint params[1] = { 0 };
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if target or pname is not an accepted value.");
+       ctx.glGetTexParameterIuiv(-1, GL_TEXTURE_MAG_FILTER, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glGetTexParameterIuiv(GL_TEXTURE_2D, -1, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glGetTexParameterIuiv(-1, -1, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+}
+
 void get_uniformfv (NegativeTestContext& ctx)
 {
-       glu::ShaderProgram program(ctx.getRenderContext(), glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
+       glu::ShaderProgram      program         (ctx.getRenderContext(), glu::makeVtxFragSources(getVtxFragVersionSources(uniformTestVertSource, ctx), getVtxFragVersionSources(uniformTestFragSource, ctx)));
+       GLfloat                         params[4]       = { 0.f };
+       GLuint                          shader;
+       GLuint                          programEmpty;
+       GLint                           unif;
+
        ctx.glUseProgram(program.getProgram());
 
-       GLint unif = ctx.glGetUniformLocation(program.getProgram(), "vUnif_vec4");      // vec4
+       unif = ctx.glGetUniformLocation(program.getProgram(), "vUnif_vec4");    // vec4
        if (unif == -1)
                ctx.fail("Failed to retrieve uniform location");
 
-       GLuint shader           = ctx.glCreateShader(GL_VERTEX_SHADER);
-       GLuint programEmpty = ctx.glCreateProgram();
-       GLfloat params[4]       = { 0.f };
+       shader = ctx.glCreateShader(GL_VERTEX_SHADER);
+       programEmpty = ctx.glCreateProgram();
 
        ctx.beginSection("GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
        ctx.glGetUniformfv (-1, unif, &params[0]);
@@ -427,18 +529,71 @@ void get_uniformfv (NegativeTestContext& ctx)
        ctx.glDeleteProgram(programEmpty);
 }
 
+void get_nuniformfv (NegativeTestContext& ctx)
+{
+       TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a higher context version.");
+
+       glu::ShaderProgram      program                 (ctx.getRenderContext(), glu::makeVtxFragSources(getVtxFragVersionSources(uniformTestVertSource, ctx), getVtxFragVersionSources(uniformTestFragSource, ctx)));
+       GLint                           unif                    = ctx.glGetUniformLocation(program.getProgram(), "vUnif_vec4");
+       GLfloat                         params[4]               = { 0.0f, 0.0f, 0.0f, 0.0f };
+       GLuint                          shader;
+       GLuint                          programEmpty;
+       GLsizei                         bufferSize;
+
+       ctx.glUseProgram(program.getProgram());
+
+       if (unif == -1)
+               ctx.fail("Failed to retrieve uniform location");
+
+       shader                  = ctx.glCreateShader(GL_VERTEX_SHADER);
+       programEmpty    = ctx.glCreateProgram();
+
+       ctx.glGetIntegerv(GL_MAX_COMBINED_UNIFORM_BLOCKS, &bufferSize);
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
+       ctx.glGetnUniformfv(-1, unif, bufferSize, &params[0]);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if program is not a program object.");
+       ctx.glGetnUniformfv(shader, unif, bufferSize, &params[0]);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if program has not been successfully linked.");
+       ctx.glGetnUniformfv(programEmpty, unif, bufferSize, &params[0]);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if location does not correspond to a valid uniform variable location for the specified program object.");
+       ctx.glGetnUniformfv(program.getProgram(), -1, bufferSize, &params[0]);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if the buffer size required to store the requested data is greater than bufSize.");
+       ctx.glGetnUniformfv(program.getProgram(), unif, 0, &params[0]);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.glDeleteShader(shader);
+       ctx.glDeleteProgram(programEmpty);
+}
+
 void get_uniformiv (NegativeTestContext& ctx)
 {
-       glu::ShaderProgram program(ctx.getRenderContext(), glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
+       glu::ShaderProgram      program                 (ctx.getRenderContext(), glu::makeVtxFragSources(getVtxFragVersionSources(uniformTestVertSource, ctx), getVtxFragVersionSources(uniformTestFragSource, ctx)));
+       GLint                           unif                    = ctx.glGetUniformLocation(program.getProgram(), "fUnif_ivec4");
+       GLint                           params[4]               = { 0, 0, 0, 0 };
+       GLuint                          shader;
+       GLuint                          programEmpty;
+
        ctx.glUseProgram(program.getProgram());
 
-       GLint unif = ctx.glGetUniformLocation(program.getProgram(), "fUnif_ivec4");     // ivec4
        if (unif == -1)
                ctx.fail("Failed to retrieve uniform location");
 
-       GLuint shader           = ctx.glCreateShader(GL_VERTEX_SHADER);
-       GLuint programEmpty = ctx.glCreateProgram();
-       GLint params[4]         = { 0 };
+       shader = ctx.glCreateShader(GL_VERTEX_SHADER);
+       programEmpty = ctx.glCreateProgram();
 
        ctx.beginSection("GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
        ctx.glGetUniformiv (-1, unif, &params[0]);
@@ -464,18 +619,71 @@ void get_uniformiv (NegativeTestContext& ctx)
        ctx.glDeleteProgram(programEmpty);
 }
 
+void get_nuniformiv (NegativeTestContext& ctx)
+{
+       TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a higher context version.");
+
+       glu::ShaderProgram      program                 (ctx.getRenderContext(), glu::makeVtxFragSources(getVtxFragVersionSources(uniformTestVertSource, ctx), getVtxFragVersionSources(uniformTestFragSource, ctx)));
+       GLint                           unif                    = ctx.glGetUniformLocation(program.getProgram(), "fUnif_ivec4");
+       GLint                           params[4]               = { 0, 0, 0, 0 };
+       GLuint                          shader;
+       GLuint                          programEmpty;
+       GLsizei                         bufferSize;
+
+       ctx.glUseProgram(program.getProgram());
+
+       if (unif == -1)
+               ctx.fail("Failed to retrieve uniform location");
+
+       shader = ctx.glCreateShader(GL_VERTEX_SHADER);
+       programEmpty = ctx.glCreateProgram();
+
+       ctx.glGetIntegerv(GL_MAX_COMBINED_UNIFORM_BLOCKS, &bufferSize);
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
+       ctx.glGetnUniformiv(-1, unif, bufferSize, &params[0]);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if program is not a program object.");
+       ctx.glGetnUniformiv(shader, unif, bufferSize, &params[0]);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if program has not been successfully linked.");
+       ctx.glGetnUniformiv(programEmpty, unif, bufferSize, &params[0]);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if location does not correspond to a valid uniform variable location for the specified program object.");
+       ctx.glGetnUniformiv(program.getProgram(), -1, bufferSize, &params[0]);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if the buffer size required to store the requested data is greater than bufSize.");
+       ctx.glGetnUniformiv(program.getProgram(), unif, - 1, &params[0]);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.glDeleteShader(shader);
+       ctx.glDeleteProgram(programEmpty);
+}
+
 void get_uniformuiv (NegativeTestContext& ctx)
 {
-       glu::ShaderProgram program(ctx.getRenderContext(), glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
+       glu::ShaderProgram      program                 (ctx.getRenderContext(), glu::makeVtxFragSources(getVtxFragVersionSources(uniformTestVertSource, ctx), getVtxFragVersionSources(uniformTestFragSource, ctx)));
+       GLint                           unif                    = ctx.glGetUniformLocation(program.getProgram(), "fUnif_uvec4");
+       GLuint                          params[4]               = { 0, 0, 0, 0 };
+       GLuint                          shader;
+       GLuint                          programEmpty;
+
        ctx.glUseProgram(program.getProgram());
 
-       GLint unif = ctx.glGetUniformLocation(program.getProgram(), "fUnif_uvec4");     // uvec4
        if (unif == -1)
                ctx.fail("Failed to retrieve uniform location");
 
-       GLuint shader           = ctx.glCreateShader(GL_VERTEX_SHADER);
-       GLuint programEmpty = ctx.glCreateProgram();
-       GLuint params[4]        = { 0 };
+       shader = ctx.glCreateShader(GL_VERTEX_SHADER);
+       programEmpty = ctx.glCreateProgram();
 
        ctx.beginSection("GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
        ctx.glGetUniformuiv (-1, unif, &params[0]);
@@ -501,10 +709,60 @@ void get_uniformuiv (NegativeTestContext& ctx)
        ctx.glDeleteProgram(programEmpty);
 }
 
+void get_nuniformuiv (NegativeTestContext& ctx)
+{
+       TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a higher context version.");
+
+       glu::ShaderProgram      program                 (ctx.getRenderContext(), glu::makeVtxFragSources(getVtxFragVersionSources(uniformTestVertSource, ctx), getVtxFragVersionSources(uniformTestFragSource, ctx)));
+       GLint                           unif                    = ctx.glGetUniformLocation(program.getProgram(), "fUnif_ivec4");
+       GLuint                          params[4]               = { 0, 0, 0, 0 };
+       GLuint                          shader;
+       GLuint                          programEmpty;
+       GLsizei                         bufferSize;
+
+       ctx.glUseProgram(program.getProgram());
+
+       if (unif == -1)
+               ctx.fail("Failed to retrieve uniform location");
+
+       shader = ctx.glCreateShader(GL_VERTEX_SHADER);
+       programEmpty = ctx.glCreateProgram();
+
+       ctx.glGetIntegerv(GL_MAX_COMBINED_UNIFORM_BLOCKS, &bufferSize);
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
+       ctx.glGetnUniformuiv(-1, unif, bufferSize, &params[0]);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if program is not a program object.");
+       ctx.glGetnUniformuiv(shader, unif, bufferSize, &params[0]);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if program has not been successfully linked.");
+       ctx.glGetnUniformuiv(programEmpty, unif, bufferSize, &params[0]);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if location does not correspond to a valid uniform variable location for the specified program object.");
+       ctx.glGetnUniformuiv(program.getProgram(), -1, bufferSize, &params[0]);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if the buffer size required to store the requested data is greater than bufSize.");
+       ctx.glGetnUniformuiv(program.getProgram(), unif, -1, &params[0]);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.glDeleteShader(shader);
+       ctx.glDeleteProgram(programEmpty);
+}
+
 void get_active_uniform (NegativeTestContext& ctx)
 {
        GLuint                          shader                          = ctx.glCreateShader(GL_VERTEX_SHADER);
-       glu::ShaderProgram      program                         (ctx.getRenderContext(), glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
+       glu::ShaderProgram      program                         (ctx.getRenderContext(), glu::makeVtxFragSources(getVtxFragVersionSources(uniformTestVertSource, ctx), getVtxFragVersionSources(uniformTestFragSource, ctx)));
        GLint                           numActiveUniforms       = -1;
 
        ctx.glGetProgramiv      (program.getProgram(), GL_ACTIVE_UNIFORMS,      &numActiveUniforms);
@@ -538,7 +796,7 @@ void get_active_uniform (NegativeTestContext& ctx)
 void get_active_uniformsiv (NegativeTestContext& ctx)
 {
        GLuint                                  shader                          = ctx.glCreateShader(GL_VERTEX_SHADER);
-       glu::ShaderProgram              program                         (ctx.getRenderContext(), glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
+       glu::ShaderProgram              program                         (ctx.getRenderContext(), glu::makeVtxFragSources(getVtxFragVersionSources(uniformTestVertSource, ctx), getVtxFragVersionSources(uniformTestFragSource, ctx)));
        GLuint                                  dummyUniformIndex       = 1;
        GLint                                   dummyParamDst           = -1;
        GLint                                   numActiveUniforms       = -1;
@@ -583,13 +841,24 @@ void get_active_uniformsiv (NegativeTestContext& ctx)
 
 void get_active_uniform_blockiv (NegativeTestContext& ctx)
 {
-       glu::ShaderProgram      program                 (ctx.getRenderContext(), glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
+       glu::ShaderProgram      program                 (ctx.getRenderContext(), glu::makeVtxFragSources(getVtxFragVersionSources(uniformTestVertSource, ctx), getVtxFragVersionSources(uniformTestFragSource, ctx)));
+       GLuint                          shader                  = ctx.glCreateShader(GL_VERTEX_SHADER);
        GLint                           params                  = -1;
        GLint                           numActiveBlocks = -1;
 
-       ctx.glGetProgramiv      (program.getProgram(), GL_ACTIVE_UNIFORM_BLOCKS,        &numActiveBlocks);
+       ctx.glGetProgramiv(program.getProgram(), GL_ACTIVE_UNIFORM_BLOCKS, &numActiveBlocks);
        ctx.getLog() << TestLog::Message << "// GL_ACTIVE_UNIFORM_BLOCKS = " << numActiveBlocks << " (expected 1)." << TestLog::EndMessage;
-       ctx.expectError         (GL_NO_ERROR);
+       ctx.expectError(GL_NO_ERROR);
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if program is not the name of either a program or shader object.");
+       ctx.glGetActiveUniformBlockiv(-1, 0, GL_UNIFORM_BLOCK_BINDING, &params);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if program is the name of a shader object");
+       ctx.glGetActiveUniformBlockiv(shader, 0, GL_UNIFORM_BLOCK_BINDING, &params);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
 
        ctx.beginSection("GL_INVALID_VALUE is generated if uniformBlockIndex is greater than or equal to the value of GL_ACTIVE_UNIFORM_BLOCKS or is not the index of an active uniform block in program.");
        ctx.glUseProgram(program.getProgram());
@@ -608,16 +877,27 @@ void get_active_uniform_blockiv (NegativeTestContext& ctx)
 
 void get_active_uniform_block_name (NegativeTestContext& ctx)
 {
-       glu::ShaderProgram      program                 (ctx.getRenderContext(), glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
+       glu::ShaderProgram      program                 (ctx.getRenderContext(), glu::makeVtxFragSources(getVtxFragVersionSources(uniformTestVertSource, ctx), getVtxFragVersionSources(uniformTestFragSource, ctx)));
+       GLuint                          shader                  = ctx.glCreateShader(GL_VERTEX_SHADER);
        GLsizei                         length                  = -1;
        GLint                           numActiveBlocks = -1;
        GLchar                          uniformBlockName[128];
 
        deMemset(&uniformBlockName[0], 0, sizeof(uniformBlockName));
 
-       ctx.glGetProgramiv      (program.getProgram(), GL_ACTIVE_UNIFORM_BLOCKS,        &numActiveBlocks);
+       ctx.glGetProgramiv(program.getProgram(), GL_ACTIVE_UNIFORM_BLOCKS, &numActiveBlocks);
        ctx.getLog() << TestLog::Message << "// GL_ACTIVE_UNIFORM_BLOCKS = " << numActiveBlocks << " (expected 1)." << TestLog::EndMessage;
-       ctx.expectError         (GL_NO_ERROR);
+       ctx.expectError(GL_NO_ERROR);
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if program is the name of a shader object.");
+       ctx.glGetActiveUniformBlockName(shader, numActiveBlocks, GL_UNIFORM_BLOCK_BINDING, &length, &uniformBlockName[0]);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if program is not the name of either a program or shader object.");
+       ctx.glGetActiveUniformBlockName(-1, numActiveBlocks, GL_UNIFORM_BLOCK_BINDING, &length, &uniformBlockName[0]);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
 
        ctx.beginSection("GL_INVALID_VALUE is generated if uniformBlockIndex is greater than or equal to the value of GL_ACTIVE_UNIFORM_BLOCKS or is not the index of an active uniform block in program.");
        ctx.glUseProgram(program.getProgram());
@@ -632,9 +912,8 @@ void get_active_uniform_block_name (NegativeTestContext& ctx)
 void get_active_attrib (NegativeTestContext& ctx)
 {
        GLuint                          shader                          = ctx.glCreateShader(GL_VERTEX_SHADER);
-       glu::ShaderProgram      program                         (ctx.getRenderContext(), glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
+       glu::ShaderProgram      program                         (ctx.getRenderContext(), glu::makeVtxFragSources(getVtxFragVersionSources(uniformTestVertSource, ctx), getVtxFragVersionSources(uniformTestFragSource, ctx)));
        GLint                           numActiveAttributes     = -1;
-
        GLsizei                         length                          = -1;
        GLint                           size                            = -1;
        GLenum                          type                            = -1;
@@ -673,15 +952,16 @@ void get_active_attrib (NegativeTestContext& ctx)
 
 void get_uniform_indices (NegativeTestContext& ctx)
 {
-       GLuint shader                   = ctx.glCreateShader(GL_VERTEX_SHADER);
-       glu::ShaderProgram program(ctx.getRenderContext(), glu::makeVtxFragSources(uniformTestVertSource, uniformTestFragSource));
-       GLint numActiveBlocks = -1;
-       const GLchar* uniformName =  "Block.blockVar";
-       GLuint uniformIndices = -1;
-
-       ctx.glGetProgramiv      (program.getProgram(), GL_ACTIVE_UNIFORM_BLOCKS,        &numActiveBlocks);
+       GLuint                          shader                  = ctx.glCreateShader(GL_VERTEX_SHADER);
+       glu::ShaderProgram      program                 (ctx.getRenderContext(), glu::makeVtxFragSources(getVtxFragVersionSources(uniformTestVertSource, ctx), getVtxFragVersionSources(uniformTestFragSource, ctx)));
+       GLint                           numActiveBlocks = -1;
+       const GLchar*           uniformName             = "Block.blockVar";
+       GLuint                          uniformIndices  = -1;
+       GLuint                          invalid                 = -1;
+
+       ctx.glGetProgramiv(program.getProgram(), GL_ACTIVE_UNIFORM_BLOCKS,      &numActiveBlocks);
        ctx.getLog() << TestLog::Message << "// GL_ACTIVE_UNIFORM_BLOCKS = "            << numActiveBlocks                      << TestLog::EndMessage;
-       ctx.expectError         (GL_NO_ERROR);
+       ctx.expectError(GL_NO_ERROR);
 
        ctx.beginSection("GL_INVALID_OPERATION is generated if program is a name of shader object.");
        ctx.glGetUniformIndices(shader, 1, &uniformName, &uniformIndices);
@@ -689,7 +969,6 @@ void get_uniform_indices (NegativeTestContext& ctx)
        ctx.endSection();
 
        ctx.beginSection("GL_INVALID_VALUE is generated if program is not name of program or shader object.");
-       GLuint invalid = -1;
        ctx.glGetUniformIndices(invalid, 1, &uniformName, &uniformIndices);
        ctx.expectError(GL_INVALID_VALUE);
        ctx.endSection();
@@ -700,7 +979,8 @@ void get_uniform_indices (NegativeTestContext& ctx)
 
 void get_vertex_attribfv (NegativeTestContext& ctx)
 {
-       GLfloat params = 0.0f;
+       GLfloat params                          = 0.0f;
+       GLint   maxVertexAttribs;
 
        ctx.beginSection("GL_INVALID_ENUM is generated if pname is not an accepted value.");
        ctx.glGetVertexAttribfv(0, -1, &params);
@@ -708,7 +988,6 @@ void get_vertex_attribfv (NegativeTestContext& ctx)
        ctx.endSection();
 
        ctx.beginSection("GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
-       GLint maxVertexAttribs;
        ctx.glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);
        ctx.glGetVertexAttribfv(maxVertexAttribs, GL_VERTEX_ATTRIB_ARRAY_ENABLED, &params);
        ctx.expectError(GL_INVALID_VALUE);
@@ -717,7 +996,8 @@ void get_vertex_attribfv (NegativeTestContext& ctx)
 
 void get_vertex_attribiv (NegativeTestContext& ctx)
 {
-       GLint params = -1;
+       GLint   params                          = -1;
+       GLint   maxVertexAttribs;
 
        ctx.beginSection("GL_INVALID_ENUM is generated if pname is not an accepted value.");
        ctx.glGetVertexAttribiv(0, -1, &params);
@@ -725,7 +1005,6 @@ void get_vertex_attribiv (NegativeTestContext& ctx)
        ctx.endSection();
 
        ctx.beginSection("GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
-       GLint maxVertexAttribs;
        ctx.glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);
        ctx.glGetVertexAttribiv(maxVertexAttribs, GL_VERTEX_ATTRIB_ARRAY_ENABLED, &params);
        ctx.expectError(GL_INVALID_VALUE);
@@ -734,7 +1013,8 @@ void get_vertex_attribiv (NegativeTestContext& ctx)
 
 void get_vertex_attribi_iv (NegativeTestContext& ctx)
 {
-       GLint params = -1;
+       GLint   params                          = -1;
+       GLint   maxVertexAttribs;
 
        ctx.beginSection("GL_INVALID_ENUM is generated if pname is not an accepted value.");
        ctx.glGetVertexAttribIiv(0, -1, &params);
@@ -742,7 +1022,6 @@ void get_vertex_attribi_iv (NegativeTestContext& ctx)
        ctx.endSection();
 
        ctx.beginSection("GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
-       GLint maxVertexAttribs;
        ctx.glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);
        ctx.glGetVertexAttribIiv(maxVertexAttribs, GL_VERTEX_ATTRIB_ARRAY_ENABLED, &params);
        ctx.expectError(GL_INVALID_VALUE);
@@ -751,7 +1030,8 @@ void get_vertex_attribi_iv (NegativeTestContext& ctx)
 
 void get_vertex_attribi_uiv (NegativeTestContext& ctx)
 {
-       GLuint params = (GLuint)-1;
+       GLuint  params                          = (GLuint)-1;
+       GLint   maxVertexAttribs;
 
        ctx.beginSection("GL_INVALID_ENUM is generated if pname is not an accepted value.");
        ctx.glGetVertexAttribIuiv(0, -1, &params);
@@ -759,7 +1039,6 @@ void get_vertex_attribi_uiv (NegativeTestContext& ctx)
        ctx.endSection();
 
        ctx.beginSection("GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
-       GLint maxVertexAttribs;
        ctx.glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);
        ctx.glGetVertexAttribIuiv(maxVertexAttribs, GL_VERTEX_ATTRIB_ARRAY_ENABLED, &params);
        ctx.expectError(GL_INVALID_VALUE);
@@ -768,7 +1047,8 @@ void get_vertex_attribi_uiv (NegativeTestContext& ctx)
 
 void get_vertex_attrib_pointerv (NegativeTestContext& ctx)
 {
-       GLvoid* ptr[1] = { DE_NULL };
+       GLvoid* ptr[1]                          = { DE_NULL };
+       GLint   maxVertexAttribs;
 
        ctx.beginSection("GL_INVALID_ENUM is generated if pname is not an accepted value.");
        ctx.glGetVertexAttribPointerv(0, -1, &ptr[0]);
@@ -776,7 +1056,6 @@ void get_vertex_attrib_pointerv (NegativeTestContext& ctx)
        ctx.endSection();
 
        ctx.beginSection("GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
-       GLint maxVertexAttribs;
        ctx.glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);
        ctx.glGetVertexAttribPointerv(maxVertexAttribs, GL_VERTEX_ATTRIB_ARRAY_POINTER, &ptr[0]);
        ctx.expectError(GL_INVALID_VALUE);
@@ -806,8 +1085,8 @@ void get_frag_data_location (NegativeTestContext& ctx)
 
 void get_buffer_parameteriv (NegativeTestContext& ctx)
 {
-       GLint params = -1;
-       GLuint buf;
+       GLint   params  = -1;
+       GLuint  buf;
        ctx.glGenBuffers(1, &buf);
        ctx.glBindBuffer(GL_ARRAY_BUFFER, buf);
 
@@ -831,8 +1110,8 @@ void get_buffer_parameteriv (NegativeTestContext& ctx)
 
 void get_buffer_parameteri64v (NegativeTestContext& ctx)
 {
-       GLint64 params = -1;
-       GLuint buf;
+       GLint64 params  = -1;
+       GLuint  buf;
        ctx.glGenBuffers(1, &buf);
        ctx.glBindBuffer(GL_ARRAY_BUFFER, buf);
 
@@ -856,8 +1135,8 @@ void get_buffer_parameteri64v (NegativeTestContext& ctx)
 
 void get_buffer_pointerv (NegativeTestContext& ctx)
 {
-       GLvoid* params = DE_NULL;
-       GLuint buf;
+       GLvoid* params  = DE_NULL;
+       GLuint  buf;
        ctx.glGenBuffers(1, &buf);
        ctx.glBindBuffer(GL_ARRAY_BUFFER, buf);
 
@@ -879,9 +1158,9 @@ void get_buffer_pointerv (NegativeTestContext& ctx)
 
 void get_framebuffer_attachment_parameteriv (NegativeTestContext& ctx)
 {
-       GLint params[1] = { -1 };
-       GLuint fbo;
-       GLuint rbo[2];
+       GLint   params[1]       = { -1 };
+       GLuint  fbo;
+       GLuint  rbo[2];
 
        ctx.glGenFramebuffers                   (1, &fbo);
        ctx.glGenRenderbuffers                  (2, rbo);
@@ -935,8 +1214,8 @@ void get_framebuffer_attachment_parameteriv (NegativeTestContext& ctx)
 
 void get_renderbuffer_parameteriv (NegativeTestContext& ctx)
 {
-       GLint params[1] = { -1 };
-       GLuint rbo;
+       GLint   params[1] = { -1 };
+       GLuint  rbo;
        ctx.glGenRenderbuffers(1, &rbo);
        ctx.glBindRenderbuffer(GL_RENDERBUFFER, rbo);
 
@@ -950,6 +1229,13 @@ void get_renderbuffer_parameteriv (NegativeTestContext& ctx)
        ctx.expectError(GL_INVALID_ENUM);
        ctx.endSection();
 
+       ctx.beginSection("GL_INVALID_OPERATION  is generated if the renderbuffer currently bound to target is zero.");
+       ctx.glBindRenderbuffer(GL_RENDERBUFFER, 0);
+       ctx.expectError(GL_NO_ERROR);
+       ctx.glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &params[0]);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
        ctx.glDeleteRenderbuffers(1, &rbo);
        ctx.glBindRenderbuffer(GL_RENDERBUFFER, 0);
 }
@@ -1051,22 +1337,31 @@ void get_query_objectuiv (NegativeTestContext& ctx)
 
 void get_synciv (NegativeTestContext& ctx)
 {
-       GLsizei length  = -1;
+       GLsizei length          = -1;
        GLint   values[32];
        GLsync  sync;
 
        deMemset(&values[0], 0xcd, sizeof(values));
 
        ctx.beginSection("GL_INVALID_VALUE is generated if sync is not the name of a sync object.");
-       ctx.glGetSynciv (0, GL_OBJECT_TYPE, 32, &length, &values[0]);
-       ctx.expectError (GL_INVALID_VALUE);
+       ctx.glGetSynciv(0, GL_OBJECT_TYPE, 32, &length, &values[0]);
+       ctx.expectError(GL_INVALID_VALUE);
        ctx.endSection();
 
        ctx.beginSection("GL_INVALID_ENUM is generated if pname is not one of the accepted tokens.");
        sync = ctx.glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
-       ctx.expectError (GL_NO_ERROR);
-       ctx.glGetSynciv (sync, -1, 32, &length, &values[0]);
-       ctx.expectError (GL_INVALID_ENUM);
+       ctx.expectError(GL_NO_ERROR);
+       ctx.glGetSynciv(sync, -1, 32, &length, &values[0]);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
+       ctx.glDeleteSync(sync);
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if bufSize is negative.");
+       sync = ctx.glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
+       ctx.expectError(GL_NO_ERROR);
+       ctx.glGetSynciv(sync, GL_OBJECT_TYPE, -1, &length, &values[0]);
+       ctx.expectError(GL_INVALID_VALUE);
        ctx.endSection();
 
        ctx.glDeleteSync(sync);
@@ -1084,6 +1379,23 @@ void is_enabled (NegativeTestContext& ctx)
        ctx.endSection();
 }
 
+void is_enabledi (NegativeTestContext& ctx)
+{
+       TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a higher context version.");
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if cap is not an accepted value.");
+       ctx.glIsEnabledi(-1, 1);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glIsEnabledi(GL_TRIANGLES, 1);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if index is outside the valid range for the indexed state cap.");
+       ctx.glIsEnabledi(GL_BLEND, -1);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+}
+
 // Hints
 
 void hint (NegativeTestContext& ctx)
@@ -1100,53 +1412,62 @@ void hint (NegativeTestContext& ctx)
 
 std::vector<FunctionContainer> getNegativeStateApiTestFunctions ()
 {
-       FunctionContainer funcs[] =
+       const FunctionContainer funcs[] =
        {
-               {enable,                                                                        "enable",                                                                       "Invalid glEnable() usage"                                                         },
-               {disable,                                                                       "disable",                                                                      "Invalid glDisable() usage"                                                        },
-               {get_booleanv,                                                          "get_booleanv",                                                         "Invalid glGetBooleanv() usage"                                            },
-               {get_floatv,                                                            "get_floatv",                                                           "Invalid glGetFloatv() usage"                                              },
-               {get_integerv,                                                          "get_integerv",                                                         "Invalid glGetIntegerv() usage"                                            },
-               {get_integer64v,                                                        "get_integer64v",                                                       "Invalid glGetInteger64v() usage"                                          },
-               {get_integeri_v,                                                        "get_integeri_v",                                                       "Invalid glGetIntegeri_v() usage"                                          },
-               {get_integer64i_v,                                                      "get_integer64i_v",                                                     "Invalid glGetInteger64i_v() usage"                                        },
-               {get_string,                                                            "get_string",                                                           "Invalid glGetString() usage"                                              },
-               {get_stringi,                                                           "get_stringi",                                                          "Invalid glGetStringi() usage"                                             },
-               {get_attached_shaders,                                          "get_attached_shaders",                                         "Invalid glGetAttachedShaders() usage"                             },
-               {get_shaderiv,                                                          "get_shaderiv",                                                         "Invalid glGetShaderiv() usage"                                            },
-               {get_shader_info_log,                                           "get_shader_info_log",                                          "Invalid glGetShaderInfoLog() usage"                               },
-               {get_shader_precision_format,                           "get_shader_precision_format",                          "Invalid glGetShaderPrecisionFormat() usage"               },
-               {get_shader_source,                                                     "get_shader_source",                                            "Invalid glGetShaderSource() usage"                                        },
-               {get_programiv,                                                         "get_programiv",                                                        "Invalid glGetProgramiv() usage"                                           },
-               {get_program_info_log,                                          "get_program_info_log",                                         "Invalid glGetProgramInfoLog() usage"                              },
-               {get_tex_parameterfv,                                           "get_tex_parameterfv",                                          "Invalid glGetTexParameterfv() usage"                              },
-               {get_tex_parameteriv,                                           "get_tex_parameteriv",                                          "Invalid glGetTexParameteriv() usage"                              },
-               {get_uniformfv,                                                         "get_uniformfv",                                                        "Invalid glGetUniformfv() usage"                                           },
-               {get_uniformiv,                                                         "get_uniformiv",                                                        "Invalid glGetUniformiv() usage"                                           },
-               {get_uniformuiv,                                                        "get_uniformuiv",                                                       "Invalid glGetUniformuiv() usage"                                          },
-               {get_active_uniform,                                            "get_active_uniform",                                           "Invalid glGetActiveUniform() usage"                               },
-               {get_active_uniformsiv,                                         "get_active_uniformsiv",                                        "Invalid glGetActiveUniformsiv() usage"                            },
-               {get_active_uniform_blockiv,                            "get_active_uniform_blockiv",                           "Invalid glGetActiveUniformBlockiv() usage"                        },
-               {get_active_uniform_block_name,                         "get_active_uniform_block_name",                        "Invalid glGetActiveUniformBlockName() usage"              },
-               {get_active_attrib,                                                     "get_active_attrib",                                            "Invalid glGetActiveAttrib() usage"                                        },
-               {get_uniform_indices,                                           "get_uniform_indices",                                          "Invalid glGetUniformIndices() usage"                              },
-               {get_vertex_attribfv,                                           "get_vertex_attribfv",                                          "Invalid glGetVertexAttribfv() usage"                              },
-               {get_vertex_attribiv,                                           "get_vertex_attribiv",                                          "Invalid glGetVertexAttribiv() usage"                              },
-               {get_vertex_attribi_iv,                                         "get_vertex_attribi_iv",                                        "Invalid glGetVertexAttribIiv() usage"                             },
-               {get_vertex_attribi_uiv,                                        "get_vertex_attribi_uiv",                                       "Invalid glGetVertexAttribIuiv() usage"                            },
-               {get_vertex_attrib_pointerv,                            "get_vertex_attrib_pointerv",                           "Invalid glGetVertexAttribPointerv() usage"                        },
-               {get_frag_data_location,                                        "get_frag_data_location",                                       "Invalid glGetFragDataLocation() usage"                            },
-               {get_buffer_parameteriv,                                        "get_buffer_parameteriv",                                       "Invalid glGetBufferParameteriv() usage"                           },
-               {get_buffer_parameteri64v,                                      "get_buffer_parameteri64v",                                     "Invalid glGetBufferParameteri64v() usage"                         },
-               {get_buffer_pointerv,                                           "get_buffer_pointerv",                                          "Invalid glGetBufferPointerv() usage"                              },
-               {get_framebuffer_attachment_parameteriv,        "get_framebuffer_attachment_parameteriv",       "Invalid glGetFramebufferAttachmentParameteriv() usage"},
-               {get_renderbuffer_parameteriv,                          "get_renderbuffer_parameteriv",                         "Invalid glGetRenderbufferParameteriv() usage"             },
-               {get_internalformativ,                                          "get_internalformativ",                                         "Invalid glGetInternalformativ() usage"                            },
-               {get_queryiv,                                                           "get_queryiv",                                                          "Invalid glGetQueryiv() usage"                                             },
-               {get_query_objectuiv,                                           "get_query_objectuiv",                                          "Invalid glGetQueryObjectuiv() usage"                              },
-               {get_synciv,                                                            "get_synciv",                                                           "Invalid glGetSynciv() usage"                                              },
-               {is_enabled,                                                            "is_enabled",                                                           "Invalid glIsEnabled() usage"                                              },
-               {hint,                                                                          "hint",                                                                         "Invalid glHint() usage"                                                           },
+               {enable,                                                                        "enable",                                                                       "Invalid glEnable() usage"                                                              },
+               {disable,                                                                       "disable",                                                                      "Invalid glDisable() usage"                                                             },
+               {get_booleanv,                                                          "get_booleanv",                                                         "Invalid glGetBooleanv() usage"                                                 },
+               {get_floatv,                                                            "get_floatv",                                                           "Invalid glGetFloatv() usage"                                                   },
+               {get_integerv,                                                          "get_integerv",                                                         "Invalid glGetIntegerv() usage"                                                 },
+               {get_integer64v,                                                        "get_integer64v",                                                       "Invalid glGetInteger64v() usage"                                               },
+               {get_integeri_v,                                                        "get_integeri_v",                                                       "Invalid glGetIntegeri_v() usage"                                               },
+               {get_booleani_v,                                                        "get_booleani_v",                                                       "Invalid glGetBooleani_v() usage"                                               },
+               {get_integer64i_v,                                                      "get_integer64i_v",                                                     "Invalid glGetInteger64i_v() usage"                                             },
+               {get_string,                                                            "get_string",                                                           "Invalid glGetString() usage"                                                   },
+               {get_stringi,                                                           "get_stringi",                                                          "Invalid glGetStringi() usage"                                                  },
+               {get_attached_shaders,                                          "get_attached_shaders",                                         "Invalid glGetAttachedShaders() usage"                                  },
+               {get_shaderiv,                                                          "get_shaderiv",                                                         "Invalid glGetShaderiv() usage"                                                 },
+               {get_shader_info_log,                                           "get_shader_info_log",                                          "Invalid glGetShaderInfoLog() usage"                                    },
+               {get_shader_precision_format,                           "get_shader_precision_format",                          "Invalid glGetShaderPrecisionFormat() usage"                    },
+               {get_shader_source,                                                     "get_shader_source",                                            "Invalid glGetShaderSource() usage"                                             },
+               {get_programiv,                                                         "get_programiv",                                                        "Invalid glGetProgramiv() usage"                                                },
+               {get_program_info_log,                                          "get_program_info_log",                                         "Invalid glGetProgramInfoLog() usage"                                   },
+               {get_tex_parameterfv,                                           "get_tex_parameterfv",                                          "Invalid glGetTexParameterfv() usage"                                   },
+               {get_tex_parameteriv,                                           "get_tex_parameteriv",                                          "Invalid glGetTexParameteriv() usage"                                   },
+               {get_uniformfv,                                                         "get_uniformfv",                                                        "Invalid glGetUniformfv() usage"                                                },
+               {get_uniformiv,                                                         "get_uniformiv",                                                        "Invalid glGetUniformiv() usage"                                                },
+               {get_uniformuiv,                                                        "get_uniformuiv",                                                       "Invalid glGetUniformuiv() usage"                                               },
+               {get_active_uniform,                                            "get_active_uniform",                                           "Invalid glGetActiveUniform() usage"                                    },
+               {get_active_uniformsiv,                                         "get_active_uniformsiv",                                        "Invalid glGetActiveUniformsiv() usage"                                 },
+               {get_active_uniform_blockiv,                            "get_active_uniform_blockiv",                           "Invalid glGetActiveUniformBlockiv() usage"                             },
+               {get_active_uniform_block_name,                         "get_active_uniform_block_name",                        "Invalid glGetActiveUniformBlockName() usage"                   },
+               {get_active_attrib,                                                     "get_active_attrib",                                            "Invalid glGetActiveAttrib() usage"                                             },
+               {get_uniform_indices,                                           "get_uniform_indices",                                          "Invalid glGetUniformIndices() usage"                                   },
+               {get_vertex_attribfv,                                           "get_vertex_attribfv",                                          "Invalid glGetVertexAttribfv() usage"                                   },
+               {get_vertex_attribiv,                                           "get_vertex_attribiv",                                          "Invalid glGetVertexAttribiv() usage"                                   },
+               {get_vertex_attribi_iv,                                         "get_vertex_attribi_iv",                                        "Invalid glGetVertexAttribIiv() usage"                                  },
+               {get_vertex_attribi_uiv,                                        "get_vertex_attribi_uiv",                                       "Invalid glGetVertexAttribIuiv() usage"                                 },
+               {get_vertex_attrib_pointerv,                            "get_vertex_attrib_pointerv",                           "Invalid glGetVertexAttribPointerv() usage"                             },
+               {get_frag_data_location,                                        "get_frag_data_location",                                       "Invalid glGetFragDataLocation() usage"                                 },
+               {get_buffer_parameteriv,                                        "get_buffer_parameteriv",                                       "Invalid glGetBufferParameteriv() usage"                                },
+               {get_buffer_parameteri64v,                                      "get_buffer_parameteri64v",                                     "Invalid glGetBufferParameteri64v() usage"                              },
+               {get_buffer_pointerv,                                           "get_buffer_pointerv",                                          "Invalid glGetBufferPointerv() usage"                                   },
+               {get_framebuffer_attachment_parameteriv,        "get_framebuffer_attachment_parameteriv",       "Invalid glGetFramebufferAttachmentParameteriv() usage" },
+               {get_renderbuffer_parameteriv,                          "get_renderbuffer_parameteriv",                         "Invalid glGetRenderbufferParameteriv() usage"                  },
+               {get_internalformativ,                                          "get_internalformativ",                                         "Invalid glGetInternalformativ() usage"                                 },
+               {get_queryiv,                                                           "get_queryiv",                                                          "Invalid glGetQueryiv() usage"                                                  },
+               {get_query_objectuiv,                                           "get_query_objectuiv",                                          "Invalid glGetQueryObjectuiv() usage"                                   },
+               {get_synciv,                                                            "get_synciv",                                                           "Invalid glGetSynciv() usage"                                                   },
+               {is_enabled,                                                            "is_enabled",                                                           "Invalid glIsEnabled() usage"                                                   },
+               {hint,                                                                          "hint",                                                                         "Invalid glHint() usage"                                                                },
+               {enablei,                                                                       "enablei",                                                                      "Invalid glEnablei() usage"                                                             },
+               {disablei,                                                                      "disablei",                                                                     "Invalid glDisablei() usage"                                                    },
+               {get_tex_parameteriiv,                                          "get_tex_parameteriiv",                                         "Invalid glGetTexParameterIiv() usage"                                  },
+               {get_tex_parameteriuiv,                                         "get_tex_parameteriuiv",                                        "Invalid glGetTexParameterIuiv() usage"                                 },
+               {get_nuniformfv,                                                        "get_nuniformfv",                                                       "Invalid glGetnUniformfv() usage"                                               },
+               {get_nuniformiv,                                                        "get_nuniformiv",                                                       "Invalid glGetnUniformiv() usage"                                               },
+               {get_nuniformuiv,                                                       "get_nuniformuiv",                                                      "Invalid glGetnUniformuiv() usage"                                              },
+               {is_enabledi,                                                           "is_enabledi",                                                          "Invalid glIsEnabledi() usage"                                                  },
        };
 
        return std::vector<FunctionContainer>(DE_ARRAY_BEGIN(funcs), DE_ARRAY_END(funcs));
index 98a895a..51dfc14 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "tcuResultCollector.hpp"
 
+#include "gluContextInfo.hpp"
 #include "gluRenderContext.hpp"
 #include "glwFunctions.hpp"
 
@@ -109,6 +110,28 @@ void NegativeTestContext::expectError (GLenum error0, GLenum error1)
        m_host.expectError(error0, error1);
 }
 
+bool NegativeTestContext::isShaderSupported (glu::ShaderType shaderType)
+{
+       if (contextSupports(getRenderContext().getType(), glu::ApiType::es(3, 2)))
+               return true;
+
+       switch (shaderType)
+       {
+               case glu::SHADERTYPE_GEOMETRY:
+                       return getContextInfo().isExtensionSupported("GL_EXT_geometry_shader");
+               case glu::SHADERTYPE_TESSELLATION_CONTROL:
+               case glu::SHADERTYPE_TESSELLATION_EVALUATION:
+                       return getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader");
+               default:
+                       return true;
+       }
+}
+
+bool NegativeTestContext::isExtensionSupported (std::string extension)
+{
+       return getContextInfo().isExtensionSupported(extension.c_str());
+}
+
 } // NegativeTestShared
 } // Functional
 } // gles31
index 96940cd..faa5001 100644 (file)
@@ -26,6 +26,7 @@
 #include "tcuDefs.hpp"
 #include "glwDefs.hpp"
 #include "gluCallLogWrapper.hpp"
+#include "gluShaderUtil.hpp"
 #include "tes31TestCase.hpp"
 
 namespace tcu
@@ -70,6 +71,8 @@ public:
 
        void                                            expectError                             (glw::GLenum error);
        void                                            expectError                             (glw::GLenum error0, glw::GLenum error1);
+       bool                                            isShaderSupported               (glu::ShaderType shaderType);
+       bool                                            isExtensionSupported    (std::string extension);
 
 protected:
        ErrorCase&                                      m_host;
index 11aebab..3023757 100644 (file)
@@ -26,6 +26,7 @@
 
 #include "gluCallLogWrapper.hpp"
 #include "gluContextInfo.hpp"
+#include "gluRenderContext.hpp"
 
 #include "glwDefs.hpp"
 #include "glwEnums.hpp"
@@ -102,8 +103,8 @@ void activetexture (NegativeTestContext& ctx)
 
 void bindtexture (NegativeTestContext& ctx)
 {
-       GLuint texture[2];
-       ctx.glGenTextures(2, texture);
+       GLuint texture[5];
+       ctx.glGenTextures(5, texture);
 
        ctx.beginSection("GL_INVALID_ENUM is generated if target is not one of the allowable values.");
        ctx.glBindTexture(0, 1);
@@ -130,9 +131,49 @@ void bindtexture (NegativeTestContext& ctx)
        ctx.expectError(GL_INVALID_OPERATION);
        ctx.glBindTexture(GL_TEXTURE_2D_ARRAY, texture[1]);
        ctx.expectError(GL_INVALID_OPERATION);
+
+       ctx.glBindTexture(GL_TEXTURE_3D, texture[2]);
+       ctx.expectError(GL_NO_ERROR);
+       ctx.glBindTexture(GL_TEXTURE_2D, texture[2]);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, texture[2]);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.glBindTexture(GL_TEXTURE_2D_ARRAY, texture[2]);
+       ctx.expectError(GL_INVALID_OPERATION);
+
+       ctx.glBindTexture(GL_TEXTURE_2D_ARRAY, texture[3]);
+       ctx.expectError(GL_NO_ERROR);
+       ctx.glBindTexture(GL_TEXTURE_2D, texture[3]);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, texture[3]);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.glBindTexture(GL_TEXTURE_3D, texture[3]);
+       ctx.expectError(GL_INVALID_OPERATION);
+
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+       {
+               ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, texture[0]);
+               ctx.expectError(GL_INVALID_OPERATION);
+               ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, texture[1]);
+               ctx.expectError(GL_INVALID_OPERATION);
+               ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, texture[2]);
+               ctx.expectError(GL_INVALID_OPERATION);
+               ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, texture[3]);
+               ctx.expectError(GL_INVALID_OPERATION);
+               ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, texture[4]);
+               ctx.expectError(GL_NO_ERROR);
+               ctx.glBindTexture(GL_TEXTURE_2D, texture[4]);
+               ctx.expectError(GL_INVALID_OPERATION);
+               ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, texture[4]);
+               ctx.expectError(GL_INVALID_OPERATION);
+               ctx.glBindTexture(GL_TEXTURE_3D, texture[4]);
+               ctx.expectError(GL_INVALID_OPERATION);
+               ctx.glBindTexture(GL_TEXTURE_2D_ARRAY, texture[4]);
+               ctx.expectError(GL_INVALID_OPERATION);
+       }
        ctx.endSection();
 
-       ctx.glDeleteTextures(2, texture);
+       ctx.glDeleteTextures(5, texture);
 }
 
 // glCompressedTexImage2D
@@ -417,15 +458,133 @@ void compressedteximage2d_invalid_border (NegativeTestContext& ctx)
 void compressedteximage2d_invalid_size (NegativeTestContext& ctx)
 {
        ctx.beginSection("GL_INVALID_VALUE is generated if imageSize is not consistent with the format, dimensions, and contents of the specified compressed image data.");
-       ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, -1, 0);
+       // Subtracting 1 to the imageSize field to deviate from the expected size. Removing the -1 would cause the imageSize to be correct.
+       ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_R11_EAC, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 8 - 1, 0);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SIGNED_R11_EAC, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 8 - 1, 0);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RG11_EAC, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 16 - 1, 0);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SIGNED_RG11_EAC, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 16 - 1, 0);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB8_ETC2, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 8 - 1, 0);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ETC2, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 8 - 1, 0);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 8 - 1, 0);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 8 - 1, 0);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 16 - 1, 0);
        ctx.expectError(GL_INVALID_VALUE);
-       ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA8_ETC2_EAC, 16, 16, 0, 4*4*8, 0);
+       ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 16 - 1, 0);
        ctx.expectError(GL_INVALID_VALUE);
-       ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB8_ETC2, 16, 16, 0, 4*4*16, 0);
+
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+       {
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_4x4, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_5x4, 1, 1, 0, divRoundUp(1, 5) * divRoundUp(1, 4) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_5x5, 1, 1, 0, divRoundUp(1, 5) * divRoundUp(1, 5) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_6x5, 1, 1, 0, divRoundUp(1, 6) * divRoundUp(1, 5) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_6x6, 1, 1, 0, divRoundUp(1, 6) * divRoundUp(1, 6) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_8x5, 1, 1, 0, divRoundUp(1, 8) * divRoundUp(1, 5) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_8x6, 1, 1, 0, divRoundUp(1, 8) * divRoundUp(1, 6) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_8x8, 1, 1, 0, divRoundUp(1, 8) * divRoundUp(1, 8) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_10x5, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 5) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_10x6, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 6) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_10x8, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 8) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_10x10, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 10) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_12x10, 1, 1, 0, divRoundUp(1, 12) * divRoundUp(1, 10) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_12x12, 1, 1, 0, divRoundUp(1, 12) * divRoundUp(1, 12) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4, 1, 1, 0, divRoundUp(1, 4) * divRoundUp(1, 4) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4, 1, 1, 0, divRoundUp(1, 5) * divRoundUp(1, 4) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5, 1, 1, 0, divRoundUp(1, 5) * divRoundUp(1, 5) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5, 1, 1, 0, divRoundUp(1, 6) * divRoundUp(1, 5) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6, 1, 1, 0, divRoundUp(1, 6) * divRoundUp(1, 6) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5, 1, 1, 0, divRoundUp(1, 8) * divRoundUp(1, 5) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6, 1, 1, 0, divRoundUp(1, 8) * divRoundUp(1, 6) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8, 1, 1, 0, divRoundUp(1, 8) * divRoundUp(1, 8) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 5) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 6) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 8) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10, 1, 1, 0, divRoundUp(1, 10) * divRoundUp(1, 10) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10, 1, 1, 0, divRoundUp(1, 12) * divRoundUp(1, 10) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+           ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12, 1, 1, 0, divRoundUp(1, 12) * divRoundUp(1, 12) * 16 - 1, 0);
+           ctx.expectError(GL_INVALID_VALUE);
+       }
+       ctx.endSection();
+}
+
+void compressedteximage2d_neg_size (NegativeTestContext& ctx)
+{
+       ctx.beginSection("GL_INVALID_VALUE is generated if imageSize is negative.");
+       ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_R11_EAC, 0, 0, 0, -1, 0);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+}
+
+void compressedteximage2d_invalid_width_height (NegativeTestContext& ctx)
+{
+       ctx.beginSection("GL_INVALID_VALUE is generated if target is a cube map face and width and height are not equal.");
+
+       ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_X target");
+       ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_R11_EAC, 1, 2, 0, divRoundUp(1, 4) * divRoundUp(2, 4) * 8, 0);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+
+       ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Y target");
+       ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_COMPRESSED_R11_EAC, 1, 2, 0, divRoundUp(1, 4) * divRoundUp(2, 4) * 8, 0);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+
+       ctx.beginSection("GL_TEXTURE_CUBE_MAP_POSITIVE_Z target");
+       ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_COMPRESSED_R11_EAC, 1, 2, 0, divRoundUp(1, 4) * divRoundUp(2, 4) * 8, 0);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+
+       ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_X target");
+       ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_COMPRESSED_R11_EAC, 1, 2, 0, divRoundUp(1, 4) * divRoundUp(2, 4) * 8, 0);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+
+       ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Y target");
+       ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_COMPRESSED_R11_EAC, 1, 2, 0, divRoundUp(1, 4) * divRoundUp(2, 4) * 8, 0);
        ctx.expectError(GL_INVALID_VALUE);
-       ctx.glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SIGNED_R11_EAC, 16, 16, 0, 4*4*16, 0);
+       ctx.endSection();
+
+       ctx.beginSection("GL_TEXTURE_CUBE_MAP_NEGATIVE_Z target");
+       ctx.glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_COMPRESSED_R11_EAC, 1, 2, 0, divRoundUp(1, 4) * divRoundUp(2, 4) * 8, 0);
        ctx.expectError(GL_INVALID_VALUE);
        ctx.endSection();
+
+       ctx.endSection();
 }
 
 void compressedteximage2d_invalid_buffer_target (NegativeTestContext& ctx)
@@ -787,6 +946,36 @@ void copytexsubimage2d_invalid_target (NegativeTestContext& ctx)
 
        ctx.glDeleteTextures(1, &texture);
 }
+void copytexsubimage2d_read_buffer_is_none (NegativeTestContext& ctx)
+{
+       GLuint texture = 0x1234;
+       ctx.glGenTextures       (1, &texture);
+       ctx.glBindTexture       (GL_TEXTURE_2D, texture);
+       ctx.glTexImage2D        (GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if the read buffer is NONE");
+       ctx.glReadBuffer(GL_NONE);
+       ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 4, 4);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.glDeleteTextures(1, &texture);
+}
+
+void copytexsubimage2d_texture_internalformat (NegativeTestContext& ctx)
+{
+       GLuint texture = 0x1234;
+       ctx.glGenTextures       (1, &texture);
+       ctx.glBindTexture       (GL_TEXTURE_2D, texture);
+       ctx.glTexImage2D        (GL_TEXTURE_2D, 0, GL_RGB9_E5, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if internal format of the texture is GL_RGB9_E5");
+       ctx.glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 4, 4);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.glDeleteTextures(1, &texture);
+}
 
 void copytexsubimage2d_neg_level (NegativeTestContext& ctx)
 {
@@ -1562,6 +1751,12 @@ void texsubimage2d_invalid_buffer_target (NegativeTestContext& ctx)
 
 void texparameteri (NegativeTestContext& ctx)
 {
+       GLuint texture = 0x1234;
+       GLint textureMode = -1;
+
+       ctx.glGenTextures(1, &texture);
+       ctx.glBindTexture(GL_TEXTURE_2D, texture);
+
        ctx.beginSection("GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values.");
        ctx.glTexParameteri(0, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        ctx.expectError(GL_INVALID_ENUM);
@@ -1571,39 +1766,108 @@ void texparameteri (NegativeTestContext& ctx)
        ctx.expectError(GL_INVALID_ENUM);
        ctx.endSection();
 
-       ctx.beginSection("GL_INVALID_ENUM is generated if params should have a defined symbolic constant value (based on the value of pname) and does not.");
-       ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, 0);
+       ctx.beginSection("GL_INVALID_ENUM is generated if pname is enum and the value of param(s) is not a valid value.");
+       ctx.glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, textureMode);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_REPEAT);
+       ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, textureMode);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, 0);
+       ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, textureMode);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_NEAREST);
+       ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, textureMode);
        ctx.expectError(GL_INVALID_ENUM);
        ctx.endSection();
 
-       GLuint texture = 0x1234;
-       ctx.glGenTextures(1, &texture);
-       ctx.glBindTexture(GL_TEXTURE_2D, texture);
+       ctx.beginSection("GL_INVALID_VALUE is generated if pname is GL_TEXTURE_BASE_LEVEL or GL_TEXTURE_MAX_LEVEL and param(s) is negative.");
+       ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, -1);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, -1);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
 
-       ctx.beginSection("GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values.");
-       ctx.glTexParameteri(0, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+       {
+               ctx.beginSection("GL_INVALID_ENUM is generated if pname is a non-scalar parameter.");
+               ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, 0);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.endSection();
+       }
+
+       ctx.beginSection("GL_INVALID_ENUM error is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname is not valid.");
+       ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BORDER_COLOR, textureMode);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.glTexParameteri(GL_TEXTURE_2D, 0, GL_LINEAR);
+       ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, textureMode);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.glTexParameteri(0, 0, GL_LINEAR);
+       ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, textureMode);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.endSection();
-
-       ctx.beginSection("GL_INVALID_ENUM is generated if params should have a defined symbolic constant value (based on the value of pname) and does not.");
-       ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, 0);
+       ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_S, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_T, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_R, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_LOD, textureMode);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_REPEAT);
+       ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LOD, textureMode);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, 0);
+       ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_MODE, textureMode);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_NEAREST);
+       ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, textureMode);
        ctx.expectError(GL_INVALID_ENUM);
+
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
+       {
+               ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, textureMode);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_FILTER, textureMode);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAG_FILTER, textureMode);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_S, textureMode);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_T, textureMode);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_R, textureMode);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_LOD, textureMode);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAX_LOD, textureMode);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_MODE, textureMode);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_FUNC, textureMode);
+               ctx.expectError(GL_INVALID_ENUM);
+       }
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname GL_TEXTURE_BASE_LEVEL is not 0.");
+       ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, -1);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, 1);
+       ctx.expectError(GL_INVALID_OPERATION);
+
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
+       {
+               ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, -1);
+               ctx.expectError(GL_INVALID_OPERATION);
+               ctx.glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, 1);
+               ctx.expectError(GL_INVALID_OPERATION);
+       }
        ctx.endSection();
 
        ctx.glDeleteTextures(1, &texture);
@@ -1613,6 +1877,11 @@ void texparameteri (NegativeTestContext& ctx)
 
 void texparameterf (NegativeTestContext& ctx)
 {
+       GLuint texture = 0x1234;
+       GLfloat textureMode = -1.0f;
+       ctx.glGenTextures(1, &texture);
+       ctx.glBindTexture(GL_TEXTURE_2D, texture);
+
        ctx.beginSection("GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values.");
        ctx.glTexParameterf(0, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        ctx.expectError(GL_INVALID_ENUM);
@@ -1622,39 +1891,108 @@ void texparameterf (NegativeTestContext& ctx)
        ctx.expectError(GL_INVALID_ENUM);
        ctx.endSection();
 
-       ctx.beginSection("GL_INVALID_ENUM is generated if params should have a defined symbolic constant value (based on the value of pname) and does not.");
-       ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, 0);
+       ctx.beginSection("GL_INVALID_ENUM is generated if pname is enum and the value of param(s) is not a valid value.");
+       ctx.glTexParameterf(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, textureMode);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_REPEAT);
+       ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, textureMode);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, 0);
+       ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, textureMode);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_NEAREST);
+       ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, textureMode);
        ctx.expectError(GL_INVALID_ENUM);
        ctx.endSection();
 
-       GLuint texture = 0x1234;
-       ctx.glGenTextures(1, &texture);
-       ctx.glBindTexture(GL_TEXTURE_2D, texture);
+       ctx.beginSection("GL_INVALID_VALUE is generated if pname is GL_TEXTURE_BASE_LEVEL or GL_TEXTURE_MAX_LEVEL and param(s) is negative.");
+       ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, -1.0f);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, -1.0f);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
 
-       ctx.beginSection("GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values.");
-       ctx.glTexParameterf(0, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+       {
+               ctx.beginSection("GL_INVALID_ENUM is generated if pname is a non-scalar parameter.");
+               ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, 0.0f);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.endSection();
+       }
+
+       ctx.beginSection("GL_INVALID_ENUM error is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname is not valid.");
+       ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BORDER_COLOR, textureMode);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.glTexParameterf(GL_TEXTURE_2D, 0, GL_LINEAR);
+       ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, textureMode);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.glTexParameterf(0, 0, GL_LINEAR);
+       ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, textureMode);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.endSection();
-
-       ctx.beginSection("GL_INVALID_ENUM is generated if params should have a defined symbolic constant value (based on the value of pname) and does not.");
-       ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, 0);
+       ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_S, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_T, textureMode);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_REPEAT);
+       ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_R, textureMode);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, 0);
+       ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_LOD, textureMode);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_NEAREST);
+       ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LOD, textureMode);
        ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_MODE, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
+       {
+               ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, textureMode);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_FILTER, textureMode);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAG_FILTER, textureMode);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_S, textureMode);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_T, textureMode);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_R, textureMode);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_LOD, textureMode);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAX_LOD, textureMode);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_MODE, textureMode);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_FUNC, textureMode);
+               ctx.expectError(GL_INVALID_ENUM);
+       }
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname GL_TEXTURE_BASE_LEVEL is not 0.");
+       ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, -1.0f);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, 1.0f);
+       ctx.expectError(GL_INVALID_OPERATION);
+
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
+       {
+               ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, -1.0f);
+               ctx.expectError(GL_INVALID_OPERATION);
+               ctx.glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, 1.0f);
+               ctx.expectError(GL_INVALID_OPERATION);
+       }
        ctx.endSection();
 
        ctx.glDeleteTextures(1, &texture);
@@ -1664,8 +2002,12 @@ void texparameterf (NegativeTestContext& ctx)
 
 void texparameteriv (NegativeTestContext& ctx)
 {
-       ctx.beginSection("GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values.");
        GLint params[1] = {GL_LINEAR};
+       GLuint texture = 0x1234;
+       ctx.glGenTextures(1, &texture);
+       ctx.glBindTexture(GL_TEXTURE_2D, texture);
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values.");
        ctx.glTexParameteriv(0, GL_TEXTURE_MIN_FILTER, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
        ctx.glTexParameteriv(GL_TEXTURE_2D, 0, &params[0]);
@@ -1674,48 +2016,105 @@ void texparameteriv (NegativeTestContext& ctx)
        ctx.expectError(GL_INVALID_ENUM);
        ctx.endSection();
 
-       ctx.beginSection("GL_INVALID_ENUM is generated if params should have a defined symbolic constant value (based on the value of pname) and does not.");
-       params[0] = 0;
+       ctx.beginSection("GL_INVALID_ENUM is generated if pname is enum and the value of param(s) is not a valid value.");
+       params[0] = -1;
+       ctx.glTexParameteriv(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
        ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
-       params[0] = GL_REPEAT;
        ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
-       params[0] = 0;
+       ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
        ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
-       params[0] = GL_NEAREST;
        ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
        ctx.endSection();
 
-       GLuint texture = 0x1234;
-       ctx.glGenTextures(1, &texture);
-       ctx.glBindTexture(GL_TEXTURE_2D, texture);
+       ctx.beginSection("GL_INVALID_VALUE is generated if pname is GL_TEXTURE_BASE_LEVEL or GL_TEXTURE_MAX_LEVEL and param(s) is negative.");
+       ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, &params[0]);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, &params[0]);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
 
-       ctx.beginSection("GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values.");
-       params[0] = GL_LINEAR;
-       ctx.glTexParameteriv(0, GL_TEXTURE_MIN_FILTER, &params[0]);
+       ctx.beginSection("GL_INVALID_ENUM error is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname is not valid.");
+       ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BORDER_COLOR, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.glTexParameteriv(GL_TEXTURE_2D, 0, &params[0]);
+       ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.glTexParameteriv(0, 0, &params[0]);
+       ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.endSection();
-
-       ctx.beginSection("GL_INVALID_ENUM is generated if params should have a defined symbolic constant value (based on the value of pname) and does not.");
-       params[0] = 0;
-       ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &params[0]);
+       ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_S, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
-       params[0] = GL_REPEAT;
-       ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, &params[0]);
+       ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_T, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
-       params[0] = 0;
-       ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, &params[0]);
+       ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_R, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
-       params[0] = GL_NEAREST;
-       ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, &params[0]);
+       ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_LOD, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LOD, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_MODE, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
+
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
+       {
+               ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, &params[0]);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_FILTER, &params[0]);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAG_FILTER, &params[0]);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_S, &params[0]);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_T, &params[0]);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_R, &params[0]);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_LOD, &params[0]);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAX_LOD, &params[0]);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_MODE, &params[0]);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_FUNC, &params[0]);
+               ctx.expectError(GL_INVALID_ENUM);
+       }
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname GL_TEXTURE_BASE_LEVEL is not 0.");
+       params[0] = -1;
+       ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, &params[0]);
+       ctx.expectError(GL_INVALID_OPERATION);
+       params[0] = 1;
+       ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, &params[0]);
+       ctx.expectError(GL_INVALID_OPERATION);
+
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
+       {
+               params[0] = -1;
+               ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, &params[0]);
+               ctx.expectError(GL_INVALID_OPERATION);
+               params[0] = 1;
+               ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, &params[0]);
+               ctx.expectError(GL_INVALID_OPERATION);
+       }
        ctx.endSection();
 
        ctx.glDeleteTextures(1, &texture);
@@ -1725,8 +2124,13 @@ void texparameteriv (NegativeTestContext& ctx)
 
 void texparameterfv (NegativeTestContext& ctx)
 {
-       ctx.beginSection("GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values.");
        GLfloat params[1] = {GL_LINEAR};
+       GLuint texture = 0x1234;
+       ctx.glGenTextures(1, &texture);
+       ctx.glBindTexture(GL_TEXTURE_2D, texture);
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values.");
+       params[0] = GL_LINEAR;
        ctx.glTexParameterfv(0, GL_TEXTURE_MIN_FILTER, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
        ctx.glTexParameterfv(GL_TEXTURE_2D, 0, &params[0]);
@@ -1735,53 +2139,329 @@ void texparameterfv (NegativeTestContext& ctx)
        ctx.expectError(GL_INVALID_ENUM);
        ctx.endSection();
 
-       ctx.beginSection("GL_INVALID_ENUM is generated if params should have a defined symbolic constant value (based on the value of pname) and does not.");
-       params[0] = 0.0f;
+       ctx.beginSection("GL_INVALID_ENUM is generated if pname is enum and the value of param(s) is not a valid value.");
+       params[0] = -1.0f;
+       ctx.glTexParameterfv(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
        ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
-       params[0] = GL_REPEAT;
        ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
-       params[0] = 0.0f;
+       ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
        ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
-       params[0] = GL_NEAREST;
        ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
        ctx.endSection();
 
-       GLuint texture = 0x1234;
-       ctx.glGenTextures(1, &texture);
-       ctx.glBindTexture(GL_TEXTURE_2D, texture);
+       ctx.beginSection("GL_INVALID_VALUE is generated if pname is GL_TEXTURE_BASE_LEVEL or GL_TEXTURE_MAX_LEVEL and param(s) is negative.");
+       ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, &params[0]);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, &params[0]);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
 
-       ctx.beginSection("GL_INVALID_ENUM is generated if target or pname is not one of the accepted defined values.");
-       params[0] = GL_LINEAR;
-       ctx.glTexParameterfv(0, GL_TEXTURE_MIN_FILTER, &params[0]);
+       ctx.beginSection("GL_INVALID_ENUM error is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname is not valid.");
+       ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BORDER_COLOR, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.glTexParameterfv(GL_TEXTURE_2D, 0, &params[0]);
+       ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.glTexParameterfv(0, 0, &params[0]);
+       ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.endSection();
-
-       ctx.beginSection("GL_INVALID_ENUM is generated if params should have a defined symbolic constant value (based on the value of pname) and does not.");
-       params[0] = 0.0f;
-       ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &params[0]);
+       ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_S, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
-       params[0] = GL_REPEAT;
-       ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, &params[0]);
+       ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_T, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
-       params[0] = 0.0f;
-       ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, &params[0]);
+       ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_R, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
-       params[0] = GL_NEAREST;
-       ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, &params[0]);
+       ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_LOD, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LOD, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_MODE, &params[0]);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, &params[0]);
        ctx.expectError(GL_INVALID_ENUM);
-       ctx.endSection();
+
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
+       {
+               ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, &params[0]);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_FILTER, &params[0]);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAG_FILTER, &params[0]);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_S, &params[0]);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_T, &params[0]);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_R, &params[0]);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_LOD, &params[0]);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAX_LOD, &params[0]);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_MODE, &params[0]);
+               ctx.expectError(GL_INVALID_ENUM);
+               ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_FUNC, &params[0]);
+               ctx.expectError(GL_INVALID_ENUM);
+       }
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname GL_TEXTURE_BASE_LEVEL is not 0.");
+       params[0] = -1.0f;
+       ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, &params[0]);
+       ctx.expectError(GL_INVALID_OPERATION);
+       params[0] = 1.0f;
+       ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, &params[0]);
+       ctx.expectError(GL_INVALID_OPERATION);
+
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
+       {
+               params[0] = -1.0f;
+               ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, &params[0]);
+               ctx.expectError(GL_INVALID_OPERATION);
+               params[0] = 1.0f;
+               ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, &params[0]);
+               ctx.expectError(GL_INVALID_OPERATION);
+       }
+       ctx.endSection();
 
        ctx.glDeleteTextures(1, &texture);
 }
 
+// glTexParameterIiv
+
+void texparameterIiv (NegativeTestContext& ctx)
+{
+       if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+               throw tcu::NotSupportedError("glTexParameterIiv is not supported.", DE_NULL, __FILE__, __LINE__);
+
+       GLint textureMode[] = { GL_DEPTH_COMPONENT, GL_STENCIL_INDEX };
+       ctx.beginSection("GL_INVALID_ENUM is generated if target is not a valid target.");
+       ctx.glTexParameterIiv(0, GL_DEPTH_STENCIL_TEXTURE_MODE, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if pname is not a valid parameter.");
+       ctx.glTexParameterIiv(GL_TEXTURE_2D, 0, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if pname is enum and the value of param(s) is not a valid value.");
+       textureMode[0] = -1;
+       textureMode[1] = -1;
+       ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if pname is GL_TEXTURE_BASE_LEVEL or GL_TEXTURE_MAX_LEVEL and param(s) is negative.");
+       ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, textureMode);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, textureMode);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_ENUM error is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname is not valid.");
+       textureMode[0] = 0;
+       textureMode[1] = 0;
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BORDER_COLOR, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_S, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_T, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_R, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_LOD, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LOD, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_MODE, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_FILTER, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAG_FILTER, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_S, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_T, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_R, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_LOD, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAX_LOD, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_MODE, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_FUNC, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname GL_TEXTURE_BASE_LEVEL is not 0.");
+       textureMode[0] = -1;
+       textureMode[1] = -1;
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, textureMode);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, textureMode);
+       ctx.expectError(GL_INVALID_OPERATION);
+
+       textureMode[0] = 1;
+       textureMode[1] = 1;
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, textureMode);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.glTexParameterIiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, textureMode);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+}
+
+// glTexParameterIuiv
+
+void texparameterIuiv (NegativeTestContext& ctx)
+{
+       if (!contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+               throw tcu::NotSupportedError("glTexParameterIuiv is not supported.", DE_NULL, __FILE__, __LINE__);
+
+       GLuint textureMode[] = { GL_DEPTH_COMPONENT, GL_STENCIL_INDEX };
+       ctx.beginSection("GL_INVALID_ENUM is generated if target is not a valid target.");
+       ctx.glTexParameterIuiv(0, GL_DEPTH_STENCIL_TEXTURE_MODE, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if pname is not a valid parameter.");
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D, 0, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if pname is enum and the value of param(s) is not a valid value.");
+       textureMode[0] = GL_DONT_CARE;
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_ENUM error is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname is not valid.");
+       textureMode[0] = 0;
+       textureMode[1] = 0;
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BORDER_COLOR, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_S, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_T, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_R, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_LOD, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LOD, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_MODE, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BORDER_COLOR, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_FILTER, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAG_FILTER, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_S, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_T, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_R, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_LOD, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAX_LOD, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_MODE, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_FUNC, textureMode);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if target is GL_TEXTURE_2D_MULTISAMPLE or GL_TEXTURE_2D_MULTISAMPLE_ARRAY and pname GL_TEXTURE_BASE_LEVEL is not 0.");
+       textureMode[0] = 1;
+       textureMode[1] = 1;
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, textureMode);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.glTexParameterIuiv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, textureMode);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+}
+
 // glCompressedTexSubImage2D
 
 void compressedtexsubimage2d (NegativeTestContext& ctx)
@@ -2039,6 +2719,19 @@ void teximage3d (NegativeTestContext& ctx)
        ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA32UI, 1, 1, 1, 0, GL_RGBA_INTEGER, GL_INT, 0);
        ctx.expectError(GL_INVALID_OPERATION);
        ctx.endSection();
+
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+       {
+               ctx.beginSection("GL_INVALID_VALUE is generated if target is GL_TEXTURE_CUBE_MAP_ARRAY and width and height are not equal.");
+               ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 2, 1, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.endSection();
+
+               ctx.beginSection("GL_INVALID_VALUE is generated if target is GL_TEXTURE_CUBE_MAP_ARRAY and depth is not a multiple of six.");
+               ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.endSection();
+       }
 }
 
 void teximage3d_neg_level (NegativeTestContext& ctx)
@@ -2048,7 +2741,15 @@ void teximage3d_neg_level (NegativeTestContext& ctx)
        ctx.expectError(GL_INVALID_VALUE);
        ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, -1, GL_RGB, 1, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
        ctx.expectError(GL_INVALID_VALUE);
+
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+       {
+               ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, -1, GL_RGBA, 1, 1, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+       }
+
        ctx.endSection();
+
 }
 
 void teximage3d_max_level (NegativeTestContext& ctx)
@@ -2086,6 +2787,18 @@ void teximage3d_neg_width_height_depth (NegativeTestContext& ctx)
        ctx.expectError(GL_INVALID_VALUE);
        ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, -1, -1, -1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
        ctx.expectError(GL_INVALID_VALUE);
+
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+       {
+               ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, -1, 1, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 1, -1, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 1, 1, -6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, -1, -1, -6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+       }
        ctx.endSection();
 }
 
@@ -2128,6 +2841,15 @@ void teximage3d_invalid_border (NegativeTestContext& ctx)
        ctx.expectError(GL_INVALID_VALUE);
        ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGB, 1, 1, 1, 2, GL_RGB, GL_UNSIGNED_BYTE, 0);
        ctx.expectError(GL_INVALID_VALUE);
+
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+       {
+               ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA, 1, 1, 6, -1, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA, 1, 1, 6, 1, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+       }
+
        ctx.endSection();
 }
 
@@ -2215,12 +2937,14 @@ void texsubimage3d (NegativeTestContext& ctx)
 
 void texsubimage3d_neg_level (NegativeTestContext& ctx)
 {
-       deUint32                        textures[2];
-       ctx.glGenTextures               (2, &textures[0]);
+       deUint32                        textures[3];
+       ctx.glGenTextures               (3, &textures[0]);
        ctx.glBindTexture               (GL_TEXTURE_3D, textures[0]);
        ctx.glTexImage3D                (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
        ctx.glBindTexture               (GL_TEXTURE_2D_ARRAY, textures[1]);
        ctx.glTexImage3D                (GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+       ctx.glBindTexture               (GL_TEXTURE_CUBE_MAP_ARRAY, textures[2]);
+       ctx.glTexImage3D                (GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 4, 4, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
        ctx.expectError                 (GL_NO_ERROR);
 
        ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0.");
@@ -2228,9 +2952,16 @@ void texsubimage3d_neg_level (NegativeTestContext& ctx)
        ctx.expectError(GL_INVALID_VALUE);
        ctx.glTexSubImage3D(GL_TEXTURE_2D_ARRAY, -1, 0, 0, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
        ctx.expectError(GL_INVALID_VALUE);
+
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+       {
+               ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, -1, 0, 0, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+       }
+
        ctx.endSection();
 
-       ctx.glDeleteTextures    (2, &textures[0]);
+       ctx.glDeleteTextures    (3, &textures[0]);
 }
 
 void texsubimage3d_max_level (NegativeTestContext& ctx)
@@ -2261,12 +2992,14 @@ void texsubimage3d_max_level (NegativeTestContext& ctx)
 
 void texsubimage3d_neg_offset (NegativeTestContext& ctx)
 {
-       deUint32                        textures[2];
-       ctx.glGenTextures               (2, &textures[0]);
+       deUint32                        textures[3];
+       ctx.glGenTextures               (3, &textures[0]);
        ctx.glBindTexture               (GL_TEXTURE_3D, textures[0]);
        ctx.glTexImage3D                (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
        ctx.glBindTexture               (GL_TEXTURE_2D_ARRAY, textures[1]);
        ctx.glTexImage3D                (GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+       ctx.glBindTexture               (GL_TEXTURE_CUBE_MAP_ARRAY, textures[2]);
+       ctx.glTexImage3D                (GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 4, 4, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
        ctx.expectError                 (GL_NO_ERROR);
 
        ctx.beginSection("GL_INVALID_VALUE is generated if xoffset, yoffset or zoffset are negative.");
@@ -2286,9 +3019,22 @@ void texsubimage3d_neg_offset (NegativeTestContext& ctx)
        ctx.expectError(GL_INVALID_VALUE);
        ctx.glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, -1, -1, -1, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
        ctx.expectError(GL_INVALID_VALUE);
+
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+       {
+               ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, -1, 0, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, 0, -1, 0, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, 0, 0, -1, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, -1, -1, -1, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+       }
+
        ctx.endSection();
 
-       ctx.glDeleteTextures    (2, &textures[0]);
+       ctx.glDeleteTextures    (3, &textures[0]);
 }
 
 void texsubimage3d_invalid_offset (NegativeTestContext& ctx)
@@ -2328,6 +3074,19 @@ void texsubimage3d_neg_width_height (NegativeTestContext& ctx)
        ctx.expectError(GL_INVALID_VALUE);
        ctx.glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, -1, -1, -1, GL_RGBA, GL_UNSIGNED_BYTE, 0);
        ctx.expectError(GL_INVALID_VALUE);
+
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+       {
+               ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, 0, 0, 0, -1, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, 0, 0, 0, 0, -1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, 0, 0, 0, 0, 0, -1, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, 0, 0, 0, -1, -1, -1, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+       }
+
        ctx.endSection();
 }
 
@@ -2394,36 +3153,47 @@ void copytexsubimage3d (NegativeTestContext& ctx)
 
 void copytexsubimage3d_neg_level (NegativeTestContext& ctx)
 {
-       deUint32                        textures[2];
-       ctx.glGenTextures               (2, &textures[0]);
-       ctx.glBindTexture               (GL_TEXTURE_3D, textures[0]);
-       ctx.glTexImage3D                (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
-       ctx.glBindTexture               (GL_TEXTURE_2D_ARRAY, textures[1]);
-       ctx.glTexImage3D                (GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
-       ctx.expectError                 (GL_NO_ERROR);
+       deUint32        textures[3];
+       ctx.glGenTextures(3, &textures[0]);
+       ctx.glBindTexture(GL_TEXTURE_3D, textures[0]);
+       ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+       ctx.glBindTexture(GL_TEXTURE_2D_ARRAY, textures[1]);
+       ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+       ctx.expectError(GL_NO_ERROR);
 
        ctx.beginSection("GL_INVALID_VALUE is generated if level is less than 0.");
        ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, -1, 0, 0, 0, 0, 0, 4, 4);
        ctx.expectError(GL_INVALID_VALUE);
        ctx.glCopyTexSubImage3D(GL_TEXTURE_2D_ARRAY, -1, 0, 0, 0, 0, 0, 4, 4);
        ctx.expectError(GL_INVALID_VALUE);
+
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+       {
+               ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, textures[2]);
+               ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 4, 4, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+               ctx.expectError(GL_NO_ERROR);
+               ctx.glCopyTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, -1, 0, 0, 0, 0, 0, 4, 4);
+               ctx.expectError(GL_INVALID_VALUE);
+       }
+
        ctx.endSection();
 
-       ctx.glDeleteTextures(2, &textures[0]);
+       ctx.glDeleteTextures(3, &textures[0]);
 }
 
 void copytexsubimage3d_max_level (NegativeTestContext& ctx)
 {
-       deUint32        log2Max3DTextureSize    = deLog2Floor32(ctx.getInteger(GL_MAX_3D_TEXTURE_SIZE)) + 1;
-       deUint32        log2MaxTextureSize              = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1;
+       deUint32        log2Max3DTextureSize            = deLog2Floor32(ctx.getInteger(GL_MAX_3D_TEXTURE_SIZE)) + 1;
+       deUint32        log2MaxTextureSize                      = deLog2Floor32(ctx.getInteger(GL_MAX_TEXTURE_SIZE)) + 1;
+       deUint32        log2MaxCubeMapTextureSize       = deLog2Floor32(ctx.getInteger(GL_MAX_CUBE_MAP_TEXTURE_SIZE)) + 1;
 
-       deUint32                        textures[2];
-       ctx.glGenTextures               (2, &textures[0]);
-       ctx.glBindTexture               (GL_TEXTURE_3D, textures[0]);
-       ctx.glTexImage3D                (GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
-       ctx.glBindTexture               (GL_TEXTURE_2D_ARRAY, textures[1]);
-       ctx.glTexImage3D                (GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
-       ctx.expectError                 (GL_NO_ERROR);
+       deUint32        textures[3];
+       ctx.glGenTextures(3, &textures[0]);
+       ctx.glBindTexture(GL_TEXTURE_3D, textures[0]);
+       ctx.glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+       ctx.glBindTexture(GL_TEXTURE_2D_ARRAY, textures[1]);
+       ctx.glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, 4, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+       ctx.expectError(GL_NO_ERROR);
 
        ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_3D_TEXTURE_SIZE).");
        ctx.glCopyTexSubImage3D(GL_TEXTURE_3D, log2Max3DTextureSize, 0, 0, 0, 0, 0, 4, 4);
@@ -2435,7 +3205,18 @@ void copytexsubimage3d_max_level (NegativeTestContext& ctx)
        ctx.expectError(GL_INVALID_VALUE);
        ctx.endSection();
 
-       ctx.glDeleteTextures(2, &textures[0]);
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+       {
+               ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, textures[2]);
+               ctx.glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA, 4, 4, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+               ctx.expectError(GL_NO_ERROR);
+               ctx.beginSection("GL_INVALID_VALUE is generated if level is greater than log_2(GL_MAX_CUBE_MAP_TEXTURE_SIZE).");
+               ctx.glCopyTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, log2MaxCubeMapTextureSize, 0, 0, 0, 0, 0, 4, 4);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.endSection();
+       }
+
+       ctx.glDeleteTextures(3, &textures[0]);
 }
 
 void copytexsubimage3d_neg_offset (NegativeTestContext& ctx)
@@ -2620,6 +3401,34 @@ void compressedteximage3d_invalid_size (NegativeTestContext& ctx)
        ctx.endSection();
 }
 
+void compressedteximage3d_invalid_width_height (NegativeTestContext& ctx)
+{
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+       {
+               ctx.beginSection("GL_INVALID_VALUE is generated if target is GL_TEXTURE_CUBE_MAP_ARRAY and width and height are not equal.");
+               // TODO: [2015-12-17 dag]: validate that we're triggering the error for the correct reasons
+               ctx.glCompressedTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_COMPRESSED_RGBA_ASTC_4x4, 4, 6, 1, 0, 0, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.endSection();
+       }
+}
+
+void compressedteximage3d_invalid_format (NegativeTestContext& ctx)
+{
+       ctx.beginSection("GL_INVALID_OPERATION is generated if target is GL_TEXTURE_3D and the internal format does not support 3D textures.");
+       ctx.glCompressedTexImage3D(GL_TEXTURE_3D, 0, GL_COMPRESSED_RGB8_ETC2, 4, 4, 1, 0, etc2DataSize(4, 4), 0);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+       {
+               ctx.beginSection("GL_INVALID_OPERATION is generated if target is GL_TEXTURE_CUBE_MAP_ARRAY and the internal format does not support cube map array textures.");
+               ctx.glCompressedTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_COMPRESSED_R11_EAC, 4, 4, 1, 0, 0, 0);
+               ctx.expectError(GL_INVALID_OPERATION);
+               ctx.endSection();
+       }
+}
+
 void compressedteximage3d_invalid_buffer_target (NegativeTestContext& ctx)
 {
        deUint32                                buf = 0x1234;
@@ -2848,145 +3657,228 @@ void compressedtexsubimage3d_invalid_buffer_target (NegativeTestContext& ctx)
 
 void texstorage2d (NegativeTestContext& ctx)
 {
-       deUint32  texture = 0x1234;
-       ctx.glGenTextures       (1, &texture);
-       ctx.glBindTexture       (GL_TEXTURE_2D, texture);
+       deUint32  textures[] = {0x1234, 0x1234};
+
+       ctx.glGenTextures(2, textures);
+       ctx.glBindTexture(GL_TEXTURE_2D, textures[0]);
+       ctx.expectError(GL_NO_ERROR);
 
        ctx.beginSection("GL_INVALID_ENUM or GL_INVALID_VALUE is generated if internalformat is not a valid sized internal format.");
-       ctx.glTexStorage2D      (GL_TEXTURE_2D, 1, 0, 16, 16);
-       ctx.expectError         (GL_INVALID_ENUM, GL_INVALID_VALUE);
-       ctx.glTexStorage2D      (GL_TEXTURE_2D, 1, GL_RGBA_INTEGER, 16, 16);
-       ctx.expectError         (GL_INVALID_ENUM, GL_INVALID_VALUE);
+       ctx.glTexStorage2D(GL_TEXTURE_2D, 1, 0, 16, 16);
+       ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE);
+       ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA_INTEGER, 16, 16);
+       ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE);
        ctx.endSection();
 
        ctx.beginSection("GL_INVALID_ENUM is generated if target is not one of the accepted target enumerants.");
-       ctx.glTexStorage2D      (0, 1, GL_RGBA8, 16, 16);
-       ctx.expectError         (GL_INVALID_ENUM);
-       ctx.glTexStorage2D      (GL_TEXTURE_3D, 1, GL_RGBA8, 16, 16);
-       ctx.expectError         (GL_INVALID_ENUM);
-       ctx.glTexStorage2D      (GL_TEXTURE_2D_ARRAY, 1, GL_RGBA8, 16, 16);
-       ctx.expectError         (GL_INVALID_ENUM);
+       ctx.glTexStorage2D(0, 1, GL_RGBA8, 16, 16);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexStorage2D(GL_TEXTURE_3D, 1, GL_RGBA8, 16, 16);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexStorage2D(GL_TEXTURE_2D_ARRAY, 1, GL_RGBA8, 16, 16);
+       ctx.expectError(GL_INVALID_ENUM);
        ctx.endSection();
 
        ctx.beginSection("GL_INVALID_VALUE is generated if width or height are less than 1.");
-       ctx.glTexStorage2D      (GL_TEXTURE_2D, 1, GL_RGBA8, 0, 16);
-       ctx.expectError         (GL_INVALID_VALUE);
-       ctx.glTexStorage2D      (GL_TEXTURE_2D, 1, GL_RGBA8, 16, 0);
-       ctx.expectError         (GL_INVALID_VALUE);
-       ctx.glTexStorage2D      (GL_TEXTURE_2D, 1, GL_RGBA8, 0, 0);
-       ctx.expectError         (GL_INVALID_VALUE);
+       ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 0, 16);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 16, 0);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 0, 0);
+       ctx.expectError(GL_INVALID_VALUE);
+
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)))
+       {
+               ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, textures[1]);
+               ctx.expectError(GL_NO_ERROR);
+               ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 1, GL_RGBA8, 0, 16);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 1, GL_RGBA8, 16, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 1, GL_RGBA8, 0, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+       }
        ctx.endSection();
 
-       ctx.glDeleteTextures(1, &texture);
+       ctx.glDeleteTextures(2, textures);
 }
 
 void texstorage2d_invalid_binding (NegativeTestContext& ctx)
 {
-       ctx.glBindTexture       (GL_TEXTURE_2D, 0);
+       deUint32        textures[]      = {0x1234, 0x1234};
+       deInt32         immutable       = 0x1234;
+       const bool      isES32          = contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
 
        ctx.beginSection("GL_INVALID_OPERATION is generated if the default texture object is curently bound to target.");
-       ctx.glTexStorage2D      (GL_TEXTURE_2D, 1, GL_RGBA8, 16, 16);
-       ctx.expectError         (GL_INVALID_OPERATION);
+       ctx.glBindTexture(GL_TEXTURE_2D, 0);
+       ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 16, 16);
+       ctx.expectError(GL_INVALID_OPERATION);
+
+       if (isES32)
+       {
+               ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, 0);
+               ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 1, GL_RGBA8, 16, 16);
+               ctx.expectError(GL_INVALID_OPERATION);
+       }
        ctx.endSection();
 
-       deUint32                texture = 0x1234;
-       ctx.glGenTextures       (1, &texture);
-       ctx.glBindTexture       (GL_TEXTURE_2D, texture);
+       ctx.glGenTextures(2, textures);
 
        ctx.beginSection("GL_INVALID_OPERATION is generated if the texture object currently bound to target already has GL_TEXTURE_IMMUTABLE_FORMAT set to GL_TRUE.");
-       deInt32                 immutable = 0x1234;
+       ctx.glBindTexture(GL_TEXTURE_2D, textures[0]);
        ctx.glGetTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable);
        ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage;
-       ctx.glTexStorage2D      (GL_TEXTURE_2D, 1, GL_RGBA8, 16, 16);
-       ctx.expectError         (GL_NO_ERROR);
+       ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 16, 16);
+       ctx.expectError(GL_NO_ERROR);
        ctx.glGetTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable);
        ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage;
-       ctx.glTexStorage2D      (GL_TEXTURE_2D, 1, GL_RGBA8, 16, 16);
-       ctx.expectError         (GL_INVALID_OPERATION);
+       ctx.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 16, 16);
+       ctx.expectError(GL_INVALID_OPERATION);
+
+       if (isES32)
+       {
+               ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, textures[1]);
+               ctx.glGetTexParameteriv(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable);
+               ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage;
+               ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 1, GL_RGBA8, 16, 16);
+               ctx.expectError(GL_NO_ERROR);
+               ctx.glGetTexParameteriv(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable);
+               ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage;
+               ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 1, GL_RGBA8, 16, 16);
+               ctx.expectError(GL_INVALID_OPERATION);
+       }
        ctx.endSection();
 
-       ctx.glDeleteTextures(1, &texture);
+       ctx.glDeleteTextures(2, textures);
 }
 
 void texstorage2d_invalid_levels (NegativeTestContext& ctx)
 {
-       deUint32  texture = 0x1234;
-       ctx.glGenTextures       (1, &texture);
-       ctx.glBindTexture       (GL_TEXTURE_2D, texture);
+       deUint32        textures[]      = {0x1234, 0x1234};
+       deUint32        log2MaxSize     = deLog2Floor32(deMax32(16, 4)) + 1 + 1;
+       const bool      isES32          = contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+
+       ctx.glGenTextures(2, textures);
+       ctx.glBindTexture(GL_TEXTURE_2D, textures[0]);
+
+       if (isES32)
+               ctx.glBindTexture(GL_TEXTURE_CUBE_MAP, textures[1]);
+
+       ctx.expectError(GL_NO_ERROR);
 
        ctx.beginSection("GL_INVALID_VALUE is generated if levels is less than 1.");
-       ctx.glTexStorage2D      (GL_TEXTURE_2D, 0, GL_RGBA8, 16, 16);
-       ctx.expectError         (GL_INVALID_VALUE);
-       ctx.glTexStorage2D      (GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0);
-       ctx.expectError         (GL_INVALID_VALUE);
+       ctx.glTexStorage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 16, 16);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glTexStorage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0);
+       ctx.expectError(GL_INVALID_VALUE);
+
+       if (isES32)
+       {
+               ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 0, GL_RGBA8, 16, 16);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, 0, GL_RGBA8, 0, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+       }
        ctx.endSection();
 
        ctx.beginSection("GL_INVALID_OPERATION is generated if levels is greater than floor(log_2(max(width, height))) + 1");
-       deUint32 log2MaxSize = deLog2Floor32(deMax32(16, 4)) + 1 + 1;
-       ctx.glTexStorage2D      (GL_TEXTURE_2D, log2MaxSize, GL_RGBA8, 16, 4);
-       ctx.expectError         (GL_INVALID_OPERATION);
-       ctx.glTexStorage2D      (GL_TEXTURE_2D, log2MaxSize, GL_RGBA8, 4, 16);
-       ctx.expectError         (GL_INVALID_OPERATION);
-       ctx.glTexStorage2D      (GL_TEXTURE_2D, log2MaxSize, GL_RGBA8, 16, 16);
-       ctx.expectError         (GL_INVALID_OPERATION);
+       ctx.glTexStorage2D(GL_TEXTURE_2D, log2MaxSize, GL_RGBA8, 16, 4);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.glTexStorage2D(GL_TEXTURE_2D, log2MaxSize, GL_RGBA8, 4, 16);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.glTexStorage2D(GL_TEXTURE_2D, log2MaxSize, GL_RGBA8, 16, 16);
+       ctx.expectError(GL_INVALID_OPERATION);
+
+       if (isES32)
+       {
+               ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, log2MaxSize, GL_RGBA8, 16, 4);
+               ctx.expectError(GL_INVALID_OPERATION);
+               ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, log2MaxSize, GL_RGBA8, 4, 16);
+               ctx.expectError(GL_INVALID_OPERATION);
+               ctx.glTexStorage2D(GL_TEXTURE_CUBE_MAP, log2MaxSize, GL_RGBA8, 16, 16);
+               ctx.expectError(GL_INVALID_OPERATION);
+       }
        ctx.endSection();
 
-       ctx.glDeleteTextures(1, &texture);
+       ctx.glDeleteTextures(2, textures);
 }
 
 // glTexStorage3D
 
 void texstorage3d (NegativeTestContext& ctx)
 {
-       deUint32 texture = 0x1234;
-       ctx.glGenTextures       (1, &texture);
-       ctx.glBindTexture       (GL_TEXTURE_3D, texture);
+       deUint32 textures[] = {0x1234, 0x1234};
+
+       ctx.glGenTextures(2, textures);
+       ctx.glBindTexture(GL_TEXTURE_3D, textures[0]);
+       ctx.expectError(GL_NO_ERROR);
 
        ctx.beginSection("GL_INVALID_ENUM or GL_INVALID_VALUE is generated if internalformat is not a valid sized internal format.");
-       ctx.glTexStorage3D      (GL_TEXTURE_3D, 1, 0, 4, 4, 4);
-       ctx.expectError         (GL_INVALID_ENUM, GL_INVALID_VALUE);
-       ctx.glTexStorage3D      (GL_TEXTURE_3D, 1, GL_RGBA_INTEGER, 4, 4, 4);
-       ctx.expectError         (GL_INVALID_ENUM, GL_INVALID_VALUE);
+       ctx.glTexStorage3D(GL_TEXTURE_3D, 1, 0, 4, 4, 4);
+       ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE);
+       ctx.glTexStorage3D(GL_TEXTURE_3D, 1, GL_RGBA_INTEGER, 4, 4, 4);
+       ctx.expectError(GL_INVALID_ENUM, GL_INVALID_VALUE);
        ctx.endSection();
 
        ctx.beginSection("GL_INVALID_ENUM is generated if target is not one of the accepted target enumerants.");
-       ctx.glTexStorage3D      (0, 1, GL_RGBA8, 4, 4, 4);
-       ctx.expectError         (GL_INVALID_ENUM);
-       ctx.glTexStorage3D      (GL_TEXTURE_CUBE_MAP, 1, GL_RGBA8, 4, 4, 4);
-       ctx.expectError         (GL_INVALID_ENUM);
-       ctx.glTexStorage3D      (GL_TEXTURE_2D, 1, GL_RGBA8, 4, 4, 4);
-       ctx.expectError         (GL_INVALID_ENUM);
+       ctx.glTexStorage3D(0, 1, GL_RGBA8, 4, 4, 4);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexStorage3D(GL_TEXTURE_CUBE_MAP, 1, GL_RGBA8, 4, 4, 4);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glTexStorage3D(GL_TEXTURE_2D, 1, GL_RGBA8, 4, 4, 4);
+       ctx.expectError(GL_INVALID_ENUM);
        ctx.endSection();
 
        ctx.beginSection("GL_INVALID_VALUE is generated if width, height or depth are less than 1.");
-       ctx.glTexStorage3D      (GL_TEXTURE_3D, 1, GL_RGBA8, 0, 4, 4);
-       ctx.expectError         (GL_INVALID_VALUE);
-       ctx.glTexStorage3D      (GL_TEXTURE_3D, 1, GL_RGBA8, 4, 0, 4);
-       ctx.expectError         (GL_INVALID_VALUE);
-       ctx.glTexStorage3D      (GL_TEXTURE_3D, 1, GL_RGBA8, 4, 4, 0);
-       ctx.expectError         (GL_INVALID_VALUE);
-       ctx.glTexStorage3D      (GL_TEXTURE_3D, 1, GL_RGBA8, 0, 0, 0);
-       ctx.expectError         (GL_INVALID_VALUE);
+       ctx.glTexStorage3D(GL_TEXTURE_3D, 1, GL_RGBA8, 0, 4, 4);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glTexStorage3D(GL_TEXTURE_3D, 1, GL_RGBA8, 4, 0, 4);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glTexStorage3D(GL_TEXTURE_3D, 1, GL_RGBA8, 4, 4, 0);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glTexStorage3D(GL_TEXTURE_3D, 1, GL_RGBA8, 0, 0, 0);
+       ctx.expectError(GL_INVALID_VALUE);
+
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+       {
+               ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, textures[1]);
+               ctx.expectError(GL_NO_ERROR);
+               ctx.glTexStorage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA8, 0, 4, 4);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.glTexStorage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA8, 4, 0, 4);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.glTexStorage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA8, 4, 4, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.glTexStorage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA8, 0, 0, 0);
+               ctx.expectError(GL_INVALID_VALUE);
+       }
        ctx.endSection();
 
-       ctx.glDeleteTextures(1, &texture);
+       ctx.glDeleteTextures(2, textures);
 }
 
 void texstorage3d_invalid_binding (NegativeTestContext& ctx)
 {
-       ctx.glBindTexture       (GL_TEXTURE_3D, 0);
+       deUint32        textures[]      = {0x1234, 0x1234};
+       deInt32         immutable       = 0x1234;
 
        ctx.beginSection("GL_INVALID_OPERATION is generated if the default texture object is curently bound to target.");
+       ctx.glBindTexture       (GL_TEXTURE_3D, 0);
        ctx.glTexStorage3D      (GL_TEXTURE_3D, 1, GL_RGBA8, 4, 4, 4);
        ctx.expectError         (GL_INVALID_OPERATION);
+
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+       {
+               ctx.glBindTexture       (GL_TEXTURE_CUBE_MAP_ARRAY, 0);
+               ctx.glTexStorage3D      (GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA8, 4, 4, 4);
+               ctx.expectError         (GL_INVALID_OPERATION);
+       }
        ctx.endSection();
 
-       deUint32                texture = 0x1234;
-       ctx.glGenTextures       (1, &texture);
-       ctx.glBindTexture       (GL_TEXTURE_3D, texture);
+       ctx.glGenTextures       (2, textures);
 
        ctx.beginSection("GL_INVALID_OPERATION is generated if the texture object currently bound to target already has GL_TEXTURE_IMMUTABLE_FORMAT set to GL_TRUE.");
-       deInt32                 immutable = 0x1234;
+       ctx.glBindTexture       (GL_TEXTURE_3D, textures[0]);
        ctx.glGetTexParameteriv(GL_TEXTURE_3D, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable);
        ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage;
        ctx.glTexStorage3D      (GL_TEXTURE_3D, 1, GL_RGBA8, 4, 4, 4);
@@ -2995,26 +3887,49 @@ void texstorage3d_invalid_binding (NegativeTestContext& ctx)
        ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage;
        ctx.glTexStorage3D      (GL_TEXTURE_3D, 1, GL_RGBA8, 4, 4, 4);
        ctx.expectError         (GL_INVALID_OPERATION);
+
+       if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+       {
+               ctx.glBindTexture       (GL_TEXTURE_CUBE_MAP_ARRAY, textures[1]);
+               ctx.glGetTexParameteriv(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable);
+               ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage;
+               ctx.glTexStorage3D      (GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA8, 4, 4, 6);
+               ctx.expectError         (GL_NO_ERROR);
+               ctx.glGetTexParameteriv(GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_IMMUTABLE_FORMAT, &immutable);
+               ctx.getLog() << TestLog::Message << "// GL_TEXTURE_IMMUTABLE_FORMAT = " << ((immutable != 0) ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage;
+               ctx.glTexStorage3D      (GL_TEXTURE_CUBE_MAP_ARRAY, 1, GL_RGBA8, 4, 4, 6);
+               ctx.expectError         (GL_INVALID_OPERATION);
+       }
        ctx.endSection();
 
-       ctx.glDeleteTextures(1, &texture);
+       ctx.glDeleteTextures(2, textures);
 }
 
 void texstorage3d_invalid_levels (NegativeTestContext& ctx)
 {
-       deUint32  texture = 0x1234;
-       ctx.glGenTextures       (1, &texture);
-       ctx.glBindTexture       (GL_TEXTURE_3D, texture);
+       deUint32        textures[]      = {0x1234, 0x1234};
+       deUint32        log2MaxSize     = deLog2Floor32(8) + 1 + 1;
+       const bool      isES32          = contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+       ctx.glGenTextures(2, textures);
+       ctx.glBindTexture(GL_TEXTURE_3D, textures[0]);
 
        ctx.beginSection("GL_INVALID_VALUE is generated if levels is less than 1.");
-       ctx.glTexStorage3D      (GL_TEXTURE_3D, 0, GL_RGBA8, 4, 4, 4);
-       ctx.expectError         (GL_INVALID_VALUE);
-       ctx.glTexStorage3D      (GL_TEXTURE_3D, 0, GL_RGBA8, 0, 0, 0);
-       ctx.expectError         (GL_INVALID_VALUE);
+       ctx.glTexStorage3D(GL_TEXTURE_3D, 0, GL_RGBA8, 4, 4, 4);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glTexStorage3D(GL_TEXTURE_3D, 0, GL_RGBA8, 0, 0, 0);
+       ctx.expectError(GL_INVALID_VALUE);
+
+       if (isES32 || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+       {
+               ctx.glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, textures[1]);
+               ctx.glTexStorage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA8, 4, 4, 6);
+               ctx.expectError(GL_INVALID_VALUE);
+               ctx.glTexStorage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, GL_RGBA8, 0, 0, 6);
+               ctx.expectError(GL_INVALID_VALUE);
+       }
        ctx.endSection();
 
        ctx.beginSection("GL_INVALID_OPERATION is generated if levels is greater than floor(log_2(max(width, height, depth))) + 1");
-       deUint32 log2MaxSize = deLog2Floor32(8) + 1 + 1;
        ctx.glTexStorage3D      (GL_TEXTURE_3D, log2MaxSize, GL_RGBA8, 8, 2, 2);
        ctx.expectError         (GL_INVALID_OPERATION);
        ctx.glTexStorage3D      (GL_TEXTURE_3D, log2MaxSize, GL_RGBA8, 2, 8, 2);
@@ -3023,9 +3938,21 @@ void texstorage3d_invalid_levels (NegativeTestContext& ctx)
        ctx.expectError         (GL_INVALID_OPERATION);
        ctx.glTexStorage3D      (GL_TEXTURE_3D, log2MaxSize, GL_RGBA8, 8, 8, 8);
        ctx.expectError         (GL_INVALID_OPERATION);
+
+       if (isES32 || ctx.getContextInfo().isExtensionSupported("GL_OES_texture_cube_map_array"))
+       {
+               ctx.glTexStorage3D      (GL_TEXTURE_CUBE_MAP_ARRAY, log2MaxSize, GL_RGBA8, 8, 2, 6);
+               ctx.expectError         (GL_INVALID_OPERATION);
+               ctx.glTexStorage3D      (GL_TEXTURE_CUBE_MAP_ARRAY, log2MaxSize, GL_RGBA8, 2, 8, 6);
+               ctx.expectError         (GL_INVALID_OPERATION);
+               ctx.glTexStorage3D      (GL_TEXTURE_CUBE_MAP_ARRAY, log2MaxSize, GL_RGBA8, 2, 2, 6);
+               ctx.expectError         (GL_INVALID_OPERATION);
+               ctx.glTexStorage3D      (GL_TEXTURE_CUBE_MAP_ARRAY, log2MaxSize, GL_RGBA8, 8, 8, 6);
+               ctx.expectError         (GL_INVALID_OPERATION);
+       }
        ctx.endSection();
 
-       ctx.glDeleteTextures(1, &texture);
+       ctx.glDeleteTextures(2, textures);
 }
 
 std::vector<FunctionContainer> getNegativeTextureApiTestFunctions()
@@ -3042,6 +3969,8 @@ std::vector<FunctionContainer> getNegativeTextureApiTestFunctions()
                {compressedteximage2d_max_width_height,                 "compressedteximage2d_max_width_height",                        "Invalid glCompressedTexImage2D() usage"   },
                {compressedteximage2d_invalid_border,                   "compressedteximage2d_invalid_border",                          "Invalid glCompressedTexImage2D() usage"   },
                {compressedteximage2d_invalid_size,                             "compressedteximage2d_invalid_size",                            "Invalid glCompressedTexImage2D() usage"   },
+               {compressedteximage2d_neg_size,                                 "compressedteximage2d_neg_size",                                        "Invalid glCompressedTexImage2D() usage"   },
+               {compressedteximage2d_invalid_width_height,             "compressedteximage2d_invalid_width_height",            "Invalid glCompressedTexImage2D() usage"   },
                {compressedteximage2d_invalid_buffer_target,    "compressedteximage2d_invalid_buffer_target",           "Invalid glCompressedTexImage2D() usage"   },
                {copyteximage2d_invalid_target,                                 "copyteximage2d_invalid_target",                                        "Invalid glCopyTexImage2D() usage"                 },
                {copyteximage2d_invalid_format,                                 "copyteximage2d_invalid_format",                                        "Invalid glCopyTexImage2D() usage"                 },
@@ -3053,6 +3982,8 @@ std::vector<FunctionContainer> getNegativeTextureApiTestFunctions()
                {copyteximage2d_invalid_border,                                 "copyteximage2d_invalid_border",                                        "Invalid glCopyTexImage2D() usage"                 },
                {copyteximage2d_incomplete_framebuffer,                 "copyteximage2d_incomplete_framebuffer",                        "Invalid glCopyTexImage2D() usage"                 },
                {copytexsubimage2d_invalid_target,                              "copytexsubimage2d_invalid_target",                                     "Invalid glCopyTexSubImage2D() usage"      },
+               {copytexsubimage2d_read_buffer_is_none,                 "copytexsubimage2d_read_buffer_is_none",                        "Invalid glCopyTexSubImage2D() usage"      },
+               {copytexsubimage2d_texture_internalformat,              "copytexsubimage2d_texture_internalformat",                     "Invalid glCopyTexSubImage2D() usage"      },
                {copytexsubimage2d_neg_level,                                   "copytexsubimage2d_neg_level",                                          "Invalid glCopyTexSubImage2D() usage"      },
                {copytexsubimage2d_max_level,                                   "copytexsubimage2d_max_level",                                          "Invalid glCopyTexSubImage2D() usage"      },
                {copytexsubimage2d_neg_offset,                                  "copytexsubimage2d_neg_offset",                                         "Invalid glCopyTexSubImage2D() usage"      },
@@ -3082,6 +4013,8 @@ std::vector<FunctionContainer> getNegativeTextureApiTestFunctions()
                {texparameterf,                                                                 "texparameterf",                                                                        "Invalid glTexParameterf() usage"                  },
                {texparameteriv,                                                                "texparameteriv",                                                                       "Invalid glTexParameteriv() usage"                 },
                {texparameterfv,                                                                "texparameterfv",                                                                       "Invalid glTexParameterfv() usage"                 },
+               {texparameterIiv,                                                               "texparameterIiv",                                                                      "Invalid glTexParameterIiv() usage"                },
+               {texparameterIuiv,                                                              "texparameterIuiv",                                                                     "Invalid glTexParameterIuiv() usage"       },
                {compressedtexsubimage2d,                                               "compressedtexsubimage2d",                                                      "Invalid glCompressedTexSubImage2D() usage"},
                {compressedtexsubimage2d_neg_level,                             "compressedtexsubimage2d_neg_level",                            "Invalid glCompressedTexSubImage2D() usage"},
                {compressedtexsubimage2d_max_level,                             "compressedtexsubimage2d_max_level",                            "Invalid glCompressedTexSubImage2D() usage"},
@@ -3118,6 +4051,8 @@ std::vector<FunctionContainer> getNegativeTextureApiTestFunctions()
                {compressedteximage3d_max_width_height_depth,   "compressedteximage3d_max_width_height_depth",          "Invalid glCompressedTexImage3D() usage"   },
                {compressedteximage3d_invalid_border,                   "compressedteximage3d_invalid_border",                          "Invalid glCompressedTexImage3D() usage"   },
                {compressedteximage3d_invalid_size,                             "compressedteximage3d_invalid_size",                            "Invalid glCompressedTexImage3D() usage"   },
+               {compressedteximage3d_invalid_width_height,             "compressedteximage3d_invalid_width_height",            "Invalid glCompressedTexImage3D() usage"   },
+               {compressedteximage3d_invalid_format,                   "compressedteximage3d_invalid_format",                          "Invalid glCompressedTexImage3D() usage"   },
                {compressedteximage3d_invalid_buffer_target,    "compressedteximage3d_invalid_buffer_target",           "Invalid glCompressedTexImage3D() usage"   },
                {compressedtexsubimage3d,                                               "compressedtexsubimage3d",                                                      "Invalid glCompressedTexSubImage3D() usage"},
                {compressedtexsubimage3d_neg_level,                             "compressedtexsubimage3d_neg_level",                            "Invalid glCompressedTexSubImage3D() usage"},
index a7f50c2..8fa3fc6 100644 (file)
@@ -1,4 +1,4 @@
-/*-------------------------------------------------------------------------
+/*-------------------------------------------------------------------------
  * drawElements Quality Program OpenGL ES 3.1 Module
  * -------------------------------------------------
  *
  *//*--------------------------------------------------------------------*/
 
 #include "es31fNegativeVertexArrayApiTests.hpp"
-
 #include "gluCallLogWrapper.hpp"
 #include "gluContextInfo.hpp"
 #include "gluShaderProgram.hpp"
-
 #include "glwDefs.hpp"
 #include "glwEnums.hpp"
+#include "tcuStringTemplate.hpp"
 
 namespace deqp
 {
+
+using std::string;
+using std::map;
+
 namespace gles31
 {
 namespace Functional
@@ -43,13 +46,13 @@ using tcu::TestLog;
 using glu::CallLogWrapper;
 using namespace glw;
 
-static const char* vertexShaderSource          =       "#version 300 es\n"
+static const char* vertexShaderSource          =       "${GLSL_VERSION_STRING}\n"
                                                                                                "void main (void)\n"
                                                                                                "{\n"
                                                                                                "       gl_Position = vec4(0.0);\n"
                                                                                                "}\n\0";
 
-static const char* fragmentShaderSource                =       "#version 300 es\n"
+static const char* fragmentShaderSource                =       "${GLSL_VERSION_STRING}\n"
                                                                                                "layout(location = 0) out mediump vec4 fragColor;"
                                                                                                "void main (void)\n"
                                                                                                "{\n"
@@ -210,10 +213,121 @@ void vertex_attrib_i_pointer (NegativeTestContext& ctx)
        ctx.endSection();
 }
 
+void vertex_attrib_format (NegativeTestContext& ctx)
+{
+       int             maxVertexAttribs                                = ctx.getInteger(GL_MAX_VERTEX_ATTRIBS);
+       int             maxVertexAttribRelativeOffset   = ctx.getInteger(GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET);
+       GLuint  vao                                                             = 0;
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if attribindex is greater than or equal to the value of MAX_VERTEX_ATTRIBS.");
+       ctx.glGenVertexArrays(1, &vao);
+       ctx.glBindVertexArray(vao);
+       ctx.glBindBuffer(GL_ARRAY_BUFFER, 0);
+       ctx.glVertexAttribFormat(maxVertexAttribs, 4, GL_FLOAT, GL_FALSE, maxVertexAttribRelativeOffset);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if size is not one of 1, 2, 3, 4.");
+       ctx.glGenVertexArrays(1, &vao);
+       ctx.glBindVertexArray(vao);
+       ctx.glBindBuffer(GL_ARRAY_BUFFER, 0);
+       ctx.glVertexAttribFormat(1, 0, GL_FLOAT, GL_FALSE, maxVertexAttribRelativeOffset);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if type is not one of the parameter token names allowed.");
+       ctx.glGenVertexArrays(1, &vao);
+       ctx.glBindVertexArray(vao);
+       ctx.glBindBuffer(GL_ARRAY_BUFFER, 0);
+       ctx.glVertexAttribFormat(1, 4, 1, GL_FALSE, 0);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if type is not a token name allowed.");
+       ctx.glGenVertexArrays(1, &vao);
+       ctx.glBindVertexArray(0);
+       ctx.glBindBuffer(GL_ARRAY_BUFFER, 0);
+       ctx.glVertexAttribFormat(1, 4, GL_FLOAT, GL_FALSE, 0);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if type is GL_INT_2_10_10_10_REV and size is not 4.");
+       ctx.glGenVertexArrays(1, &vao);
+       ctx.glBindVertexArray(vao);
+       ctx.glBindBuffer(GL_ARRAY_BUFFER, 0);
+       ctx.glVertexAttribFormat(1, 3, GL_INT_2_10_10_10_REV, GL_FALSE, 0);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if type is GL_UNSIGNED_INT_2_10_10_10_REV and size is not 4.");
+       ctx.glGenVertexArrays(1, &vao);
+       ctx.glBindVertexArray(vao);
+       ctx.glBindBuffer(GL_ARRAY_BUFFER, 0);
+       ctx.glVertexAttribFormat(1, 3, GL_UNSIGNED_INT_2_10_10_10_REV, GL_FALSE, 0);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if relativeoffset is larger than the value of GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET.");
+       ctx.glGenVertexArrays(1, &vao);
+       ctx.glBindVertexArray(vao);
+       ctx.glBindBuffer(GL_ARRAY_BUFFER, 0);
+       ctx.glVertexAttribFormat(1, 4, GL_FLOAT, GL_FALSE, maxVertexAttribRelativeOffset + 1);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+}
+
+void vertex_attrib_i_format (NegativeTestContext& ctx)
+{
+       int             maxVertexAttribs                                = ctx.getInteger(GL_MAX_VERTEX_ATTRIBS);
+       int             maxVertexAttribRelativeOffset   = ctx.getInteger(GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET);
+       GLuint  vao                                                             = 0;
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if attribindex is greater than or equal to the value of GL_MAX_VERTEX_ATTRIBS.");
+       ctx.glGenVertexArrays(1, &vao);
+       ctx.glBindVertexArray(vao);
+       ctx.glBindBuffer(GL_ARRAY_BUFFER, 0);
+       ctx.glVertexAttribIFormat(maxVertexAttribs, 4, GL_INT, 0);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if size is not one the values 1, 2, 3, 4.");
+       ctx.glGenVertexArrays(1, &vao);
+       ctx.glBindVertexArray(vao);
+       ctx.glBindBuffer(GL_ARRAY_BUFFER, 0);
+       ctx.glVertexAttribIFormat(1, 0, GL_INT, 0);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if type is not one of the parameter token names allowed.");
+       ctx.glGenVertexArrays(1, &vao);
+       ctx.glBindVertexArray(vao);
+       ctx.glBindBuffer(GL_ARRAY_BUFFER, 0);
+       ctx.glVertexAttribIFormat(1, 4, GL_FLOAT, 0);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_OPERATION is generated if type is not a token name allowed.");
+       ctx.glGenVertexArrays(1, &vao);
+       ctx.glBindVertexArray(0);
+       ctx.glBindBuffer(GL_ARRAY_BUFFER, 0);
+       ctx.glVertexAttribIFormat(1, 4, GL_INT, 0);
+       ctx.expectError(GL_INVALID_OPERATION);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if relativeoffset is larger than the value of GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET.");
+       ctx.glGenVertexArrays(1, &vao);
+       ctx.glBindVertexArray(vao);
+       ctx.glBindBuffer(GL_ARRAY_BUFFER, 0);
+       ctx.glVertexAttribIFormat(1, 4, GL_INT, maxVertexAttribRelativeOffset + 1);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+}
+
 void enable_vertex_attrib_array (NegativeTestContext& ctx)
 {
-       ctx.beginSection("GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
        int maxVertexAttribs = ctx.getInteger(GL_MAX_VERTEX_ATTRIBS);
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
        ctx.glEnableVertexAttribArray(maxVertexAttribs);
        ctx.expectError(GL_INVALID_VALUE);
        ctx.endSection();
@@ -221,8 +335,9 @@ void enable_vertex_attrib_array (NegativeTestContext& ctx)
 
 void disable_vertex_attrib_array (NegativeTestContext& ctx)
 {
-       ctx.beginSection("GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
        int maxVertexAttribs = ctx.getInteger(GL_MAX_VERTEX_ATTRIBS);
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
        ctx.glDisableVertexAttribArray(maxVertexAttribs);
        ctx.expectError(GL_INVALID_VALUE);
        ctx.endSection();
@@ -230,8 +345,9 @@ void disable_vertex_attrib_array (NegativeTestContext& ctx)
 
 void gen_vertex_arrays (NegativeTestContext& ctx)
 {
-       ctx.beginSection("GL_INVALID_VALUE is generated if n is negative.");
        GLuint arrays = 0;
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if n is negative.");
        ctx.glGenVertexArrays(-1, &arrays);
        ctx.expectError(GL_INVALID_VALUE);
        ctx.endSection();
@@ -255,8 +371,9 @@ void delete_vertex_arrays (NegativeTestContext& ctx)
 
 void vertex_attrib_divisor (NegativeTestContext& ctx)
 {
-       ctx.beginSection("GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
        int maxVertexAttribs = ctx.getInteger(GL_MAX_VERTEX_ATTRIBS);
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if index is greater than or equal to GL_MAX_VERTEX_ATTRIBS.");
        ctx.glVertexAttribDivisor(maxVertexAttribs, 0);
        ctx.expectError(GL_INVALID_VALUE);
        ctx.endSection();
@@ -264,9 +381,14 @@ void vertex_attrib_divisor (NegativeTestContext& ctx)
 
 void draw_arrays (NegativeTestContext& ctx)
 {
-       glu::ShaderProgram program(ctx.getRenderContext(), glu::makeVtxFragSources(vertexShaderSource, fragmentShaderSource));
+       const bool                                      isES32  = glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+       GLuint                                          fbo             = 0;
+       map<string, string>             args;
+       args["GLSL_VERSION_STRING"]                     = isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+       glu::ShaderProgram                      program (ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+
        ctx.glUseProgram(program.getProgram());
-       GLuint fbo = 0;
+       ctx.expectError(GL_NO_ERROR);
 
        ctx.beginSection("GL_INVALID_ENUM is generated if mode is not an accepted value.");
        ctx.glDrawArrays(-1, 0, 1);
@@ -293,8 +415,8 @@ void draw_arrays (NegativeTestContext& ctx)
 
 void draw_arrays_invalid_program (NegativeTestContext& ctx)
 {
-       ctx.glUseProgram(0);
        GLuint fbo = 0;
+       ctx.glUseProgram(0);
 
        ctx.beginSection("GL_INVALID_ENUM is generated if mode is not an accepted value.");
        ctx.glDrawArrays(-1, 0, 1);
@@ -319,9 +441,14 @@ void draw_arrays_invalid_program (NegativeTestContext& ctx)
 
 void draw_arrays_incomplete_primitive (NegativeTestContext& ctx)
 {
-       glu::ShaderProgram program(ctx.getRenderContext(), glu::makeVtxFragSources(vertexShaderSource, fragmentShaderSource));
+       const bool                                      isES32  = glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+       GLuint                                          fbo             = 0;
+       map<string, string>             args;
+       args["GLSL_VERSION_STRING"]                     = isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+       glu::ShaderProgram                      program (ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+
        ctx.glUseProgram(program.getProgram());
-       GLuint fbo = 0;
+       ctx.expectError(GL_NO_ERROR);
 
        ctx.beginSection("GL_INVALID_ENUM is generated if mode is not an accepted value.");
        ctx.glDrawArrays(-1, 0, 1);
@@ -348,12 +475,17 @@ void draw_arrays_incomplete_primitive (NegativeTestContext& ctx)
 
 void draw_elements (NegativeTestContext& ctx)
 {
-       glu::ShaderProgram program(ctx.getRenderContext(), glu::makeVtxFragSources(vertexShaderSource, fragmentShaderSource));
+       const bool                                      isES32  = glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+       GLuint                                          fbo             = 0;
+       GLuint                                          buf             = 0;
+       GLuint                                          tfID    = 0;
+       GLfloat                                         vertices[1];
+       map<string, string>             args;
+       args["GLSL_VERSION_STRING"]                     = isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+       glu::ShaderProgram                      program (ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+
        ctx.glUseProgram(program.getProgram());
-       GLuint fbo = 0;
-       GLuint buf = 0;
-       GLuint tfID = 0;
-       GLfloat vertices[1];
+       ctx.expectError(GL_NO_ERROR);
 
        ctx.beginSection("GL_INVALID_ENUM is generated if mode is not an accepted value.");
        ctx.glDrawElements(-1, 1, GL_UNSIGNED_BYTE, vertices);
@@ -385,32 +517,32 @@ void draw_elements (NegativeTestContext& ctx)
        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";
+               const char* tfVarying = "gl_Position";
 
-               ctx.glGenBuffers                                (1, &buf);
-               ctx.glGenTransformFeedbacks             (1, &tfID);
+               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.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.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.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.glEndTransformFeedback();
+               ctx.glDeleteBuffers(1, &buf);
+               ctx.glDeleteTransformFeedbacks(1, &tfID);
+               ctx.expectError(GL_NO_ERROR);
                ctx.endSection();
        }
 
@@ -420,8 +552,8 @@ void draw_elements (NegativeTestContext& ctx)
 void draw_elements_invalid_program (NegativeTestContext& ctx)
 {
        ctx.glUseProgram(0);
-       GLuint fbo = 0;
-       GLfloat vertices[1];
+       GLuint  fbo = 0;
+       GLfloat vertices[1];
 
        ctx.beginSection("GL_INVALID_ENUM is generated if mode is not an accepted value.");
        ctx.glDrawElements(-1, 1, GL_UNSIGNED_BYTE, vertices);
@@ -453,12 +585,17 @@ void draw_elements_invalid_program (NegativeTestContext& ctx)
 
 void draw_elements_incomplete_primitive (NegativeTestContext& ctx)
 {
-       glu::ShaderProgram program(ctx.getRenderContext(), glu::makeVtxFragSources(vertexShaderSource, fragmentShaderSource));
+       const bool                                      isES32  = glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+       GLuint                                          fbo             = 0;
+       GLuint                                          buf             = 0;
+       GLuint                                          tfID    = 0;
+       GLfloat                                         vertices[1];
+       map<string, string>             args;
+       args["GLSL_VERSION_STRING"]                     = isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+       glu::ShaderProgram                      program (ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+
        ctx.glUseProgram(program.getProgram());
-       GLuint fbo = 0;
-       GLuint buf = 0;
-       GLuint tfID = 0;
-       GLfloat vertices[1];
+       ctx.expectError(GL_NO_ERROR);
 
        ctx.beginSection("GL_INVALID_ENUM is generated if mode is not an accepted value.");
        ctx.glDrawElements(-1, 1, GL_UNSIGNED_BYTE, vertices);
@@ -490,43 +627,83 @@ void draw_elements_incomplete_primitive (NegativeTestContext& ctx)
        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                                  ();
+               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);
 }
 
+void draw_elements_base_vertex (NegativeTestContext& ctx)
+{
+       TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a 3.2 context or higher context version.");
+
+       GLuint  fbo = 0;
+       GLfloat vertices[1];
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if mode is not an accepted value.");
+       ctx.glDrawElementsBaseVertex(-1, 1, GL_UNSIGNED_INT, vertices, 1);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if type is not one of the accepted values.");
+       ctx.glDrawElementsBaseVertex(GL_POINTS, 1, -1, vertices, 1);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glDrawElementsBaseVertex(GL_POINTS, 1, GL_FLOAT, vertices, 1);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if count is negative.");
+       ctx.glDrawElementsBaseVertex(GL_POINTS, -1, GL_UNSIGNED_INT, vertices, 1);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_FRAMEBUFFER_OPERATION is generated if the currently bound framebuffer is not framebuffer complete.");
+       ctx.glGenFramebuffers(1, &fbo);
+       ctx.glBindFramebuffer(GL_FRAMEBUFFER, fbo);
+       ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER);
+       ctx.glDrawElementsBaseVertex(GL_POINTS, -1, GL_UNSIGNED_INT, vertices, 1);
+       ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
+       ctx.glBindFramebuffer(GL_FRAMEBUFFER, 0);
+       ctx.glDeleteFramebuffers(1, &fbo);
+       ctx.endSection();
+}
+
 void draw_arrays_instanced (NegativeTestContext& ctx)
 {
-       glu::ShaderProgram program(ctx.getRenderContext(), glu::makeVtxFragSources(vertexShaderSource, fragmentShaderSource));
+       const bool                                      isES32  = glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+       GLuint                                          fbo             = 0;
+       map<string, string>             args;
+       args["GLSL_VERSION_STRING"]                     = isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+       glu::ShaderProgram                      program (ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+
        ctx.glUseProgram(program.getProgram());
-       GLuint fbo = 0;
+       ctx.expectError(GL_NO_ERROR);
        ctx.glVertexAttribDivisor(0, 1);
        ctx.expectError(GL_NO_ERROR);
 
@@ -587,9 +764,12 @@ void draw_arrays_instanced_invalid_program (NegativeTestContext& ctx)
 
 void draw_arrays_instanced_incomplete_primitive (NegativeTestContext& ctx)
 {
-       glu::ShaderProgram program(ctx.getRenderContext(), glu::makeVtxFragSources(vertexShaderSource, fragmentShaderSource));
-       ctx.glUseProgram(program.getProgram());
-       GLuint fbo = 0;
+       const bool                                      isES32  = glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+       GLuint                                          fbo             = 0;
+       map<string, string>             args;
+       args["GLSL_VERSION_STRING"]                     = isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+       glu::ShaderProgram                      program (ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+
        ctx.glVertexAttribDivisor(0, 1);
        ctx.expectError(GL_NO_ERROR);
 
@@ -620,12 +800,16 @@ void draw_arrays_instanced_incomplete_primitive (NegativeTestContext& ctx)
 
 void draw_elements_instanced (NegativeTestContext& ctx)
 {
-       glu::ShaderProgram program(ctx.getRenderContext(), glu::makeVtxFragSources(vertexShaderSource, fragmentShaderSource));
+       const bool                                      isES32  = glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+       GLuint                                          fbo             = 0;
+       GLuint                                          buf             = 0;
+       GLuint                                          tfID    = 0;
+       GLfloat                                         vertices[1];
+       map<string, string>             args;
+       args["GLSL_VERSION_STRING"]                     = isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+       glu::ShaderProgram                      program (ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+
        ctx.glUseProgram(program.getProgram());
-       GLuint fbo = 0;
-       GLuint buf = 0;
-       GLuint tfID = 0;
-       GLfloat vertices[1];
        ctx.glVertexAttribDivisor(0, 1);
        ctx.expectError(GL_NO_ERROR);
 
@@ -661,32 +845,32 @@ void draw_elements_instanced (NegativeTestContext& ctx)
        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";
+               const char* tfVarying = "gl_Position";
 
-               ctx.glGenBuffers                                (1, &buf);
-               ctx.glGenTransformFeedbacks             (1, &tfID);
+               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.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.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.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.glEndTransformFeedback();
+               ctx.glDeleteBuffers(1, &buf);
+               ctx.glDeleteTransformFeedbacks(1, &tfID);
+               ctx.expectError(GL_NO_ERROR);
                ctx.endSection();
        }
 
@@ -733,12 +917,16 @@ void draw_elements_instanced_invalid_program (NegativeTestContext& ctx)
 
 void draw_elements_instanced_incomplete_primitive (NegativeTestContext& ctx)
 {
-       glu::ShaderProgram program(ctx.getRenderContext(), glu::makeVtxFragSources(vertexShaderSource, fragmentShaderSource));
+       const bool                                      isES32  = glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+       GLuint                                          fbo             = 0;
+       GLuint                                          buf             = 0;
+       GLuint                                          tfID    = 0;
+       GLfloat                                         vertices[1];
+       map<string, string>             args;
+       args["GLSL_VERSION_STRING"]                     = isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+       glu::ShaderProgram                      program (ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+
        ctx.glUseProgram(program.getProgram());
-       GLuint fbo = 0;
-       GLuint buf = 0;
-       GLuint tfID = 0;
-       GLfloat vertices[1];
        ctx.glVertexAttribDivisor(0, 1);
        ctx.expectError(GL_NO_ERROR);
 
@@ -774,46 +962,98 @@ void draw_elements_instanced_incomplete_primitive (NegativeTestContext& ctx)
        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";
+               const char* tfVarying= "gl_Position";
 
-               ctx.glGenBuffers                                (1, &buf);
-               ctx.glGenTransformFeedbacks             (1, &tfID);
+               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.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.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.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.glEndTransformFeedback();
+               ctx.glDeleteBuffers(1, &buf);
+               ctx.glDeleteTransformFeedbacks(1, &tfID);
+               ctx.expectError(GL_NO_ERROR);
                ctx.endSection();
        }
 
        ctx.glUseProgram(0);
 }
 
+void draw_elements_instanced_base_vertex (NegativeTestContext& ctx)
+{
+       TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a 3.2 context or higher context version.");
+
+       const bool                                      isES32  = glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+       GLuint                                          fbo             = 0;
+       GLfloat                                         vertices[1];
+       map<string, string>             args;
+       args["GLSL_VERSION_STRING"]                     = isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+       glu::ShaderProgram                      program (ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+
+       ctx.glUseProgram(program.getProgram());
+       ctx.glVertexAttribDivisor(0, 1);
+       ctx.expectError(GL_NO_ERROR);
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if mode is not an accepted value.");
+       ctx.glDrawElementsInstancedBaseVertex(-1, 1, GL_UNSIGNED_BYTE, vertices, 1, 1);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if type is not one of the accepted values.");
+       ctx.glDrawElementsInstancedBaseVertex(GL_POINTS, 1, -1, vertices, 1, 1);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glDrawElementsInstancedBaseVertex(GL_POINTS, 1, GL_FLOAT, vertices, 1, 1);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if count or primcount are negative.");
+       ctx.glDrawElementsInstancedBaseVertex(GL_POINTS, -1, GL_UNSIGNED_BYTE, vertices, 1, 1);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.glDrawElementsInstancedBaseVertex(GL_POINTS, 11, GL_UNSIGNED_BYTE, vertices, -1, 1);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_FRAMEBUFFER_OPERATION is generated if the currently bound framebuffer is not framebuffer complete.");
+       ctx.glGenFramebuffers(1, &fbo);
+       ctx.glBindFramebuffer(GL_FRAMEBUFFER, fbo);
+       ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER);
+       ctx.glDrawElementsInstancedBaseVertex(GL_POINTS, 1, GL_UNSIGNED_BYTE, vertices, 1, 1);
+       ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
+       ctx.glBindFramebuffer(GL_FRAMEBUFFER, 0);
+       ctx.glDeleteFramebuffers(1, &fbo);
+       ctx.endSection();
+
+       ctx.glUseProgram(0);
+}
+
 void draw_range_elements (NegativeTestContext& ctx)
 {
-       glu::ShaderProgram program(ctx.getRenderContext(), glu::makeVtxFragSources(vertexShaderSource, fragmentShaderSource));
+       const bool                                      isES32  = glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+       GLuint                                          fbo             = 0;
+       GLuint                                          buf             = 0;
+       GLuint                                          tfID    = 0;
+       GLfloat                                         vertices[1];
+       map<string, string>             args;
+       args["GLSL_VERSION_STRING"]                     = isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+       glu::ShaderProgram                      program (ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+
        ctx.glUseProgram(program.getProgram());
-       GLuint fbo = 0;
-       GLuint buf = 0;
-       GLuint tfID = 0;
-       GLfloat vertices[1];
+       ctx.expectError(GL_NO_ERROR);
 
        ctx.beginSection("GL_INVALID_ENUM is generated if mode is not an accepted value.");
        ctx.glDrawRangeElements(-1, 0, 1, 1, GL_UNSIGNED_BYTE, vertices);
@@ -850,32 +1090,32 @@ void draw_range_elements (NegativeTestContext& ctx)
        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";
+               const char* tfVarying= "gl_Position";
 
-               ctx.glGenBuffers                                (1, &buf);
-               ctx.glGenTransformFeedbacks             (1, &tfID);
+               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.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.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.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.glEndTransformFeedback();
+               ctx.glDeleteBuffers(1, &buf);
+               ctx.glDeleteTransformFeedbacks(1, &tfID);
+               ctx.expectError(GL_NO_ERROR);
                ctx.endSection();
        }
 
@@ -923,12 +1163,17 @@ void draw_range_elements_invalid_program (NegativeTestContext& ctx)
 
 void draw_range_elements_incomplete_primitive (NegativeTestContext& ctx)
 {
-       glu::ShaderProgram program(ctx.getRenderContext(), glu::makeVtxFragSources(vertexShaderSource, fragmentShaderSource));
+       const bool                                      isES32  = glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+       GLuint                                          fbo             = 0;
+       GLuint                                          buf             = 0;
+       GLuint                                          tfID    = 0;
+       GLfloat                                         vertices[1];
+       map<string, string>             args;
+       args["GLSL_VERSION_STRING"]                     = isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+       glu::ShaderProgram                      program (ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+
        ctx.glUseProgram(program.getProgram());
-       GLuint fbo = 0;
-       GLuint buf = 0;
-       GLuint tfID = 0;
-       GLfloat vertices[1];
+       ctx.expectError(GL_NO_ERROR);
 
        ctx.beginSection("GL_INVALID_ENUM is generated if mode is not an accepted value.");
        ctx.glDrawRangeElements(-1, 0, 1, 1, GL_UNSIGNED_BYTE, vertices);
@@ -965,69 +1210,123 @@ void draw_range_elements_incomplete_primitive (NegativeTestContext& ctx)
        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";
+               const char* tfVarying = "gl_Position";
 
-               ctx.glGenBuffers                                (1, &buf);
-               ctx.glGenTransformFeedbacks             (1, &tfID);
+               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.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.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.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.glEndTransformFeedback();
+               ctx.glDeleteBuffers(1, &buf);
+               ctx.glDeleteTransformFeedbacks(1, &tfID);
+               ctx.expectError(GL_NO_ERROR);
                ctx.endSection();
        }
 
        ctx.glUseProgram(0);
 }
 
+void draw_range_elements_base_vertex (NegativeTestContext& ctx)
+{
+       TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)), "This test requires a 3.2 context or higher context version.");
+
+       const bool                                      isES32  = glu::contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
+       GLuint                                          fbo             = 0;
+       GLfloat                                         vertices[1];
+       map<string, string>             args;
+       args["GLSL_VERSION_STRING"]                     = isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+       glu::ShaderProgram                      program (ctx.getRenderContext(), glu::makeVtxFragSources(tcu::StringTemplate(vertexShaderSource).specialize(args), tcu::StringTemplate(fragmentShaderSource).specialize(args)));
+
+       ctx.glUseProgram(program.getProgram());
+       ctx.expectError(GL_NO_ERROR);
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if mode is not an accepted value.");
+       ctx.glDrawRangeElementsBaseVertex(-1, 0, 1, 1, GL_UNSIGNED_BYTE, vertices, 1);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_ENUM is generated if type is not one of the accepted values.");
+       ctx.glDrawRangeElementsBaseVertex(GL_POINTS, 0, 1, 1, -1, vertices, 1);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.glDrawRangeElementsBaseVertex(GL_POINTS, 0, 1, 1, GL_FLOAT, vertices, 1);
+       ctx.expectError(GL_INVALID_ENUM);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if count is negative.");
+       ctx.glDrawRangeElementsBaseVertex(GL_POINTS, 0, 1, -1, GL_UNSIGNED_BYTE, vertices, 1);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_VALUE is generated if end < start.");
+       ctx.glDrawRangeElementsBaseVertex(GL_POINTS, 1, 0, 1, GL_UNSIGNED_BYTE, vertices, 1);
+       ctx.expectError(GL_INVALID_VALUE);
+       ctx.endSection();
+
+       ctx.beginSection("GL_INVALID_FRAMEBUFFER_OPERATION is generated if the currently bound framebuffer is not framebuffer complete.");
+       ctx.glGenFramebuffers(1, &fbo);
+       ctx.glBindFramebuffer(GL_FRAMEBUFFER, fbo);
+       ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER);
+       ctx.glDrawRangeElementsBaseVertex(GL_POINTS, 0, 1, 1, GL_UNSIGNED_BYTE, vertices, 1);
+       ctx.expectError(GL_INVALID_FRAMEBUFFER_OPERATION);
+       ctx.glBindFramebuffer(GL_FRAMEBUFFER, 0);
+       ctx.glDeleteFramebuffers(1, &fbo);
+       ctx.endSection();
+
+       ctx.glUseProgram(0);
+}
+
 std::vector<FunctionContainer> getNegativeVertexArrayApiTestFunctions ()
 {
        FunctionContainer funcs[] =
        {
-               {vertex_attribf,                                                                "vertex_attribf",                                                               "Invalid glVertexAttrib{1234}f() usage"         },
-               {vertex_attribfv,                                                               "vertex_attribfv",                                                              "Invalid glVertexAttrib{1234}fv() usage"        },
-               {vertex_attribi4,                                                               "vertex_attribi4",                                                              "Invalid glVertexAttribI4{i|ui}f() usage"       },
-               {vertex_attribi4v,                                                              "vertex_attribi4v",                                                             "Invalid glVertexAttribI4{i|ui}fv() usage"      },
-               {vertex_attrib_pointer,                                                 "vertex_attrib_pointer",                                                "Invalid glVertexAttribPointer() usage"         },
-               {vertex_attrib_i_pointer,                                               "vertex_attrib_i_pointer",                                              "Invalid glVertexAttribPointer() usage"         },
-               {enable_vertex_attrib_array,                                    "enable_vertex_attrib_array",                                   "Invalid glEnableVertexAttribArray() usage"     },
-               {disable_vertex_attrib_array,                                   "disable_vertex_attrib_array",                                  "Invalid glDisableVertexAttribArray() usage"},
-               {gen_vertex_arrays,                                                             "gen_vertex_arrays",                                                    "Invalid glGenVertexArrays() usage"                     },
-               {bind_vertex_array,                                                             "bind_vertex_array",                                                    "Invalid glBindVertexArray() usage"                     },
-               {delete_vertex_arrays,                                                  "delete_vertex_arrays",                                                 "Invalid glDeleteVertexArrays() usage"          },
-               {vertex_attrib_divisor,                                                 "vertex_attrib_divisor",                                                "Invalid glVertexAttribDivisor() usage"         },
-               {draw_arrays,                                                                   "draw_arrays",                                                                  "Invalid glDrawArrays() usage"                          },
-               {draw_arrays_invalid_program,                                   "draw_arrays_invalid_program",                                  "Invalid glDrawArrays() usage"                          },
-               {draw_arrays_incomplete_primitive,                              "draw_arrays_incomplete_primitive",                             "Invalid glDrawArrays() usage"                          },
-               {draw_elements,                                                                 "draw_elements",                                                                "Invalid glDrawElements() usage"                        },
-               {draw_elements_invalid_program,                                 "draw_elements_invalid_program",                                "Invalid glDrawElements() usage"                        },
-               {draw_elements_incomplete_primitive,                    "draw_elements_incomplete_primitive",                   "Invalid glDrawElements() usage"                        },
-               {draw_arrays_instanced,                                                 "draw_arrays_instanced",                                                "Invalid glDrawArraysInstanced() usage"         },
-               {draw_arrays_instanced_invalid_program,                 "draw_arrays_instanced_invalid_program",                "Invalid glDrawArraysInstanced() usage"         },
-               {draw_arrays_instanced_incomplete_primitive,    "draw_arrays_instanced_incomplete_primitive",   "Invalid glDrawArraysInstanced() usage"         },
-               {draw_elements_instanced,                                               "draw_elements_instanced",                                              "Invalid glDrawElementsInstanced() usage"       },
-               {draw_elements_instanced_invalid_program,               "draw_elements_instanced_invalid_program",              "Invalid glDrawElementsInstanced() usage"       },
-               {draw_elements_instanced_incomplete_primitive,  "draw_elements_instanced_incomplete_primitive", "Invalid glDrawElementsInstanced() usage"       },
-               {draw_range_elements,                                                   "draw_range_elements",                                                  "Invalid glDrawRangeElements() usage"           },
-               {draw_range_elements_invalid_program,                   "draw_range_elements_invalid_program",                  "Invalid glDrawRangeElements() usage"           },
-               {draw_range_elements_incomplete_primitive,              "draw_range_elements_incomplete_primitive",             "Invalid glDrawRangeElements() usage"           },
+               {vertex_attribf,                                                                "vertex_attribf",                                                               "Invalid glVertexAttrib{1234}f() usage"                         },
+               {vertex_attribfv,                                                               "vertex_attribfv",                                                              "Invalid glVertexAttrib{1234}fv() usage"                        },
+               {vertex_attribi4,                                                               "vertex_attribi4",                                                              "Invalid glVertexAttribI4{i|ui}f() usage"                       },
+               {vertex_attribi4v,                                                              "vertex_attribi4v",                                                             "Invalid glVertexAttribI4{i|ui}fv() usage"                      },
+               {vertex_attrib_pointer,                                                 "vertex_attrib_pointer",                                                "Invalid glVertexAttribPointer() usage"                         },
+               {vertex_attrib_i_pointer,                                               "vertex_attrib_i_pointer",                                              "Invalid glVertexAttribPointer() usage"                         },
+               {vertex_attrib_format,                                                  "vertex_attrib_format",                                                 "Invalid glVertexAttribFormat() usage"                          },
+               {vertex_attrib_i_format,                                                "vertex_attrib_i_format",                                               "Invalid glVertexAttribIFormat() usage"                         },
+               {enable_vertex_attrib_array,                                    "enable_vertex_attrib_array",                                   "Invalid glEnableVertexAttribArray() usage"                     },
+               {disable_vertex_attrib_array,                                   "disable_vertex_attrib_array",                                  "Invalid glDisableVertexAttribArray() usage"            },
+               {gen_vertex_arrays,                                                             "gen_vertex_arrays",                                                    "Invalid glGenVertexArrays() usage"                                     },
+               {bind_vertex_array,                                                             "bind_vertex_array",                                                    "Invalid glBindVertexArray() usage"                                     },
+               {delete_vertex_arrays,                                                  "delete_vertex_arrays",                                                 "Invalid glDeleteVertexArrays() usage"                          },
+               {vertex_attrib_divisor,                                                 "vertex_attrib_divisor",                                                "Invalid glVertexAttribDivisor() usage"                         },
+               {draw_arrays,                                                                   "draw_arrays",                                                                  "Invalid glDrawArrays() usage"                                          },
+               {draw_arrays_invalid_program,                                   "draw_arrays_invalid_program",                                  "Invalid glDrawArrays() usage"                                          },
+               {draw_arrays_incomplete_primitive,                              "draw_arrays_incomplete_primitive",                             "Invalid glDrawArrays() usage"                                          },
+               {draw_elements,                                                                 "draw_elements",                                                                "Invalid glDrawElements() usage"                                        },
+               {draw_elements_base_vertex,                                             "draw_elements_base_vertex",                                    "Invalid glDrawElementsBaseVertex() usage"                      },
+               {draw_elements_invalid_program,                                 "draw_elements_invalid_program",                                "Invalid glDrawElements() usage"                                        },
+               {draw_elements_incomplete_primitive,                    "draw_elements_incomplete_primitive",                   "Invalid glDrawElements() usage"                                        },
+               {draw_arrays_instanced,                                                 "draw_arrays_instanced",                                                "Invalid glDrawArraysInstanced() usage"                         },
+               {draw_arrays_instanced_invalid_program,                 "draw_arrays_instanced_invalid_program",                "Invalid glDrawArraysInstanced() usage"                         },
+               {draw_arrays_instanced_incomplete_primitive,    "draw_arrays_instanced_incomplete_primitive",   "Invalid glDrawArraysInstanced() usage"                         },
+               {draw_elements_instanced,                                               "draw_elements_instanced",                                              "Invalid glDrawElementsInstanced() usage"                       },
+               {draw_elements_instanced_invalid_program,               "draw_elements_instanced_invalid_program",              "Invalid glDrawElementsInstanced() usage"                       },
+               {draw_elements_instanced_incomplete_primitive,  "draw_elements_instanced_incomplete_primitive", "Invalid glDrawElementsInstanced() usage"                       },
+               {draw_elements_instanced_base_vertex,                   "draw_elements_instanced_base_vertex",                  "Invalid glDrawElementsInstancedBaseVertex() usage"     },
+               {draw_range_elements,                                                   "draw_range_elements",                                                  "Invalid glDrawRangeElements() usage"                           },
+               {draw_range_elements_invalid_program,                   "draw_range_elements_invalid_program",                  "Invalid glDrawRangeElements() usage"                           },
+               {draw_range_elements_incomplete_primitive,              "draw_range_elements_incomplete_primitive",             "Invalid glDrawRangeElements() usage"                           },
+               {draw_range_elements_base_vertex,                               "draw_range_elements_base_vertex",                              "Invalid glDrawRangeElementsBaseVertex() usage"         },
        };
 
        return std::vector<FunctionContainer>(DE_ARRAY_BEGIN(funcs), DE_ARRAY_END(funcs));
index 88c4c3b..f1b06b9 100644 (file)
@@ -346,8 +346,9 @@ void SamplerIndexingCase::init (void)
        const char* extName = "GL_EXT_gpu_shader5";
 
        if (m_indexExprType != INDEX_EXPR_TYPE_CONST_LITERAL &&
+               m_indexExprType != INDEX_EXPR_TYPE_CONST_EXPRESSION &&
                !m_context.getContextInfo().isExtensionSupported(extName))
-               throw tcu::NotSupportedError(string(extName) + " extension is required for dynamic indexing of sampler arrays");
+               throw tcu::NotSupportedError(string(extName) + " extension is required for dynamic indexing of interface blocks");
 }
 
 void SamplerIndexingCase::getShaderSpec (ShaderSpec* spec, int numSamplers, int numLookups, const int* lookupIndices) const
@@ -684,6 +685,7 @@ void BlockArrayIndexingCase::init (void)
        const char* extName = "GL_EXT_gpu_shader5";
 
        if (m_indexExprType != INDEX_EXPR_TYPE_CONST_LITERAL &&
+               m_indexExprType != INDEX_EXPR_TYPE_CONST_EXPRESSION &&
                !m_context.getContextInfo().isExtensionSupported(extName))
                throw tcu::NotSupportedError(string(extName) + " extension is required for dynamic indexing of interface blocks");
 
@@ -721,7 +723,8 @@ void BlockArrayIndexingCase::getShaderSpec (ShaderSpec* spec, int numInstances,
        const char*                     layout                  = m_blockType == BLOCKTYPE_UNIFORM ? "std140" : "std430";
        std::ostringstream      global, code;
 
-       if (m_indexExprType != INDEX_EXPR_TYPE_CONST_LITERAL)
+       if (m_indexExprType != INDEX_EXPR_TYPE_CONST_LITERAL
+               && m_indexExprType != INDEX_EXPR_TYPE_CONST_EXPRESSION)
                global << "#extension GL_EXT_gpu_shader5 : require\n";
 
        if (m_indexExprType == INDEX_EXPR_TYPE_CONST_EXPRESSION)
@@ -897,8 +900,9 @@ void AtomicCounterIndexingCase::init (void)
        const char* extName = "GL_EXT_gpu_shader5";
 
        if (m_indexExprType != INDEX_EXPR_TYPE_CONST_LITERAL &&
+               m_indexExprType != INDEX_EXPR_TYPE_CONST_EXPRESSION &&
                !m_context.getContextInfo().isExtensionSupported(extName))
-               throw tcu::NotSupportedError(string(extName) + " extension is required for dynamic indexing of atomic counters");
+               throw tcu::NotSupportedError(string(extName) + " extension is required for dynamic indexing of interface blocks");
 
        if (m_shaderType == glu::SHADERTYPE_VERTEX || m_shaderType == glu::SHADERTYPE_FRAGMENT)
        {
@@ -918,7 +922,8 @@ void AtomicCounterIndexingCase::getShaderSpec (ShaderSpec* spec, int numCounters
        const char*                     resultPrefix    = "result";
        std::ostringstream      global, code;
 
-       if (m_indexExprType != INDEX_EXPR_TYPE_CONST_LITERAL)
+       if (m_indexExprType != INDEX_EXPR_TYPE_CONST_LITERAL
+               && m_indexExprType != INDEX_EXPR_TYPE_CONST_EXPRESSION)
                global << "#extension GL_EXT_gpu_shader5 : require\n";
 
        if (m_indexExprType == INDEX_EXPR_TYPE_CONST_EXPRESSION)
index 1391878..c1fa0af 100644 (file)
@@ -254,8 +254,8 @@ QueryCase::IterateResult QueryCase::iterate (void)
                const tcu::ScopedLogSection     section         (m_testCtx.getLog(), "Iteration", "Iteration " + de::toString(caseNdx+1));
                const BoundingBox&                      boundingBox     = cases[caseNdx];
 
-               gl.glPrimitiveBoundingBoxEXT(boundingBox.min.x(), boundingBox.min.y(), boundingBox.min.z(), boundingBox.min.w(),
-                                                                        boundingBox.max.x(), boundingBox.max.y(), boundingBox.max.z(), boundingBox.max.w());
+               gl.glPrimitiveBoundingBox(boundingBox.min.x(), boundingBox.min.y(), boundingBox.min.z(), boundingBox.min.w(),
+                                                                 boundingBox.max.x(), boundingBox.max.y(), boundingBox.max.z(), boundingBox.max.w());
 
                if (!verifyState(gl, boundingBox))
                        m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Unexpected query result");
@@ -830,12 +830,12 @@ void BBoxRenderCase::setupRender (const IterationConfig& config)
                        << tcu::TestLog::EndMessage;
 
        if (m_useGlobalState)
-               gl.primitiveBoundingBoxEXT(config.bbox.min.x(), config.bbox.min.y(), config.bbox.min.z(), config.bbox.min.w(),
-                                                                  config.bbox.max.x(), config.bbox.max.y(), config.bbox.max.z(), config.bbox.max.w());
+               gl.primitiveBoundingBox(config.bbox.min.x(), config.bbox.min.y(), config.bbox.min.z(), config.bbox.min.w(),
+                                                               config.bbox.max.x(), config.bbox.max.y(), config.bbox.max.z(), config.bbox.max.w());
        else
                // state is overriden by the tessellation output, set bbox to invisible area to imitiate dirty state left by application
-               gl.primitiveBoundingBoxEXT(-2.0f, -2.0f, 0.0f, 1.0f,
-                                                                  -1.7f, -1.7f, 0.0f, 1.0f);
+               gl.primitiveBoundingBox(-2.0f, -2.0f, 0.0f, 1.0f,
+                                                               -1.7f, -1.7f, 0.0f, 1.0f);
 
        if (m_fbo)
                gl.bindFramebuffer(GL_DRAW_FRAMEBUFFER, **m_fbo);
@@ -3351,8 +3351,8 @@ BlitFboCase::IterateResult BlitFboCase::iterate (void)
                <<      "\tfilter: " << ((blitCfg.linear) ? ("linear") : ("nearest"))
                << tcu::TestLog::EndMessage;
 
-       gl.primitiveBoundingBoxEXT(blitCfg.bboxMin.x(), blitCfg.bboxMin.y(), blitCfg.bboxMin.z(), blitCfg.bboxMin.w(),
-                                                          blitCfg.bboxMax.x(), blitCfg.bboxMax.y(), blitCfg.bboxMax.z(), blitCfg.bboxMax.w());
+       gl.primitiveBoundingBox(blitCfg.bboxMin.x(), blitCfg.bboxMin.y(), blitCfg.bboxMin.z(), blitCfg.bboxMin.w(),
+                                                       blitCfg.bboxMax.x(), blitCfg.bboxMax.y(), blitCfg.bboxMax.z(), blitCfg.bboxMax.w());
 
        gl.bindFramebuffer(GL_DRAW_FRAMEBUFFER, (m_dst == TARGET_FBO) ? (**m_dstFbo) : (m_context.getRenderContext().getDefaultFramebuffer()));
        gl.clearColor(0.0f, 0.0f, 0.0f, 1.0f);
@@ -3672,8 +3672,8 @@ DepthDrawCase::IterateResult DepthDrawCase::iterate (void)
                        const float negPadding = (m_bboxSize == BBOX_EQUAL) ? (0.0f) : (rnd.getFloat() * 0.3f);
                        const float posPadding = (m_bboxSize == BBOX_EQUAL) ? (0.0f) : (rnd.getFloat() * 0.3f);
 
-                       gl.primitiveBoundingBoxEXT(-1.0f, -1.0f, m_layers[layerNdx].zOffset - negPadding, 1.0f,
-                                                                           1.0f,  1.0f, (m_layers[layerNdx].zOffset + m_layers[layerNdx].zScale + posPadding), 1.0f);
+                       gl.primitiveBoundingBox(-1.0f, -1.0f, m_layers[layerNdx].zOffset - negPadding, 1.0f,
+                                                                       1.0f,  1.0f, (m_layers[layerNdx].zOffset + m_layers[layerNdx].zScale + posPadding), 1.0f);
                }
 
                gl.drawArrays((hasTessellation) ? (GL_PATCHES) : (GL_TRIANGLES), 0, m_gridSize * m_gridSize * 6);
@@ -4236,8 +4236,8 @@ void ClearCase::renderTo (tcu::Surface& dst, bool useBBox)
                {
                        DE_ASSERT(m_useGlobalState || m_drawTriangles); // !m_useGlobalState -> m_drawTriangles
                        if (m_useGlobalState)
-                               gl.primitiveBoundingBoxEXT(bboxMin.x(), bboxMin.y(), bboxMin.z(), bboxMin.w(),
-                                                                                  bboxMax.x(), bboxMax.y(), bboxMax.z(), bboxMax.w());
+                               gl.primitiveBoundingBox(bboxMin.x(), bboxMin.y(), bboxMin.z(), bboxMin.w(),
+                                                                               bboxMax.x(), bboxMax.y(), bboxMax.z(), bboxMax.w());
                }
 
                if (m_drawTriangles)
@@ -4520,8 +4520,8 @@ ViewportCallOrderCase::IterateResult ViewportCallOrderCase::iterate (void)
                                << "\t(0.0, -1.0, -1.0, 1.0) .. (1.0, 1.0, 1.0f, 1.0)"
                                << tcu::TestLog::EndMessage;
 
-                       gl.primitiveBoundingBoxEXT(0.0f, -1.0f, -1.0f, 1.0f,
-                                                                          1.0f,  1.0f,  1.0f, 1.0f);
+                       gl.primitiveBoundingBox(0.0f, -1.0f, -1.0f, 1.0f,
+                                                                       1.0f,  1.0f,  1.0f, 1.0f);
                }
        }
 
index ee2ab62..91708c8 100644 (file)
 #include "gluShaderProgram.hpp"
 #include "glwFunctions.hpp"
 #include "glwEnums.hpp"
+#include "tcuStringTemplate.hpp"
 
 namespace deqp
 {
+
+using std::string;
+using std::map;
+
 namespace gles31
 {
 namespace Functional
@@ -57,6 +62,258 @@ static const char* getVerifierSuffix (QueryType type)
        }
 }
 
+class GeometryShaderCase : public TestCase
+{
+public:
+                                               GeometryShaderCase              (Context& context, QueryType verifier, const char* name, const char* desc);
+       IterateResult           iterate                                 (void);
+
+private:
+       const QueryType         m_verifier;
+};
+
+GeometryShaderCase::GeometryShaderCase (Context& context, QueryType verifier, const char* name, const char* desc)
+       : TestCase              (context, name, desc)
+       , m_verifier    (verifier)
+{
+}
+
+GeometryShaderCase::IterateResult GeometryShaderCase::iterate (void)
+{
+       const bool isES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+
+       if (!isES32 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader"))
+               TCU_THROW(NotSupportedError, "Geometry shader tests require GL_EXT_geometry_shader extension or an OpenGL ES 3.2 or higher context.");
+
+
+       static const char* const        s_vtxFragTemplate       =       "${GLSL_VERSION_STRING}\n"
+                                                                                                               "void main()\n"
+                                                                                                               "{\n"
+                                                                                                               "}\n";
+
+       static const char* const        s_geometryTemplate1     =       "${GLSL_VERSION_STRING}\n"
+                                                                                                               "${GLSL_EXTENSION_STRING}\n"
+                                                                                                               "layout(triangles) in;"
+                                                                                                               "layout(triangle_strip, max_vertices = 3) out;\n"
+                                                                                                               "void main()\n"
+                                                                                                               "{\n"
+                                                                                                       "   EndPrimitive();\n"
+                                                                                                               "}\n";
+
+       static const char* const        s_geometryTemplate2     =       "${GLSL_VERSION_STRING}\n"
+                                                                                                               "${GLSL_EXTENSION_STRING}\n"
+                                                                                                               "layout(points) in;"
+                                                                                                               "layout(line_strip, max_vertices = 5) out;\n"
+                                                                                                               "void main()\n"
+                                                                                                               "{\n"
+                                                                                                       "   EndPrimitive();\n"
+                                                                                                               "}\n";
+
+       static const char* const        s_geometryTemplate3     =       "${GLSL_VERSION_STRING}\n"
+                                                                                                               "${GLSL_EXTENSION_STRING}\n"
+                                                                                                               "layout(points) in;"
+                                                                                                               "layout(points, max_vertices = 50) out;\n"
+                                                                                                               "void main()\n"
+                                                                                                               "{\n"
+                                                                                                       "   EndPrimitive();\n"
+                                                                                                               "}\n";
+
+       map<string, string>             args;
+       args["GLSL_VERSION_STRING"]                                             = isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+       args["GLSL_EXTENSION_STRING"]                                           = isES32 ? "" : "#extension GL_EXT_geometry_shader : enable";
+
+       glu::CallLogWrapper                     gl                                              (m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
+       tcu::ResultCollector            result                                  (m_testCtx.getLog(), " // ERROR: ");
+
+       gl.enableLogging(true);
+
+       {
+               const tcu::ScopedLogSection     section         (m_testCtx.getLog(), "Layout", "triangles in, triangle strip out, 3 vertices");
+               glu::ShaderProgram                      program         (m_context.getRenderContext(), glu::ProgramSources()
+                       << glu::VertexSource(tcu::StringTemplate(s_vtxFragTemplate).specialize(args))
+                       << glu::FragmentSource(tcu::StringTemplate(s_vtxFragTemplate).specialize(args))
+                       << glu::GeometrySource(tcu::StringTemplate(s_geometryTemplate1).specialize(args)));
+
+               TCU_CHECK_MSG(program.isOk(), "Compile failed");
+
+               m_testCtx.getLog() << program;
+
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_GEOMETRY_VERTICES_OUT, 3, m_verifier);
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_GEOMETRY_INPUT_TYPE, GL_TRIANGLES, m_verifier);
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_GEOMETRY_OUTPUT_TYPE, GL_TRIANGLE_STRIP, m_verifier);
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_GEOMETRY_SHADER_INVOCATIONS, 1, m_verifier);
+       }
+
+       {
+               const tcu::ScopedLogSection     section         (m_testCtx.getLog(), "Layout", "points in, line strip out, 5 vertices");
+               glu::ShaderProgram                      program         (m_context.getRenderContext(), glu::ProgramSources()
+                       << glu::VertexSource(tcu::StringTemplate(s_vtxFragTemplate).specialize(args))
+                       << glu::FragmentSource(tcu::StringTemplate(s_vtxFragTemplate).specialize(args))
+                       << glu::GeometrySource(tcu::StringTemplate(s_geometryTemplate2).specialize(args)));
+
+               TCU_CHECK_MSG(program.isOk(), "Compile failed");
+
+               m_testCtx.getLog() << program;
+
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_GEOMETRY_VERTICES_OUT, 5, m_verifier);
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_GEOMETRY_INPUT_TYPE, GL_POINTS, m_verifier);
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_GEOMETRY_OUTPUT_TYPE, GL_LINE_STRIP, m_verifier);
+       }
+
+       {
+               const tcu::ScopedLogSection     section         (m_testCtx.getLog(), "Layout", "points in, points out, 50 vertices");
+               glu::ShaderProgram                      program         (m_context.getRenderContext(), glu::ProgramSources()
+                       << glu::VertexSource(tcu::StringTemplate(s_vtxFragTemplate).specialize(args))
+                       << glu::FragmentSource(tcu::StringTemplate(s_vtxFragTemplate).specialize(args))
+                       << glu::GeometrySource(tcu::StringTemplate(s_geometryTemplate3).specialize(args)));
+
+               TCU_CHECK_MSG(program.isOk(), "Compile failed");
+
+               m_testCtx.getLog() << program;
+
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_GEOMETRY_VERTICES_OUT, 50, m_verifier);
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_GEOMETRY_INPUT_TYPE, GL_POINTS, m_verifier);
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_GEOMETRY_OUTPUT_TYPE, GL_POINTS, m_verifier);
+       }
+
+       result.setTestContextResult(m_testCtx);
+       return STOP;
+}
+
+class TessellationShaderCase : public TestCase
+{
+public:
+                                               TessellationShaderCase          (Context& context, QueryType verifier, const char* name, const char* desc);
+       IterateResult           iterate                                 (void);
+
+private:
+       const QueryType         m_verifier;
+};
+
+TessellationShaderCase::TessellationShaderCase (Context& context, QueryType verifier, const char* name, const char* desc)
+       : TestCase              (context, name, desc)
+       , m_verifier    (verifier)
+{
+}
+
+TessellationShaderCase::IterateResult TessellationShaderCase::iterate (void)
+{
+       const bool isES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+
+       if (!isES32 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader"))
+               TCU_THROW(NotSupportedError, "Tessellation shader tests require GL_EXT_tessellation_shader extension or an OpenGL ES 3.2 or higher context.");
+
+
+       static const char* const        s_vtxFragTemplate       =       "${GLSL_VERSION_STRING}\n"
+                                                                                                               "void main()\n"
+                                                                                                               "{\n"
+                                                                                                               "}\n";
+
+       static const char* const        s_tessCtrlTemplate1     =       "${GLSL_VERSION_STRING}\n"
+                                                                                                               "${GLSL_EXTENSION_STRING}\n"
+                                                                                                               "layout(vertices = 3) out;\n"
+                                                                                                               "void main()\n"
+                                                                                                               "{\n"
+                                                                                                               "}\n";
+
+       static const char* const        s_tessEvalTemplate1     =       "${GLSL_VERSION_STRING}\n"
+                                                                                                               "${GLSL_EXTENSION_STRING}\n"
+                                                                                                               "layout(triangles, equal_spacing, cw) in;\n"
+                                                                                                               "void main()\n"
+                                                                                                               "{\n"
+                                                                                                               "}\n";
+
+       static const char* const        s_tessCtrlTemplate2     =       "${GLSL_VERSION_STRING}\n"
+                                                                                                               "${GLSL_EXTENSION_STRING}\n"
+                                                                                                               "layout(vertices = 5) out;\n"
+                                                                                                               "void main()\n"
+                                                                                                               "{\n"
+                                                                                                               "}\n";
+
+       static const char* const        s_tessEvalTemplate2     =       "${GLSL_VERSION_STRING}\n"
+                                                                                                               "${GLSL_EXTENSION_STRING}\n"
+                                                                                                               "layout(quads, fractional_even_spacing, ccw) in;\n"
+                                                                                                               "void main()\n"
+                                                                                                               "{\n"
+                                                                                                               "}\n";
+
+       static const char* const        s_tessEvalTemplate3     =       "${GLSL_VERSION_STRING}\n"
+                                                                                                               "${GLSL_EXTENSION_STRING}\n"
+                                                                                                               "layout(isolines, fractional_odd_spacing, ccw, point_mode) in;\n"
+                                                                                                               "void main()\n"
+                                                                                                               "{\n"
+                                                                                                               "}\n";
+
+       map<string, string>             args;
+       args["GLSL_VERSION_STRING"]                                             = isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+       args["GLSL_EXTENSION_STRING"]                                           = isES32 ? "" : "#extension GL_EXT_tessellation_shader : enable";
+
+       glu::CallLogWrapper                     gl                                              (m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
+       tcu::ResultCollector            result                                  (m_testCtx.getLog(), " // ERROR: ");
+
+       gl.enableLogging(true);
+
+       {
+               const tcu::ScopedLogSection     section         (m_testCtx.getLog(), "Query State", "3 vertices, triangles, equal_spacing, cw");
+               glu::ShaderProgram                      program         (m_context.getRenderContext(), glu::ProgramSources()
+                       << glu::VertexSource(tcu::StringTemplate(s_vtxFragTemplate).specialize(args))
+                       << glu::FragmentSource(tcu::StringTemplate(s_vtxFragTemplate).specialize(args))
+                       << glu::TessellationControlSource(tcu::StringTemplate(s_tessCtrlTemplate1).specialize(args))
+                       << glu::TessellationEvaluationSource(tcu::StringTemplate(s_tessEvalTemplate1).specialize(args)));
+
+               TCU_CHECK_MSG(program.isOk(), "Compile failed");
+
+               m_testCtx.getLog() << program;
+
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_TESS_CONTROL_OUTPUT_VERTICES, 3, m_verifier);
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_TESS_GEN_MODE, GL_TRIANGLES, m_verifier);
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_TESS_GEN_SPACING, GL_EQUAL, m_verifier);
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_TESS_GEN_VERTEX_ORDER, GL_CW, m_verifier);
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_TESS_GEN_POINT_MODE, GL_FALSE, m_verifier);
+       }
+
+       {
+               const tcu::ScopedLogSection     section         (m_testCtx.getLog(), "Query State", "5 vertices, quads, fractional_even_spacing, ccw");
+               glu::ShaderProgram                      program         (m_context.getRenderContext(), glu::ProgramSources()
+                       << glu::VertexSource(tcu::StringTemplate(s_vtxFragTemplate).specialize(args))
+                       << glu::FragmentSource(tcu::StringTemplate(s_vtxFragTemplate).specialize(args))
+                       << glu::TessellationControlSource(tcu::StringTemplate(s_tessCtrlTemplate2).specialize(args))
+                       << glu::TessellationEvaluationSource(tcu::StringTemplate(s_tessEvalTemplate2).specialize(args)));
+
+               TCU_CHECK_MSG(program.isOk(), "Compile failed");
+
+               m_testCtx.getLog() << program;
+
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_TESS_CONTROL_OUTPUT_VERTICES, 5, m_verifier);
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_TESS_GEN_MODE, GL_QUADS, m_verifier);
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_TESS_GEN_SPACING, GL_FRACTIONAL_EVEN, m_verifier);
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_TESS_GEN_VERTEX_ORDER, GL_CCW, m_verifier);
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_TESS_GEN_POINT_MODE, GL_FALSE, m_verifier);
+       }
+
+       {
+               const tcu::ScopedLogSection     section         (m_testCtx.getLog(), "Query State", "5 vertices, isolines, fractional_odd_spacing, ccw, point_mode");
+               glu::ShaderProgram                      program         (m_context.getRenderContext(), glu::ProgramSources()
+                       << glu::VertexSource(tcu::StringTemplate(s_vtxFragTemplate).specialize(args))
+                       << glu::FragmentSource(tcu::StringTemplate(s_vtxFragTemplate).specialize(args))
+                       << glu::TessellationControlSource(tcu::StringTemplate(s_tessCtrlTemplate2).specialize(args))
+                       << glu::TessellationEvaluationSource(tcu::StringTemplate(s_tessEvalTemplate3).specialize(args)));
+
+               TCU_CHECK_MSG(program.isOk(), "Compile failed");
+
+               m_testCtx.getLog() << program;
+
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_TESS_CONTROL_OUTPUT_VERTICES, 5, m_verifier);
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_TESS_GEN_MODE, GL_ISOLINES, m_verifier);
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_TESS_GEN_SPACING, GL_FRACTIONAL_ODD, m_verifier);
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_TESS_GEN_VERTEX_ORDER, GL_CCW, m_verifier);
+               verifyStateProgramInteger(result, gl, program.getProgram(), GL_TESS_GEN_POINT_MODE, GL_TRUE, m_verifier);
+       }
+
+       result.setTestContextResult(m_testCtx);
+       return STOP;
+}
+
 class ProgramSeparableCase : public TestCase
 {
 public:
@@ -75,14 +332,16 @@ ProgramSeparableCase::ProgramSeparableCase (Context& context, QueryType verifier
 
 ProgramSeparableCase::IterateResult ProgramSeparableCase::iterate (void)
 {
-       static const char* const s_vertexSource =       "#version 310 es\n"
+       const bool                                      isES32                  =       glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+
+       const string                            vtxTemplate     =       string(isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES)) + "\n"
                                                                                                "out highp vec4 v_color;\n"
                                                                                                "void main()\n"
                                                                                                "{\n"
                                                                                                "       gl_Position = vec4(float(gl_VertexID) * 0.5, float(gl_VertexID+1) * 0.5, 0.0, 1.0);\n"
                                                                                                "       v_color = vec4(float(gl_VertexID), 1.0, 0.0, 1.0);\n"
                                                                                                "}\n";
-       static const char* const s_fragmentSource = "#version 310 es\n"
+       const string                            fragTemplate    =       string(isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES)) + "\n"
                                                                                                "in highp vec4 v_color;\n"
                                                                                                "layout(location=0) out highp vec4 o_color;\n"
                                                                                                "void main()\n"
@@ -90,13 +349,17 @@ ProgramSeparableCase::IterateResult ProgramSeparableCase::iterate (void)
                                                                                                "       o_color = v_color;\n"
                                                                                                "}\n";
 
-       glu::CallLogWrapper             gl                      (m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
-       tcu::ResultCollector    result          (m_testCtx.getLog(), " // ERROR: ");
-       glu::Shader                             vtxShader       (m_context.getRenderContext(), glu::SHADERTYPE_VERTEX);
-       glu::Shader                             frgShader       (m_context.getRenderContext(), glu::SHADERTYPE_FRAGMENT);
+       glu::CallLogWrapper                     gl                              (m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
+       tcu::ResultCollector            result                  (m_testCtx.getLog(), " // ERROR: ");
+       glu::Shader                                     vtxShader               (m_context.getRenderContext(), glu::SHADERTYPE_VERTEX);
+       glu::Shader                                     frgShader               (m_context.getRenderContext(), glu::SHADERTYPE_FRAGMENT);
 
-       vtxShader.setSources(1, &s_vertexSource, DE_NULL);
-       frgShader.setSources(1, &s_fragmentSource, DE_NULL);
+       static const char* const        s_vtxSource             = vtxTemplate.c_str();
+       static const char* const        s_fragSource    = fragTemplate.c_str();
+
+
+       vtxShader.setSources(1, &s_vtxSource, DE_NULL);
+       frgShader.setSources(1, &s_fragSource, DE_NULL);
 
        vtxShader.compile();
        frgShader.compile();
@@ -111,8 +374,7 @@ ProgramSeparableCase::IterateResult ProgramSeparableCase::iterate (void)
                m_testCtx.getLog() << frgShader;
        }
 
-       if (!vtxShader.getCompileStatus() || !frgShader.getCompileStatus())
-               throw tcu::TestError("failed to build shaders");
+       TCU_CHECK_MSG(vtxShader.getCompileStatus() && frgShader.getCompileStatus(), "failed to build shaders");
 
        gl.enableLogging(true);
 
@@ -137,8 +399,7 @@ ProgramSeparableCase::IterateResult ProgramSeparableCase::iterate (void)
                gl.glGetProgramiv(program.getProgram(), GL_LINK_STATUS, &linkStatus);
                GLU_EXPECT_NO_ERROR(gl.glGetError(), "query link status");
 
-               if (linkStatus == GL_FALSE)
-                       throw tcu::TestError("failed to link program");
+               TCU_CHECK_MSG(linkStatus == GL_TRUE, "failed to link program");
 
                verifyStateProgramInteger(result, gl, program.getProgram(), GL_PROGRAM_SEPARABLE, 0, m_verifier);
        }
@@ -157,8 +418,7 @@ ProgramSeparableCase::IterateResult ProgramSeparableCase::iterate (void)
                gl.glGetProgramiv(program.getProgram(), GL_LINK_STATUS, &linkStatus);
                GLU_EXPECT_NO_ERROR(gl.glGetError(), "query link status");
 
-               if (linkStatus == GL_FALSE)
-                       throw tcu::TestError("failed to link program");
+               TCU_CHECK_MSG(linkStatus == GL_TRUE, "failed to link program");
 
                verifyStateProgramInteger(result, gl, program.getProgram(), GL_PROGRAM_SEPARABLE, GL_TRUE, m_verifier);
        }
@@ -185,74 +445,80 @@ ComputeWorkGroupSizeCase::ComputeWorkGroupSizeCase (Context& context, QueryType
 
 ComputeWorkGroupSizeCase::IterateResult ComputeWorkGroupSizeCase::iterate (void)
 {
-       static const char* const s_computeSource1D =    "#version 310 es\n"
-                                                                                                       "layout (local_size_x = 3) in;\n"
-                                                                                                       "layout(binding = 0) buffer Output\n"
-                                                                                                       "{\n"
-                                                                                                       "       highp float val;\n"
-                                                                                                       "} sb_out;\n"
-                                                                                                       "\n"
-                                                                                                       "void main (void)\n"
-                                                                                                       "{\n"
-                                                                                                       "       sb_out.val = 1.0;\n"
-                                                                                                       "}\n";
-       static const char* const s_computeSource2D =    "#version 310 es\n"
-                                                                                                       "layout (local_size_x = 3, local_size_y = 2) in;\n"
-                                                                                                       "layout(binding = 0) buffer Output\n"
-                                                                                                       "{\n"
-                                                                                                       "       highp float val;\n"
-                                                                                                       "} sb_out;\n"
-                                                                                                       "\n"
-                                                                                                       "void main (void)\n"
-                                                                                                       "{\n"
-                                                                                                       "       sb_out.val = 1.0;\n"
-                                                                                                       "}\n";
-       static const char* const s_computeSource3D =    "#version 310 es\n"
-                                                                                                       "layout (local_size_x = 3, local_size_y = 2, local_size_z = 4) in;\n"
-                                                                                                       "layout(binding = 0) buffer Output\n"
-                                                                                                       "{\n"
-                                                                                                       "       highp float val;\n"
-                                                                                                       "} sb_out;\n"
-                                                                                                       "\n"
-                                                                                                       "void main (void)\n"
-                                                                                                       "{\n"
-                                                                                                       "       sb_out.val = 1.0;\n"
-                                                                                                       "}\n";
-
-       glu::CallLogWrapper             gl              (m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
-       tcu::ResultCollector    result  (m_testCtx.getLog(), " // ERROR: ");
+       const bool                                      isES32                          =       glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+
+
+       static const char* const        s_computeTemplate1D =   "${GLSL_VERSION_STRING}\n"
+                                                                                                               "layout (local_size_x = 3) in;\n"
+                                                                                                               "layout(binding = 0) buffer Output\n"
+                                                                                                               "{\n"
+                                                                                                               "       highp float val;\n"
+                                                                                                               "} sb_out;\n"
+                                                                                                               "\n"
+                                                                                                               "void main (void)\n"
+                                                                                                               "{\n"
+                                                                                                               "       sb_out.val = 1.0;\n"
+                                                                                                               "}\n";
+       static const char* const        s_computeTemplate2D =   "${GLSL_VERSION_STRING}\n"
+                                                                                                               "layout (local_size_x = 3, local_size_y = 2) in;\n"
+                                                                                                               "layout(binding = 0) buffer Output\n"
+                                                                                                               "{\n"
+                                                                                                               "       highp float val;\n"
+                                                                                                               "} sb_out;\n"
+                                                                                                               "\n"
+                                                                                                               "void main (void)\n"
+                                                                                                               "{\n"
+                                                                                                               "       sb_out.val = 1.0;\n"
+                                                                                                               "}\n";
+       static const char* const        s_computeTemplate3D =   "${GLSL_VERSION_STRING}\n"
+                                                                                                               "layout (local_size_x = 3, local_size_y = 2, local_size_z = 4) in;\n"
+                                                                                                               "layout(binding = 0) buffer Output\n"
+                                                                                                               "{\n"
+                                                                                                               "       highp float val;\n"
+                                                                                                               "} sb_out;\n"
+                                                                                                               "\n"
+                                                                                                               "void main (void)\n"
+                                                                                                               "{\n"
+                                                                                                               "       sb_out.val = 1.0;\n"
+                                                                                                               "}\n";
+
+       glu::CallLogWrapper                     gl                                              (m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
+       tcu::ResultCollector            result                                  (m_testCtx.getLog(), " // ERROR: ");
+
+       map<string, string>             args;
+       args["GLSL_VERSION_STRING"]                                             = isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
 
        gl.enableLogging(true);
 
        {
                const tcu::ScopedLogSection section             (m_testCtx.getLog(), "OneDimensional", "1D");
-               glu::ShaderProgram                      program         (m_context.getRenderContext(), glu::ProgramSources() << glu::ComputeSource(s_computeSource1D));
+               glu::ShaderProgram                      program         (m_context.getRenderContext(), glu::ProgramSources() << glu::ComputeSource(tcu::StringTemplate(s_computeTemplate1D).specialize(args)));
 
                m_testCtx.getLog() << program;
-               if (!program.isOk())
-                       throw tcu::TestError("failed to build program");
+
+               TCU_CHECK_MSG(program.isOk(), "failed to build program");
 
                verifyStateProgramIntegerVec3(result, gl, program.getProgram(), GL_COMPUTE_WORK_GROUP_SIZE, tcu::IVec3(3, 1, 1), m_verifier);
        }
 
        {
                const tcu::ScopedLogSection section             (m_testCtx.getLog(), "TwoDimensional", "2D");
-               glu::ShaderProgram                      program         (m_context.getRenderContext(), glu::ProgramSources() << glu::ComputeSource(s_computeSource2D));
+               glu::ShaderProgram                      program         (m_context.getRenderContext(), glu::ProgramSources() << glu::ComputeSource(tcu::StringTemplate(s_computeTemplate2D).specialize(args)));
 
                m_testCtx.getLog() << program;
-               if (!program.isOk())
-                       throw tcu::TestError("failed to build program");
+
+               TCU_CHECK_MSG(program.isOk(), "failed to build program");
 
                verifyStateProgramIntegerVec3(result, gl, program.getProgram(), GL_COMPUTE_WORK_GROUP_SIZE, tcu::IVec3(3, 2, 1), m_verifier);
        }
 
        {
                const tcu::ScopedLogSection section             (m_testCtx.getLog(), "TreeDimensional", "3D");
-               glu::ShaderProgram                      program         (m_context.getRenderContext(), glu::ProgramSources() << glu::ComputeSource(s_computeSource3D));
+               glu::ShaderProgram                      program         (m_context.getRenderContext(), glu::ProgramSources() << glu::ComputeSource(tcu::StringTemplate(s_computeTemplate3D).specialize(args)));
 
                m_testCtx.getLog() << program;
-               if (!program.isOk())
-                       throw tcu::TestError("failed to build program");
+
+               TCU_CHECK_MSG(program.isOk(), "failed to build program");
 
                verifyStateProgramIntegerVec3(result, gl, program.getProgram(), GL_COMPUTE_WORK_GROUP_SIZE, tcu::IVec3(3, 2, 4), m_verifier);
        }
@@ -279,32 +545,37 @@ ActiveAtomicCounterBuffersCase::ActiveAtomicCounterBuffersCase (Context& context
 
 ActiveAtomicCounterBuffersCase::IterateResult ActiveAtomicCounterBuffersCase::iterate (void)
 {
-       static const char* const s_computeSource0 =     "#version 310 es\n"
-                                                                                               "layout (local_size_x = 3) in;\n"
-                                                                                               "layout(binding = 0) buffer Output\n"
-                                                                                               "{\n"
-                                                                                               "       highp float val;\n"
-                                                                                               "} sb_out;\n"
-                                                                                               "\n"
-                                                                                               "void main (void)\n"
-                                                                                               "{\n"
-                                                                                               "       sb_out.val = 1.0;\n"
-                                                                                               "}\n";
-       static const char* const s_computeSource1 =     "#version 310 es\n"
-                                                                                               "layout (local_size_x = 3) in;\n"
-                                                                                               "layout(binding = 0) uniform highp atomic_uint u_counters[2];\n"
-                                                                                               "layout(binding = 0) buffer Output\n"
-                                                                                               "{\n"
-                                                                                               "       highp float val;\n"
-                                                                                               "} sb_out;\n"
-                                                                                               "\n"
-                                                                                               "void main (void)\n"
-                                                                                               "{\n"
-                                                                                               "       sb_out.val = float(atomicCounterIncrement(u_counters[0])) + float(atomicCounterIncrement(u_counters[1]));\n"
-                                                                                               "}\n";
-
-       glu::CallLogWrapper             gl              (m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
-       tcu::ResultCollector    result  (m_testCtx.getLog(), " // ERROR: ");
+       const bool                                      isES32                          =       glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+
+       static const char* const        s_computeTemplate0      =       "${GLSL_VERSION_STRING}\n"
+                                                                                                               "layout (local_size_x = 3) in;\n"
+                                                                                                               "layout(binding = 0) buffer Output\n"
+                                                                                                               "{\n"
+                                                                                                               "       highp float val;\n"
+                                                                                                               "} sb_out;\n"
+                                                                                                               "\n"
+                                                                                                               "void main (void)\n"
+                                                                                                               "{\n"
+                                                                                                               "       sb_out.val = 1.0;\n"
+                                                                                                               "}\n";
+       static const char* const        s_computeTemplate1      =       "${GLSL_VERSION_STRING}\n"
+                                                                                                               "layout (local_size_x = 3) in;\n"
+                                                                                                               "layout(binding = 0) uniform highp atomic_uint u_counters[2];\n"
+                                                                                                               "layout(binding = 0) buffer Output\n"
+                                                                                                               "{\n"
+                                                                                                               "       highp float val;\n"
+                                                                                                               "} sb_out;\n"
+                                                                                                               "\n"
+                                                                                                               "void main (void)\n"
+                                                                                                               "{\n"
+                                                                                                               "       sb_out.val = float(atomicCounterIncrement(u_counters[0])) + float(atomicCounterIncrement(u_counters[1]));\n"
+                                                                                                               "}\n";
+
+       map<string, string>             args;
+       args["GLSL_VERSION_STRING"]                                             = isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+
+       glu::CallLogWrapper                     gl                                              (m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
+       tcu::ResultCollector            result                                  (m_testCtx.getLog(), " // ERROR: ");
 
        gl.enableLogging(true);
 
@@ -317,22 +588,22 @@ ActiveAtomicCounterBuffersCase::IterateResult ActiveAtomicCounterBuffersCase::it
 
        {
                const tcu::ScopedLogSection     section         (m_testCtx.getLog(), "NoBuffers", "No buffers");
-               glu::ShaderProgram                      program         (m_context.getRenderContext(), glu::ProgramSources() << glu::ComputeSource(s_computeSource0));
+               glu::ShaderProgram                      program         (m_context.getRenderContext(), glu::ProgramSources() << glu::ComputeSource(tcu::StringTemplate(s_computeTemplate0).specialize(args)));
 
                m_testCtx.getLog() << program;
-               if (!program.isOk())
-                       throw tcu::TestError("failed to build program");
+
+               TCU_CHECK_MSG(program.isOk(), "failed to build program");
 
                verifyStateProgramInteger(result, gl, program.getProgram(), GL_ACTIVE_ATOMIC_COUNTER_BUFFERS, 0, m_verifier);
        }
 
        {
                const tcu::ScopedLogSection     section         (m_testCtx.getLog(), "OneBuffer", "One buffer");
-               glu::ShaderProgram                      program         (m_context.getRenderContext(), glu::ProgramSources() << glu::ComputeSource(s_computeSource1));
+               glu::ShaderProgram                      program         (m_context.getRenderContext(), glu::ProgramSources() << glu::ComputeSource(tcu::StringTemplate(s_computeTemplate1).specialize(args)));
 
                m_testCtx.getLog() << program;
-               if (!program.isOk())
-                       throw tcu::TestError("failed to build program");
+
+               TCU_CHECK_MSG(program.isOk(), "failed to build program");
 
                verifyStateProgramInteger(result, gl, program.getProgram(), GL_ACTIVE_ATOMIC_COUNTER_BUFFERS, 1, m_verifier);
        }
@@ -377,13 +648,13 @@ void ProgramLogCase::init (void)
                        break;
 
                case BUILDERROR_GEOMETRY:
-                       if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader"))
-                               throw tcu::NotSupportedError("Test requires GL_EXT_geometry_shader extension");
+                       if (!contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)) && !m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader"))
+                               TCU_THROW(NotSupportedError, "Test requires GL_EXT_geometry_shader extension");
                        break;
 
                case BUILDERROR_TESSELLATION:
-                       if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader"))
-                               throw tcu::NotSupportedError("Test requires GL_EXT_tessellation_shader extension");
+                       if (!contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)) && !m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader"))
+                               TCU_THROW(NotSupportedError, "Test requires GL_EXT_tessellation_shader extension");
                        break;
 
                default:
@@ -417,97 +688,102 @@ ProgramLogCase::IterateResult ProgramLogCase::iterate (void)
 
 glu::ProgramSources ProgramLogCase::getProgramSources (void) const
 {
+       const char* const       vertexTemplate1 =       "${GLSL_VERSION_STRING}\n"
+                                                                                       "in highp vec4 a_pos;\n"
+                                                                                       "uniform highp vec4 u_uniform;\n"
+                                                                                       "void main()\n"
+                                                                                       "{\n"
+                                                                                       "       gl_Position = a_pos + u_uniform;\n"
+                                                                                       "}\n";
+       const char* const       vertexTemplate2 =       "${GLSL_VERSION_STRING}\n"
+                                                                                       "in highp vec4 a_pos;\n"
+                                                                                       "void main()\n"
+                                                                                       "{\n"
+                                                                                       "       gl_Position = a_pos;\n"
+                                                                                       "}\n";
+       const char* const       fragmentTemplate1 =     "${GLSL_VERSION_STRING}\n"
+                                                                                       "in highp vec4 v_missingVar;\n"
+                                                                                       "uniform highp int u_uniform;\n"
+                                                                                       "layout(location = 0) out mediump vec4 fragColor;\n"
+                                                                                       "void main()\n"
+                                                                                       "{\n"
+                                                                                       "       fragColor = v_missingVar + vec4(float(u_uniform));\n"
+                                                                                       "}\n";
+
+       const char* const       fragmentTemplate2 =     "${GLSL_VERSION_STRING}\n"
+                                                                                       "layout(location = 0) out mediump vec4 fragColor;\n"
+                                                                                       "void main()\n"
+                                                                                       "{\n"
+                                                                                       "       fragColor = vec4(1.0);\n"
+                                                                                       "}\n";
+       const char* const       computeTemplate1 =      "${GLSL_VERSION_STRING}\n"
+                                                                                       "layout (binding = 0) buffer IOBuffer { highp float buf_var; };\n"
+                                                                                       "uniform highp vec4 u_uniform;\n"
+                                                                                       "void main()\n"
+                                                                                       "{\n"
+                                                                                       "       buf_var = u_uniform.x;\n"
+                                                                                       "}\n";
+       const char* const       geometryTemplate1 =     "${GLSL_VERSION_STRING}\n"
+                                                                                       "${GLSL_GEOMETRY_EXT_STRING}\n"
+                                                                                       "layout(triangles) in;\n"
+                                                                                       "layout(max_vertices=1, points) out;\n"
+                                                                                       "in highp vec4 v_missingVar[];\n"
+                                                                                       "uniform highp int u_uniform;\n"
+                                                                                       "void main()\n"
+                                                                                       "{\n"
+                                                                                       "       gl_Position = gl_in[0].gl_Position + v_missingVar[2] + vec4(float(u_uniform));\n"
+                                                                                       "       EmitVertex();\n"
+                                                                                       "}\n";
+       const char* const       tessCtrlTemplate1 =     "${GLSL_VERSION_STRING}\n"
+                                                                                       "${GLSL_TESSELLATION_EXT_STRING}\n"
+                                                                                       "layout(vertices=2) out;"
+                                                                                       "patch out highp vec2 vp_var;\n"
+                                                                                       "void main()\n"
+                                                                                       "{\n"
+                                                                                       "       gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position\n"
+                                                                                       "       gl_TessLevelOuter[0] = 0.8;\n"
+                                                                                       "       gl_TessLevelOuter[1] = 0.8;\n"
+                                                                                       "       if (gl_InvocationID == 0)\n"
+                                                                                       "               vp_var = gl_in[gl_InvocationID].gl_Position.xy;\n"
+                                                                                       "}\n";
+       const char* const       tessEvalTemplate1 =     "${GLSL_VERSION_STRING}\n"
+                                                                                       "${GLSL_TESSELLATION_EXT_STRING}\n"
+                                                                                       "layout(isolines) in;"
+                                                                                       "in highp float vp_var[];\n"
+                                                                                       "void main()\n"
+                                                                                       "{\n"
+                                                                                       "       gl_Position = gl_in[gl_InvocationID].gl_Position + vec4(vp_var[1]);\n"
+                                                                                       "}\n";
+
+       const bool                      isES32                          =       glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2));
+       map<string, string>     args;
+       args["GLSL_VERSION_STRING"]                     = isES32 ? getGLSLVersionDeclaration(glu::GLSL_VERSION_320_ES) : getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES);
+       args["GLSL_GEOMETRY_EXT_STRING"]                = isES32 ? "" : "#extension GL_EXT_geometry_shader : require";
+       args["GLSL_TESSELLATION_EXT_STRING"]    = isES32 ? "" : "#extension GL_EXT_tessellation_shader : require";
+
        switch (m_buildErrorType)
        {
                case BUILDERROR_VERTEX_FRAGMENT:
                        return glu::ProgramSources()
-                                       << glu::VertexSource("#version 310 es\n"
-                                                                                "in highp vec4 a_pos;\n"
-                                                                                "uniform highp vec4 u_uniform;\n"
-                                                                                "void main()\n"
-                                                                                "{\n"
-                                                                                "      gl_Position = a_pos + u_uniform;\n"
-                                                                                "}\n")
-                                       << glu::FragmentSource("#version 310 es\n"
-                                                                                  "in highp vec4 v_missingVar;\n"
-                                                                                  "uniform highp int u_uniform;\n"
-                                                                                  "layout(location = 0) out mediump vec4 fragColor;\n"
-                                                                                  "void main()\n"
-                                                                                  "{\n"
-                                                                                  "    fragColor = v_missingVar + vec4(float(u_uniform));\n"
-                                                                                  "}\n");
+                                       << glu::VertexSource(tcu::StringTemplate(vertexTemplate1).specialize(args))
+                                       << glu::FragmentSource(tcu::StringTemplate(fragmentTemplate1).specialize(args));
 
                case BUILDERROR_COMPUTE:
                        return glu::ProgramSources()
-                                       << glu::ComputeSource("#version 310 es\n"
-                                                                                "layout (binding = 0) buffer IOBuffer { highp float buf_var; };\n"
-                                                                                "uniform highp vec4 u_uniform;\n"
-                                                                                "void main()\n"
-                                                                                "{\n"
-                                                                                "      buf_var = u_uniform.x;\n"
-                                                                                "}\n");
+                                       << glu::ComputeSource(tcu::StringTemplate(computeTemplate1).specialize(args));
 
                case BUILDERROR_GEOMETRY:
                        return glu::ProgramSources()
-                                       << glu::VertexSource("#version 310 es\n"
-                                                                                "in highp vec4 a_pos;\n"
-                                                                                "uniform highp vec4 u_uniform;\n"
-                                                                                "void main()\n"
-                                                                                "{\n"
-                                                                                "      gl_Position = a_pos + u_uniform;\n"
-                                                                                "}\n")
-                                       << glu::GeometrySource("#version 310 es\n"
-                                                                                  "#extension GL_EXT_geometry_shader : require\n"
-                                                                                  "layout(triangles) in;\n"
-                                                                                  "layout(max_vertices=1, points) out;\n"
-                                                                                  "in highp vec4 v_missingVar[];\n"
-                                                                                  "uniform highp int u_uniform;\n"
-                                                                                  "void main()\n"
-                                                                                  "{\n"
-                                                                                  "    gl_Position = gl_in[0].gl_Position + v_missingVar[2] + vec4(float(u_uniform));\n"
-                                                                                  "    EmitVertex();\n"
-                                                                                  "}\n")
-                                       << glu::FragmentSource("#version 310 es\n"
-                                                                                  "layout(location = 0) out mediump vec4 fragColor;\n"
-                                                                                  "void main()\n"
-                                                                                  "{\n"
-                                                                                  "    fragColor = vec4(1.0);\n"
-                                                                                  "}\n");
+                                       << glu::VertexSource(tcu::StringTemplate(vertexTemplate1).specialize(args))
+                                       << glu::GeometrySource(tcu::StringTemplate(geometryTemplate1).specialize(args))
+                                       << glu::FragmentSource(tcu::StringTemplate(fragmentTemplate2).specialize(args));
 
                case BUILDERROR_TESSELLATION:
                        return glu::ProgramSources()
-                                       << glu::VertexSource("#version 310 es\n"
-                                                                                "in highp vec4 a_pos;\n"
-                                                                                "void main()\n"
-                                                                                "{\n"
-                                                                                "      gl_Position = a_pos;\n"
-                                                                                "}\n")
-                                       << glu::TessellationControlSource("#version 310 es\n"
-                                                                                                         "#extension GL_EXT_tessellation_shader : require\n"
-                                                                                                         "layout(vertices=2) out;"
-                                                                                                         "patch out highp vec2 vp_var;\n"
-                                                                                                         "void main()\n"
-                                                                                                         "{\n"
-                                                                                                         "     gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position\n"
-                                                                                                         "     gl_TessLevelOuter[0] = 0.8;\n"
-                                                                                                         "     gl_TessLevelOuter[1] = 0.8;\n"
-                                                                                                         "     if (gl_InvocationID == 0)\n"
-                                                                                                         "             vp_var = gl_in[gl_InvocationID].gl_Position.xy;\n"
-                                                                                                         "}\n")
-                                       << glu::TessellationEvaluationSource("#version 310 es\n"
-                                                                                                                "#extension GL_EXT_tessellation_shader : require\n"
-                                                                                                                "layout(isolines) in;"
-                                                                                                                "in highp float vp_var[];\n"
-                                                                                                                "void main()\n"
-                                                                                                                "{\n"
-                                                                                                                "      gl_Position = gl_in[gl_InvocationID].gl_Position + vec4(vp_var[1]);\n"
-                                                                                                                "}\n")
-                                       << glu::FragmentSource("#version 310 es\n"
-                                                                                  "layout(location = 0) out mediump vec4 fragColor;\n"
-                                                                                  "void main()\n"
-                                                                                  "{\n"
-                                                                                  "    fragColor = vec4(1.0);\n"
-                                                                                  "}\n");
+                                       << glu::VertexSource(tcu::StringTemplate(vertexTemplate2).specialize(args))
+                                       << glu::TessellationControlSource(tcu::StringTemplate(tessCtrlTemplate1).specialize(args))
+                                       << glu::TessellationEvaluationSource(tcu::StringTemplate(tessEvalTemplate1).specialize(args))
+                                       << glu::FragmentSource(tcu::StringTemplate(fragmentTemplate2).specialize(args));
 
                default:
                        DE_ASSERT(false);
@@ -556,6 +832,8 @@ void ProgramStateQueryTests::init (void)
        FOR_EACH_INT_VERIFIER(new ProgramSeparableCase                          (m_context, verifier, (std::string("program_separable_") + verifierSuffix).c_str(),                             "Test PROGRAM_SEPARABLE"));
        FOR_EACH_VEC_VERIFIER(new ComputeWorkGroupSizeCase                      (m_context, verifier, (std::string("compute_work_group_size_") + verifierSuffix).c_str(),               "Test COMPUTE_WORK_GROUP_SIZE"));
        FOR_EACH_INT_VERIFIER(new ActiveAtomicCounterBuffersCase        (m_context, verifier, (std::string("active_atomic_counter_buffers_") + verifierSuffix).c_str(), "Test ACTIVE_ATOMIC_COUNTER_BUFFERS"));
+       FOR_EACH_INT_VERIFIER(new GeometryShaderCase                            (m_context, verifier, (std::string("geometry_shader_state_") + verifierSuffix).c_str(),                 "Test Geometry Shader State"));
+       FOR_EACH_INT_VERIFIER(new TessellationShaderCase                        (m_context, verifier, (std::string("tesselation_shader_state_") + verifierSuffix).c_str(),              "Test Tesselation Shader State"));
 
 #undef FOR_EACH_INT_VERIFIER
 #undef FOR_EACH_VEC_VERIFIER
index 125496b..a173d51 100644 (file)
@@ -542,24 +542,16 @@ void HelperInvocationDerivateCase::deinit (void)
 
 static bool hasNeighborWithColor (const tcu::Surface& surface, int x, int y, tcu::RGBA color, tcu::RGBA threshold)
 {
-       static const IVec2 s_neighbors[] =
-       {
-               IVec2(-1, -1),
-               IVec2( 0, -1),
-               IVec2(+1, -1),
-               IVec2(-1,  0),
-               IVec2(+1,  0),
-               IVec2(-1, +1),
-               IVec2( 0, +1),
-               IVec2(+1, +1)
-       };
-
        const int       w       = surface.getWidth();
        const int       h       = surface.getHeight();
 
-       for (int sample = 0; sample < DE_LENGTH_OF_ARRAY(s_neighbors); sample++)
+       for (int dx = -1; dx < 2; dx++)
+       for (int dy = -1; dy < 2; dy++)
        {
-               const IVec2     pos     = IVec2(x, y) + s_neighbors[sample];
+               const IVec2     pos     = IVec2(x + dx, y + dy);
+
+               if (dx == 0 && dy == 0)
+                       continue;
 
                if (de::inBounds(pos.x(), 0, w) && de::inBounds(pos.y(), 0, h))
                {
@@ -598,8 +590,8 @@ static bool verifyHelperInvocationDerivate (TestLog& log, const tcu::Surface& re
                        if (nonZeroDeriv)
                                numNonZeroDeriv += 1;
 
-                       if ((!isBg && !isFg) ||                         // Neither of valid colors (ignoring blue channel that has derivate)
-                               (nonZeroDeriv && !neighborBg))  // Has non-zero derivate, but sample not at primitive edge
+                       if ((!isBg && !isFg) ||                                                 // Neither of valid colors (ignoring blue channel that has derivate)
+                               (nonZeroDeriv && !neighborBg && !isFg))         // Has non-zero derivate, but sample not at primitive edge or inside primitive
                                numInvalidPixels += 1;
 
                        if (isFg)
index 8e15758..f28ed03 100644 (file)
@@ -150,6 +150,14 @@ void TextureSizeCase::init (void)
        };
 
        const glw::Functions&   gl                                      = m_context.getRenderContext().getFunctions();
+
+       // requirements
+       if (m_isArrayType && !m_context.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
+               TCU_THROW(NotSupportedError, "Test requires OES_texture_storage_multisample_2d_array extension");
+
+       if (m_context.getRenderTarget().getWidth() < 1 || m_context.getRenderTarget().getHeight() < 1)
+               TCU_THROW(NotSupportedError, "rendertarget size must be at least 1x1");
+
        glw::GLint                              maxTextureSize          = 0;
        glw::GLint                              maxTextureLayers        = 0;
        glw::GLint                              maxSamples                      = 0;
@@ -158,13 +166,8 @@ void TextureSizeCase::init (void)
        gl.getIntegerv(GL_MAX_ARRAY_TEXTURE_LAYERS, &maxTextureLayers);
        gl.getInternalformativ(getTextureGLTarget(), getTextureGLInternalFormat(), GL_SAMPLES, 1, &maxSamples);
 
-       // requirements
-       if (m_isArrayType && !m_context.getContextInfo().isExtensionSupported("GL_OES_texture_storage_multisample_2d_array"))
-               throw tcu::NotSupportedError("Test requires OES_texture_storage_multisample_2d_array extension");
-       if (m_context.getRenderTarget().getWidth() < 1 || m_context.getRenderTarget().getHeight() < 1)
-               throw tcu::NotSupportedError("rendertarget size must be at least 1x1");
        if (m_numSamples > maxSamples)
-               throw tcu::NotSupportedError("sample count is not supported");
+               TCU_THROW(NotSupportedError, "sample count is not supported");
 
        // gen shade
 
index 27d945c..78f2308 100644 (file)
@@ -7216,14 +7216,14 @@ void TessellationTests::init (void)
                queryGroup->addChild(new LimitQueryCase(m_context, "max_tess_evaluation_uniform_components",                    "Test MAX_TESS_EVALUATION_UNIFORM_COMPONENTS",                  GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS,              1024));
                queryGroup->addChild(new LimitQueryCase(m_context, "max_tess_control_texture_image_units",                              "Test MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS",                    GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS,                16));
                queryGroup->addChild(new LimitQueryCase(m_context, "max_tess_evaluation_texture_image_units",                   "Test MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS",                 GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS,             16));
-               queryGroup->addChild(new LimitQueryCase(m_context, "max_tess_control_output_components",                                "Test MAX_TESS_CONTROL_OUTPUT_COMPONENTS",                              GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS,                  128));
+               queryGroup->addChild(new LimitQueryCase(m_context, "max_tess_control_output_components",                                "Test MAX_TESS_CONTROL_OUTPUT_COMPONENTS",                              GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS,                  64));
                queryGroup->addChild(new LimitQueryCase(m_context, "max_tess_patch_components",                                                 "Test MAX_TESS_PATCH_COMPONENTS",                                               GL_MAX_TESS_PATCH_COMPONENTS,                                   120));
                queryGroup->addChild(new LimitQueryCase(m_context, "max_tess_control_total_output_components",                  "Test MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS",                GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS,    4096));
-               queryGroup->addChild(new LimitQueryCase(m_context, "max_tess_evaluation_output_components",                             "Test MAX_TESS_EVALUATION_OUTPUT_COMPONENTS",                   GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS,               128));
+               queryGroup->addChild(new LimitQueryCase(m_context, "max_tess_evaluation_output_components",                             "Test MAX_TESS_EVALUATION_OUTPUT_COMPONENTS",                   GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS,               64));
                queryGroup->addChild(new LimitQueryCase(m_context, "max_tess_control_uniform_blocks",                                   "Test MAX_TESS_CONTROL_UNIFORM_BLOCKS",                                 GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS,                             12));
                queryGroup->addChild(new LimitQueryCase(m_context, "max_tess_evaluation_uniform_blocks",                                "Test MAX_TESS_EVALUATION_UNIFORM_BLOCKS",                              GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS,                  12));
-               queryGroup->addChild(new LimitQueryCase(m_context, "max_tess_control_input_components",                                 "Test MAX_TESS_CONTROL_INPUT_COMPONENTS",                               GL_MAX_TESS_CONTROL_INPUT_COMPONENTS,                   128));
-               queryGroup->addChild(new LimitQueryCase(m_context, "max_tess_evaluation_input_components",                              "Test MAX_TESS_EVALUATION_INPUT_COMPONENTS",                    GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS,                128));
+               queryGroup->addChild(new LimitQueryCase(m_context, "max_tess_control_input_components",                                 "Test MAX_TESS_CONTROL_INPUT_COMPONENTS",                               GL_MAX_TESS_CONTROL_INPUT_COMPONENTS,                   64));
+               queryGroup->addChild(new LimitQueryCase(m_context, "max_tess_evaluation_input_components",                              "Test MAX_TESS_EVALUATION_INPUT_COMPONENTS",                    GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS,                64));
                queryGroup->addChild(new LimitQueryCase(m_context, "max_tess_control_atomic_counter_buffers",                   "Test MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS",                 GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS,             0));
                queryGroup->addChild(new LimitQueryCase(m_context, "max_tess_evaluation_atomic_counter_buffers",                "Test MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS",              GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS,  0));
                queryGroup->addChild(new LimitQueryCase(m_context, "max_tess_control_atomic_counters",                                  "Test MAX_TESS_CONTROL_ATOMIC_COUNTERS",                                GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS,                    0));
index 19e8cec..d7eb765 100644 (file)
@@ -57,7 +57,14 @@ void Context::createRenderContext (void)
 
        try
        {
-               m_renderCtx             = glu::createDefaultRenderContext(m_testCtx.getPlatform(), m_testCtx.getCommandLine(), glu::ApiType::es(3,1));
+               try
+               {
+                       m_renderCtx             = glu::createDefaultRenderContext(m_testCtx.getPlatform(), m_testCtx.getCommandLine(), glu::ApiType::es(3, 2));
+               }
+               catch (...)
+               {
+                       m_renderCtx             = glu::createDefaultRenderContext(m_testCtx.getPlatform(), m_testCtx.getCommandLine(), glu::ApiType::es(3, 1));
+               }
                m_contextInfo   = glu::ContextInfo::create(*m_renderCtx);
        }
        catch (...)
index 69245eb..320011c 100644 (file)
@@ -199,7 +199,9 @@ MNC_GLES31_PKG                                      = Package(module = GLES31_MODULE, configurations = [
 
 # Master
 
-MASTER_EGL_COMMON_FILTERS              = [include("egl-master.txt")]
+MASTER_EGL_COMMON_FILTERS              = [include("egl-master.txt"),
+                                                                  exclude("egl-test-issues.txt"),
+                                                                  exclude("egl-internal-api-tests.txt")]
 MASTER_EGL_PKG                                 = Package(module = EGL_MODULE, configurations = [
                # Master
                Configuration(name                      = "master",
index b3f1b90..7a44459 100644 (file)
@@ -37,8 +37,8 @@ OPENGL_INC_DIR                = os.path.join(OPENGL_DIR, "wrapper")
 
 GL_SOURCE                      = khr_util.registry_cache.RegistrySource(
                                                "gl.xml",
-                                               30159,
-                                               "0af7e185d0db15e9f44a1b6ff6c72102f67509a8590f19a289b983d652008070")
+                                               32093,
+                                               "3292120320cacbc27009e7507656d7be17bb25f06876814c67eeffa369281eed")
 
 EXTENSIONS                     = [
        'GL_KHR_texture_compression_astc_ldr',