Commit c8d89e73 authored by Lionel Landwerlin's avatar Lionel Landwerlin

tests: add INTEL_blackhole_render

v2: Drop OPENGL_gl_LIBRARY from linked libraries (Alejandro)
    Add asserts to verify glIsEnabled() returns the right value (Lionel)
Signed-off-by: Lionel Landwerlin's avatarLionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Alejandro Piñeiro's avatarAlejandro Piñeiro <apinheiro@igalia.com>
parent b8a4f6a0
......@@ -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"/>
......@@ -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,
......
......@@ -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)
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:
include_directories(
${GLEXT_INCLUDE_DIR}
${OPENGL_INCLUDE_PATH}
)
link_libraries (
piglitutil_${piglit_target_api}
)
piglit_add_executable (intel_blackhole-draw_gles2 blackhole_draw.c)
# vim: ft=cmake:
include_directories(
${GLEXT_INCLUDE_DIR}
${OPENGL_INCLUDE_PATH}
)
link_libraries (
piglitutil_${piglit_target_api}
)
piglit_add_executable (intel_blackhole-draw_gles3 blackhole_draw.c)
# vim: ft=cmake:
/*
* 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);
assert(!glIsEnabled(GL_BLACKHOLE_RENDER_INTEL));
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);
assert(glIsEnabled(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);
}
/*
* 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);
assert(!glIsEnabled(GL_BLACKHOLE_RENDER_INTEL));
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);
assert(glIsEnabled(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");
}
link_libraries(
piglitutil_${piglit_target_api}
${OPENGL_gl_LIBRARY}
)
piglit_add_executable (nv_image_formats copy-image-formats.c)
# vim: ft=cmake:
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment