Signed-off-by: Lionel Landwerlin <lionel.g.landwer...@intel.com> --- registry/gl.xml | 8 +- tests/all.py | 9 ++ tests/spec/CMakeLists.txt | 1 + .../spec/intel_blackhole_render/CMakeLists.gl.txt | 14 ++ .../intel_blackhole_render/CMakeLists.gles2.txt | 13 ++ .../intel_blackhole_render/CMakeLists.gles3.txt | 13 ++ tests/spec/intel_blackhole_render/CMakeLists.txt | 1 + .../intel_blackhole_render/blackhole_dispatch.c | 127 +++++++++++++++++ tests/spec/intel_blackhole_render/blackhole_draw.c | 156 +++++++++++++++++++++ tests/spec/nv_image_formats/CMakeLists.gl.txt | 8 ++ 10 files changed, 349 insertions(+), 1 deletion(-) create mode 100644 tests/spec/intel_blackhole_render/CMakeLists.gl.txt create mode 100644 tests/spec/intel_blackhole_render/CMakeLists.gles2.txt create mode 100644 tests/spec/intel_blackhole_render/CMakeLists.gles3.txt create mode 100644 tests/spec/intel_blackhole_render/CMakeLists.txt create mode 100644 tests/spec/intel_blackhole_render/blackhole_dispatch.c create mode 100644 tests/spec/intel_blackhole_render/blackhole_draw.c create mode 100644 tests/spec/nv_image_formats/CMakeLists.gl.txt
diff --git a/registry/gl.xml b/registry/gl.xml index 7b13ff907..3c371905d 100644 --- a/registry/gl.xml +++ b/registry/gl.xml @@ -4518,7 +4518,8 @@ typedef unsigned int GLhandleARB; <enum value="0x83F9" name="GL_PERFQUERY_DONOT_FLUSH_INTEL"/> <enum value="0x83FA" name="GL_PERFQUERY_FLUSH_INTEL"/> <enum value="0x83FB" name="GL_PERFQUERY_WAIT_INTEL"/> - <unused start="0x83FC" end="0x83FD" vendor="INTEL"/> + <enum value="0x83FC" name="GL_BLACKHOLE_RENDER_INTEL"/> + <unused start="0x83FD" vendor="INTEL"/> <enum value="0x83FE" name="GL_CONSERVATIVE_RASTERIZATION_INTEL"/> <enum value="0x83FF" name="GL_TEXTURE_MEMORY_LAYOUT_INTEL"/> </enums> @@ -44054,6 +44055,11 @@ typedef unsigned int GLhandleARB; <command name="glMapTexture2DINTEL"/> </require> </extension> + <extension name="GL_INTEL_blackhole_render" supported="gl|glcore|gles2"> + <require> + <enum name="GL_BLACKHOLE_RENDER_INTEL"/> + </require> + </extension> <extension name="GL_INTEL_parallel_arrays" supported="gl"> <require> <enum name="GL_PARALLEL_ARRAYS_INTEL"/> diff --git a/tests/all.py b/tests/all.py index 8c5877a63..c30a5dfdb 100644 --- a/tests/all.py +++ b/tests/all.py @@ -4971,6 +4971,15 @@ with profile.test_list.group_manager( g(['intel_conservative_rasterization-innercoverage_gles3']) g(['intel_conservative_rasterization-tri_gles3']) +# Group INTEL_blackhole_render +with profile.test_list.group_manager( + PiglitGLTest, + grouptools.join('spec', 'INTEL_blackhole_render')) as g: + g(['intel_conservative_rasterization-draw']) + g(['intel_conservative_rasterization-dispatch']) + g(['intel_conservative_rasterization-draw_gles2']) + g(['intel_conservative_rasterization-draw_gles3']) + # Group ARB_bindless_texture with profile.test_list.group_manager( PiglitGLTest, diff --git a/tests/spec/CMakeLists.txt b/tests/spec/CMakeLists.txt index e57e8d703..dc14beb4e 100644 --- a/tests/spec/CMakeLists.txt +++ b/tests/spec/CMakeLists.txt @@ -177,3 +177,4 @@ add_subdirectory (arb_post_depth_coverage) add_subdirectory (arb_fragment_shader_interlock) add_subdirectory (ext_occlusion_query_boolean) add_subdirectory (ext_disjoint_timer_query) +add_subdirectory (intel_blackhole_render) diff --git a/tests/spec/intel_blackhole_render/CMakeLists.gl.txt b/tests/spec/intel_blackhole_render/CMakeLists.gl.txt new file mode 100644 index 000000000..379fc5f9a --- /dev/null +++ b/tests/spec/intel_blackhole_render/CMakeLists.gl.txt @@ -0,0 +1,14 @@ +include_directories( + ${GLEXT_INCLUDE_DIR} + ${OPENGL_INCLUDE_PATH} +) + +link_libraries ( + piglitutil_${piglit_target_api} + ${OPENGL_gl_LIBRARY} +) + +piglit_add_executable (intel_blackhole-dispatch blackhole_dispatch.c) +piglit_add_executable (intel_blackhole-draw blackhole_draw.c) + +# vim: ft=cmake: diff --git a/tests/spec/intel_blackhole_render/CMakeLists.gles2.txt b/tests/spec/intel_blackhole_render/CMakeLists.gles2.txt new file mode 100644 index 000000000..076c559d5 --- /dev/null +++ b/tests/spec/intel_blackhole_render/CMakeLists.gles2.txt @@ -0,0 +1,13 @@ +include_directories( + ${GLEXT_INCLUDE_DIR} + ${OPENGL_INCLUDE_PATH} +) + +link_libraries ( + piglitutil_${piglit_target_api} + ${OPENGL_gl_LIBRARY} +) + +piglit_add_executable (intel_blackhole-draw_gles2 blackhole_draw.c) + +# vim: ft=cmake: diff --git a/tests/spec/intel_blackhole_render/CMakeLists.gles3.txt b/tests/spec/intel_blackhole_render/CMakeLists.gles3.txt new file mode 100644 index 000000000..f0b912d99 --- /dev/null +++ b/tests/spec/intel_blackhole_render/CMakeLists.gles3.txt @@ -0,0 +1,13 @@ +include_directories( + ${GLEXT_INCLUDE_DIR} + ${OPENGL_INCLUDE_PATH} +) + +link_libraries ( + piglitutil_${piglit_target_api} + ${OPENGL_gl_LIBRARY} +) + +piglit_add_executable (intel_blackhole-draw_gles3 blackhole_draw.c) + +# vim: ft=cmake: diff --git a/tests/spec/intel_blackhole_render/CMakeLists.txt b/tests/spec/intel_blackhole_render/CMakeLists.txt new file mode 100644 index 000000000..144a306f4 --- /dev/null +++ b/tests/spec/intel_blackhole_render/CMakeLists.txt @@ -0,0 +1 @@ +piglit_include_target_api() diff --git a/tests/spec/intel_blackhole_render/blackhole_dispatch.c b/tests/spec/intel_blackhole_render/blackhole_dispatch.c new file mode 100644 index 000000000..6e9ed4203 --- /dev/null +++ b/tests/spec/intel_blackhole_render/blackhole_dispatch.c @@ -0,0 +1,127 @@ +/* + * Copyright © 2018 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +/** @file blackhole_draw.c + * + * Verifies that with GL_INTEL_black_render enabled, dispatch operations have no + * effect. + */ + +#include "piglit-util-gl.h" + +PIGLIT_GL_TEST_CONFIG_BEGIN + +#if defined(PIGLIT_USE_OPENGL) + config.supports_gl_core_version = 42; +#elif defined(PIGLIT_USE_OPENGL_ES2) || defined(PIGLIT_USE_OPENGL_ES3) + config.supports_gl_es_version = 20; +#endif + config.window_visual = PIGLIT_GL_VISUAL_DOUBLE | PIGLIT_GL_VISUAL_RGBA; + +PIGLIT_GL_TEST_CONFIG_END + +#define SIZE_X (4) + +static const char *compute_shader = + "#version 430\n" + "layout (local_size_x = 1) in;" + "uniform float value;" + "\n" + "layout (std430, binding = 0) buffer OutBuf { float output_values[]; };\n" + "\n" + "void main()\n" + "{\n" + " uint pos = gl_GlobalInvocationID.x;\n" + " output_values[pos] = value;\n" + "}\n"; + +enum piglit_result +piglit_display(void) +{ + return PIGLIT_FAIL; +} + +void +piglit_init(int argc, char **argv) +{ + enum piglit_result result = PIGLIT_PASS; + GLuint data_bo = 0; + GLfloat *data_buf; + GLint ok = 1; + GLint prog = 0; + GLuint shader; + const float one = 1.0f; + + piglit_require_extension("GL_ARB_compute_shader"); + + data_buf = calloc(SIZE_X, sizeof(*data_buf)); + glGenBuffers(1, &data_bo); + glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, data_bo); + glBufferData(GL_SHADER_STORAGE_BUFFER, + sizeof(float) * SIZE_X, + data_buf, GL_STATIC_DRAW); + free(data_buf); + + shader = glCreateShader(GL_COMPUTE_SHADER); + + glShaderSource(shader, 1, + (const GLchar **) &compute_shader, + NULL); + + glCompileShader(shader); + + glGetShaderiv(shader, GL_COMPILE_STATUS, &ok); + assert(ok); + + prog = glCreateProgram(); + + glAttachShader(prog, shader); + + glLinkProgram(prog); + + glGetProgramiv(prog, GL_LINK_STATUS, &ok); + assert(ok); + + glUseProgram(prog); + + glMemoryBarrier(GL_ALL_BARRIER_BITS); + glUniform1f(glGetUniformLocation(prog, "value"), 1.0f); + glDispatchCompute(SIZE_X, 1, 1); + glMemoryBarrier(GL_ALL_BARRIER_BITS); + + if (!piglit_probe_buffer(data_bo, GL_SHADER_STORAGE_BUFFER, "output_values", + SIZE_X, 1, &one)) + result = PIGLIT_FAIL; + + glEnable(GL_BLACKHOLE_RENDER_INTEL); + glMemoryBarrier(GL_ALL_BARRIER_BITS); + glUniform1f(glGetUniformLocation(prog, "value"), 2.0f); + glDispatchCompute(SIZE_X, 1, 1); + glMemoryBarrier(GL_ALL_BARRIER_BITS); + + if (!piglit_probe_buffer(data_bo, GL_SHADER_STORAGE_BUFFER, "output_values", + SIZE_X, 1, &one)) + result = PIGLIT_FAIL; + + piglit_report_result(result); +} diff --git a/tests/spec/intel_blackhole_render/blackhole_draw.c b/tests/spec/intel_blackhole_render/blackhole_draw.c new file mode 100644 index 000000000..20d3ab57a --- /dev/null +++ b/tests/spec/intel_blackhole_render/blackhole_draw.c @@ -0,0 +1,156 @@ +/* + * Copyright © 2018 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/** @file blackhole_draw.c + * + * Verifies that with GL_INTEL_black_render enabled, rendering operations have + * no effect. + */ + +#include "piglit-util-gl.h" +#include "piglit-matrix.h" + +PIGLIT_GL_TEST_CONFIG_BEGIN + +#if defined(PIGLIT_USE_OPENGL) + config.supports_gl_core_version = 42; +#elif defined(PIGLIT_USE_OPENGL_ES2) || defined(PIGLIT_USE_OPENGL_ES3) + config.supports_gl_es_version = 20; +#endif + + config.window_width = 400; + config.window_height = 400; + config.window_visual = PIGLIT_GL_VISUAL_RGBA | PIGLIT_GL_VISUAL_DOUBLE; + +PIGLIT_GL_TEST_CONFIG_END + +enum piglit_result +piglit_display(void) +{ + float delta = 1.01 / piglit_width; + GLuint prog; + + prog = piglit_build_simple_program( +#if defined(PIGLIT_USE_OPENGL) + "#version 330\n" +#elif defined(PIGLIT_USE_OPENGL_ES2) || defined(PIGLIT_USE_OPENGL_ES3) + "#version 300 es\n" +#endif + "in vec4 piglit_vertex;\n" + "void main()\n" + "{\n" + " gl_Position = piglit_vertex;\n" + "}\n", +#if defined(PIGLIT_USE_OPENGL) + "#version 330\n" + "out vec4 color;\n" +#elif defined(PIGLIT_USE_OPENGL_ES2) || defined(PIGLIT_USE_OPENGL_ES3) + "#version 300 es\n" + "out highp vec4 color;\n" +#endif + "void main()\n" + "{\n" + " color = vec4(1.0, 0.0, 0.0, 1.0);\n" + "}\n"); + if (!prog) + piglit_report_result(PIGLIT_FAIL); + + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, piglit_winsys_fbo); + glViewport(0, 0, piglit_width, piglit_height); + + glClearColor(0.0, 0.0, 0.0, 0.0); + + glUseProgram(prog); + + GLuint vao; + glGenVertexArrays(1, &vao); + glBindVertexArray(vao); + + GLuint vbo; + float vertices[3][2] = { + { -0.5, -1 + delta, }, + { 0, 0.8, }, + { 0.5, -1 + delta, }, + }; + glGenBuffers(1, &vbo); + glBindBuffer(GL_ARRAY_BUFFER, vbo); + glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); + glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(GLfloat), NULL); + glEnableVertexAttribArray(0); + + glDisable(GL_BLACKHOLE_RENDER_INTEL); + glClear(GL_COLOR_BUFFER_BIT); + glDrawArrays(GL_TRIANGLES, 0, 3); + + if(!piglit_check_gl_error(GL_NO_ERROR)) + return PIGLIT_FAIL; + + piglit_present_results(); + + const float normal_expected[] = { 1.0, 0.0, 0.0, 1.0 }; + if (!piglit_probe_pixel_rgba(piglit_width / 2, + piglit_height / 2, + normal_expected)) + return PIGLIT_FAIL; + + glClearColor(0.0, 1.0, 0.0, 1.0); + glClear(GL_COLOR_BUFFER_BIT); + + glEnable(GL_BLACKHOLE_RENDER_INTEL); + + glDrawArrays(GL_TRIANGLES, 0, 3); + + if(!piglit_check_gl_error(GL_NO_ERROR)) + return PIGLIT_FAIL; + + piglit_present_results(); + + const float blackhole_draw_expected[] = { 0.0, 1.0, 0.0, 1.0 }; + if (!piglit_probe_pixel_rgba(piglit_width / 2, + piglit_height / 2, + blackhole_draw_expected)) + return PIGLIT_FAIL; + + glClearColor(1.0, 0.0, 0.0, 1.0); + + if(!piglit_check_gl_error(GL_NO_ERROR)) + return PIGLIT_FAIL; + + piglit_present_results(); + + const float blackhole_clear_expected[] = { 0.0, 1.0, 0.0, 1.0 }; + if (!piglit_probe_pixel_rgba(piglit_width / 2, + piglit_height / 2, + blackhole_clear_expected)) + return PIGLIT_FAIL; + + glDisable(GL_BLACKHOLE_RENDER_INTEL); + + return PIGLIT_PASS; +} + +void piglit_init(int argc, char **argv) +{ + piglit_require_extension("GL_INTEL_blackhole_render"); +} diff --git a/tests/spec/nv_image_formats/CMakeLists.gl.txt b/tests/spec/nv_image_formats/CMakeLists.gl.txt new file mode 100644 index 000000000..ef1b22d5e --- /dev/null +++ b/tests/spec/nv_image_formats/CMakeLists.gl.txt @@ -0,0 +1,8 @@ +link_libraries( + piglitutil_${piglit_target_api} + ${OPENGL_gl_LIBRARY} + ) + +piglit_add_executable (nv_image_formats copy-image-formats.c) + +# vim: ft=cmake: -- 2.16.2 _______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/piglit