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 \
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)
<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>
</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>
</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"/>
<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>
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
--- /dev/null
+dEQP-EGL.functional.image.*.*android_native*
--- /dev/null
+# 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
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
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
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.*
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
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_*
<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">
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
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
case continue_in_fragment_for_loop
vertex ""
+ ${VERTEX_DECLARATIONS}
void main()
{
+ ${VERTEX_OUTPUT}
}
""
fragment ""
+ ${FRAGMENT_DECLARATIONS}
void main()
{
int count1 = 0;
if (count1 == 2)
continue;
}
- gl_FragColor = vec4(1.0);
+ ${FRAGMENT_OUTPUT}
}
""
end
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.");
}
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.");
}
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.");
}
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.");
}
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.");
}
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.");
}
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;
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,
"%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" \
"%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";
"%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"
);
"%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"
);
"%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";
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;
{
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]);
/* 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 },
/* 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 },
/* 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)
/* 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)
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)
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)
/* 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);
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);
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);
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)
}
}
- if (line == "#version 310 es")
+ if (line == "#version 310 es" || line == "#version 320 es")
{
foundVersion = true;
dst << glu::getGLSLVersionDeclaration(version) << "\n";
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
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
/* 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;
/* 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)
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)
{ 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 },
// 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");
}
/* 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)
/* 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);
/* 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
#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
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);
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);
/* 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
/* 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);
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);
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);
/* 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;
glBindVertexArrayFunc bindVertexArray;
glBindVertexBufferFunc bindVertexBuffer;
glBindVertexBuffersFunc bindVertexBuffers;
-glBlendBarrierKHRFunc blendBarrierKHR;
+glBlendBarrierFunc blendBarrier;
glBlendColorFunc blendColor;
glBlendEquationFunc blendEquation;
glBlendEquationSeparateFunc blendEquationSeparate;
glPolygonOffsetFunc polygonOffset;
glPopDebugGroupFunc popDebugGroup;
glPopGroupMarkerEXTFunc popGroupMarkerEXT;
-glPrimitiveBoundingBoxEXTFunc primitiveBoundingBoxEXT;
+glPrimitiveBoundingBoxFunc primitiveBoundingBox;
glPrimitiveRestartIndexFunc primitiveRestartIndex;
glProgramBinaryFunc programBinary;
glProgramParameteriFunc programParameteri;
/* 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)
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)
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)
/* 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");
/* 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;
/* 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");
/* 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;
/* 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");
/* 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;
--- /dev/null
+/* 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");
--- /dev/null
+/* 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;
/* 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"))
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"))
/* 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"))
#include "glwInitES31.inl"
}
+void initES32 (Functions* gl, const FunctionLoader* loader)
+{
+#include "glwInitES32.inl"
+}
+
void initGL30Core (Functions* gl, const FunctionLoader* loader)
{
#include "glwInitGL30.inl"
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.
/* 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");
/* 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");
/* 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");
/* 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");
/* 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");
/* 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");
/* 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");
/* 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");
/* 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");
/* 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");
/* 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)
}
-GLW_APICALL void GLW_APIENTRY glBlendBarrierKHR (void)
+GLW_APICALL void GLW_APIENTRY glBlendBarrier (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);
/* 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;
gl->bindVertexArray = glBindVertexArray;
gl->bindVertexBuffer = glBindVertexBuffer;
gl->bindVertexBuffers = glBindVertexBuffers;
-gl->blendBarrierKHR = glBlendBarrierKHR;
+gl->blendBarrier = glBlendBarrier;
gl->blendColor = glBlendColor;
gl->blendEquation = glBlendEquation;
gl->blendEquationSeparate = glBlendEquationSeparate;
gl->polygonOffset = glPolygonOffset;
gl->popDebugGroup = glPopDebugGroup;
gl->popGroupMarkerEXT = glPopGroupMarkerEXT;
-gl->primitiveBoundingBoxEXT = glPrimitiveBoundingBoxEXT;
+gl->primitiveBoundingBox = glPrimitiveBoundingBox;
gl->primitiveRestartIndex = glPrimitiveRestartIndex;
gl->programBinary = glProgramBinary;
gl->programParameteri = glProgramParameteri;
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;
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)
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)
{
{
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);
}
#include "egluNativeDisplay.hpp"
#include "egluNativeWindow.hpp"
#include "egluUtil.hpp"
+#include "egluUtil.hpp"
#include "egluUnique.hpp"
+#include "eglwLibrary.hpp"
+
#include <memory>
using tcu::TestLog;
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;
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],
&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",
}
});
- 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 };
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",
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();
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++)
{
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;
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;
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;
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;
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++)
{
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;
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)
{
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)
{
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;
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());
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;
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);
es31fNegativeVertexArrayApiTests.hpp
es31fNegativeStateApiTests.cpp
es31fNegativeStateApiTests.hpp
+ es31fNegativeAtomicCounterTests.cpp
+ es31fNegativeAtomicCounterTests.hpp
+ es31fNegativeShaderImageLoadStoreTests.cpp
+ es31fNegativeShaderImageLoadStoreTests.hpp
es31fTextureGatherTests.cpp
es31fTextureGatherTests.hpp
es31fTextureFormatTests.cpp
{
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;
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"
" 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"
"}\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));
}
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())
gl.enable(GL_BLEND);
if (!m_coherentBlending)
- gl.blendBarrierKHR();
+ gl.blendBarrier();
if (m_coherentBlending)
{
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();
}
}
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)
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: ");
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: ");
} // 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")
{
}
{
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");
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);
const glw::GLenum m_targetName;
const bool m_initial;
const QueryType m_verifier;
+ const glu::ApiType m_minimumVersion;
};
} // anonymous
void BooleanStateQueryTests::init (void)
{
+ const bool isDebugContext = (m_context.getRenderContext().getType().getFlags() & glu::CONTEXT_DEBUG) != 0;
+
static const QueryType isEnabledVerifiers[] =
{
QUERY_ISENABLED,
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
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;
{
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);
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));
{
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);
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)))
{
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.");
}
}
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;
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> >();
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
#include "es31fNegativeFragmentApiTests.hpp"
#include "es31fNegativeVertexArrayApiTests.hpp"
#include "es31fNegativeStateApiTests.hpp"
+#include "es31fNegativeAtomicCounterTests.hpp"
+#include "es31fNegativeShaderImageLoadStoreTests.hpp"
#include "deUniquePtr.hpp"
#include "deRandom.hpp"
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
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();
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();
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();
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();
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();
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();
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";
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";
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: ");
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
{
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: ");
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: ");
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: ");
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: ");
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: ");
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: ");
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: ");
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: ");
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: ");
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: ");
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;
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));
}
{
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));
}
{
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));
}
}
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);
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);
}
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
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)
{
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:
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());
{
// 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));
}
}
+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:
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)
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)
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)
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)
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)
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());
{
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");
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");
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);
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))
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)
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)
{
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)
, 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;
{
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)
, 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: ");
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);
<< 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;
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;
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)
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)
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)
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) \
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))
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))
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
}
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
{
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;
+ }
}
}
tcu::MessageBuilder samplesMsg(&m_testCtx.getLog());
std::vector<glw::GLint> samples;
- if (numSampleCounts > 0)
+ if (numSampleCounts > 0 || isFloatFormat)
{
samples.resize(numSampleCounts, -1);
}
// 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;
+ }
}
}
{ "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 },
--- /dev/null
+/*-------------------------------------------------------------------------
+ * 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
--- /dev/null
+#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
#include "es31fNegativeFragmentApiTests.hpp"
#include "gluCallLogWrapper.hpp"
+#include "gluContextInfo.hpp"
+#include "gluRenderContext.hpp"
#include "glwDefs.hpp"
#include "glwEnums.hpp"
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.");
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)
{
{
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));
#include "gluShaderProgram.hpp"
#include "gluCallLogWrapper.hpp"
+#include "gluContextInfo.hpp"
+#include "gluRenderContext.hpp"
namespace deqp
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;
}
}
- 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);
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]);
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)
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)
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);
}
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);
}
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)
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;
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
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)
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);
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);
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 ()
{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" },
{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));
--- /dev/null
+/*-------------------------------------------------------------------------
+ * 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
--- /dev/null
+#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
#include "glwDefs.hpp"
#include "glwEnums.hpp"
+#include "tcuStringTemplate.hpp"
+
#include "deMemory.h"
+#include <string>
+#include <map>
+
namespace deqp
{
namespace gles31
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"
"{\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;"
" 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)
{
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.");
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)
{
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.");
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, ¶ms);
ctx.expectError(GL_INVALID_ENUM);
ctx.endSection();
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, ¶ms);
ctx.expectError(GL_INVALID_ENUM);
ctx.endSection();
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);
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]);
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, ¶m[0]);
ctx.expectError(GL_INVALID_ENUM);
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));
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, ¶ms[0]);
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, ¶ms[0]);
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, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glGetTexParameterIiv(GL_TEXTURE_2D, -1, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glGetTexParameterIiv(-1, -1, ¶ms[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, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glGetTexParameterIuiv(GL_TEXTURE_2D, -1, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glGetTexParameterIuiv(-1, -1, ¶ms[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, ¶ms[0]);
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, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms[0]);
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, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms[0]);
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, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms[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, ¶ms[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);
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;
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, ¶ms);
+ 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, ¶ms);
+ 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());
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());
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;
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);
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();
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, ¶ms);
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, ¶ms);
ctx.expectError(GL_INVALID_VALUE);
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, ¶ms);
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, ¶ms);
ctx.expectError(GL_INVALID_VALUE);
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, ¶ms);
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, ¶ms);
ctx.expectError(GL_INVALID_VALUE);
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, ¶ms);
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, ¶ms);
ctx.expectError(GL_INVALID_VALUE);
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]);
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);
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);
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);
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);
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);
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);
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, ¶ms[0]);
+ ctx.expectError(GL_INVALID_OPERATION);
+ ctx.endSection();
+
ctx.glDeleteRenderbuffers(1, &rbo);
ctx.glBindRenderbuffer(GL_RENDERBUFFER, 0);
}
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);
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)
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));
#include "tcuResultCollector.hpp"
+#include "gluContextInfo.hpp"
#include "gluRenderContext.hpp"
#include "glwFunctions.hpp"
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
#include "tcuDefs.hpp"
#include "glwDefs.hpp"
#include "gluCallLogWrapper.hpp"
+#include "gluShaderUtil.hpp"
#include "tes31TestCase.hpp"
namespace tcu
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;
#include "gluCallLogWrapper.hpp"
#include "gluContextInfo.hpp"
+#include "gluRenderContext.hpp"
#include "glwDefs.hpp"
#include "glwEnums.hpp"
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);
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
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)
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)
{
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);
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);
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);
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);
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, ¶ms[0]);
ctx.expectError(GL_INVALID_ENUM);
ctx.glTexParameteriv(GL_TEXTURE_2D, 0, ¶ms[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.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, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, ¶ms[0]);
ctx.expectError(GL_INVALID_ENUM);
- params[0] = GL_REPEAT;
ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, ¶ms[0]);
ctx.expectError(GL_INVALID_ENUM);
- params[0] = 0;
+ ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, ¶ms[0]);
ctx.expectError(GL_INVALID_ENUM);
- params[0] = GL_NEAREST;
ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, ¶ms[0]);
ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, ¶ms[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, ¶ms[0]);
+ ctx.expectError(GL_INVALID_VALUE);
+ ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, ¶ms[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, ¶ms[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, ¶ms[0]);
ctx.expectError(GL_INVALID_ENUM);
- ctx.glTexParameteriv(GL_TEXTURE_2D, 0, ¶ms[0]);
+ ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, ¶ms[0]);
ctx.expectError(GL_INVALID_ENUM);
- ctx.glTexParameteriv(0, 0, ¶ms[0]);
+ ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, ¶ms[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, ¶ms[0]);
+ ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_S, ¶ms[0]);
ctx.expectError(GL_INVALID_ENUM);
- params[0] = GL_REPEAT;
- ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, ¶ms[0]);
+ ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_T, ¶ms[0]);
ctx.expectError(GL_INVALID_ENUM);
- params[0] = 0;
- ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, ¶ms[0]);
+ ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_R, ¶ms[0]);
ctx.expectError(GL_INVALID_ENUM);
- params[0] = GL_NEAREST;
- ctx.glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, ¶ms[0]);
+ ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_LOD, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LOD, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_MODE, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, ¶ms[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, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_FILTER, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAG_FILTER, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_S, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_T, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_R, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_LOD, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAX_LOD, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_MODE, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_FUNC, ¶ms[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, ¶ms[0]);
+ ctx.expectError(GL_INVALID_OPERATION);
+ params[0] = 1;
+ ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, ¶ms[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, ¶ms[0]);
+ ctx.expectError(GL_INVALID_OPERATION);
+ params[0] = 1;
+ ctx.glTexParameteriv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, ¶ms[0]);
+ ctx.expectError(GL_INVALID_OPERATION);
+ }
ctx.endSection();
ctx.glDeleteTextures(1, &texture);
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, ¶ms[0]);
ctx.expectError(GL_INVALID_ENUM);
ctx.glTexParameterfv(GL_TEXTURE_2D, 0, ¶ms[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.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, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, ¶ms[0]);
ctx.expectError(GL_INVALID_ENUM);
- params[0] = GL_REPEAT;
ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, ¶ms[0]);
ctx.expectError(GL_INVALID_ENUM);
- params[0] = 0.0f;
+ ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, ¶ms[0]);
ctx.expectError(GL_INVALID_ENUM);
- params[0] = GL_NEAREST;
ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, ¶ms[0]);
ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, ¶ms[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, ¶ms[0]);
+ ctx.expectError(GL_INVALID_VALUE);
+ ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, ¶ms[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, ¶ms[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, ¶ms[0]);
ctx.expectError(GL_INVALID_ENUM);
- ctx.glTexParameterfv(GL_TEXTURE_2D, 0, ¶ms[0]);
+ ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, ¶ms[0]);
ctx.expectError(GL_INVALID_ENUM);
- ctx.glTexParameterfv(0, 0, ¶ms[0]);
+ ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, ¶ms[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, ¶ms[0]);
+ ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_S, ¶ms[0]);
ctx.expectError(GL_INVALID_ENUM);
- params[0] = GL_REPEAT;
- ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, ¶ms[0]);
+ ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_T, ¶ms[0]);
ctx.expectError(GL_INVALID_ENUM);
- params[0] = 0.0f;
- ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, ¶ms[0]);
+ ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_WRAP_R, ¶ms[0]);
ctx.expectError(GL_INVALID_ENUM);
- params[0] = GL_NEAREST;
- ctx.glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, ¶ms[0]);
+ ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_LOD, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LOD, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_MODE, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_COMPARE_FUNC, ¶ms[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, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_FILTER, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAG_FILTER, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_S, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_T, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_WRAP_R, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MIN_LOD, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_MAX_LOD, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_MODE, ¶ms[0]);
+ ctx.expectError(GL_INVALID_ENUM);
+ ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_COMPARE_FUNC, ¶ms[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, ¶ms[0]);
+ ctx.expectError(GL_INVALID_OPERATION);
+ params[0] = 1.0f;
+ ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_BASE_LEVEL, ¶ms[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, ¶ms[0]);
+ ctx.expectError(GL_INVALID_OPERATION);
+ params[0] = 1.0f;
+ ctx.glTexParameterfv(GL_TEXTURE_2D_MULTISAMPLE_ARRAY, GL_TEXTURE_BASE_LEVEL, ¶ms[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)
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)
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)
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();
}
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();
}
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.");
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)
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.");
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)
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();
}
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);
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)
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;
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);
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);
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()
{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" },
{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" },
{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"},
{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"},
-/*-------------------------------------------------------------------------
+/*-------------------------------------------------------------------------
* 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
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"
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();
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();
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();
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();
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);
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);
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);
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);
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();
}
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);
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);
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);
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);
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);
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();
}
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);
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);
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();
}
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);
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));
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
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");
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)
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)
{
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)
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");
<< 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);
<< "\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);
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);
{
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)
<< "\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);
}
}
#include "gluShaderProgram.hpp"
#include "glwFunctions.hpp"
#include "glwEnums.hpp"
+#include "tcuStringTemplate.hpp"
namespace deqp
{
+
+using std::string;
+using std::map;
+
namespace gles31
{
namespace Functional
}
}
+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:
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"
" 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();
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);
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);
}
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);
}
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);
}
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);
{
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);
}
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:
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);
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
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))
{
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)
};
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;
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
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));
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 (...)
# 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",
GL_SOURCE = khr_util.registry_cache.RegistrySource(
"gl.xml",
- 30159,
- "0af7e185d0db15e9f44a1b6ff6c72102f67509a8590f19a289b983d652008070")
+ 32093,
+ "3292120320cacbc27009e7507656d7be17bb25f06876814c67eeffa369281eed")
EXTENSIONS = [
'GL_KHR_texture_compression_astc_ldr',