diff options
author | Tapani Pälli <tapani.palli@intel.com> | 2016-02-15 09:55:06 +0200 |
---|---|---|
committer | Tapani Pälli <tapani.palli@intel.com> | 2016-02-16 08:21:56 +0200 |
commit | c4bc2723eba07e7cd5707dac2f918348d7708f00 (patch) | |
tree | 0914367c62dd5c33c37fe410418acbd960e9bcb8 /tests | |
parent | 6060d7f971db730e3d2929f00b3429d72e6671b6 (diff) |
egl: add new test egl-create-largest-pbuffer-surface
Test is based on egl-create-pbuffer-surface but tests that using
EGL_LARGEST_PBUFFER attribute works as specified
Test fails on current Mesa and Nvidia binary driver version 355.11.
v2: code cleanups
Signed-off-by: Tapani Pälli <tapani.palli@intel.com>
Reviewed-by: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/all.py | 3 | ||||
-rw-r--r-- | tests/egl/CMakeLists.gl.txt | 2 | ||||
-rw-r--r-- | tests/egl/egl-create-largest-pbuffer-surface.c | 107 |
3 files changed, 112 insertions, 0 deletions
diff --git a/tests/all.py b/tests/all.py index c5009cc62..440eb0f25 100644 --- a/tests/all.py +++ b/tests/all.py @@ -4332,6 +4332,9 @@ with profile.group_manager( g(['egl-create-pbuffer-surface'], 'eglCreatePbufferSurface and then glClear', run_concurrent=False) + g(['egl-create-largest-pbuffer-surface'], + 'largest possible eglCreatePbufferSurface and then glClear', + run_concurrent=False) with profile.group_manager( PiglitGLTest, diff --git a/tests/egl/CMakeLists.gl.txt b/tests/egl/CMakeLists.gl.txt index eccd470ec..06fbecb9b 100644 --- a/tests/egl/CMakeLists.gl.txt +++ b/tests/egl/CMakeLists.gl.txt @@ -21,6 +21,8 @@ IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux") target_link_libraries(egl-query-surface pthread ${X11_X11_LIB}) piglit_add_executable (egl-create-pbuffer-surface egl-util.c egl-create-pbuffer-surface.c) target_link_libraries(egl-create-pbuffer-surface pthread ${X11_X11_LIB}) + piglit_add_executable (egl-create-largest-pbuffer-surface egl-util.c egl-create-largest-pbuffer-surface.c) + target_link_libraries(egl-create-largest-pbuffer-surface pthread ${X11_X11_LIB}) piglit_add_executable (egl-configless-context egl-configless-context.c) target_link_libraries(egl-configless-context pthread ${X11_X11_LIB}) piglit_add_executable (egl-gl-colorspace egl-util.c egl-gl-colorspace.c) diff --git a/tests/egl/egl-create-largest-pbuffer-surface.c b/tests/egl/egl-create-largest-pbuffer-surface.c new file mode 100644 index 000000000..e486c22ea --- /dev/null +++ b/tests/egl/egl-create-largest-pbuffer-surface.c @@ -0,0 +1,107 @@ +/* + * Copyright © 2016 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 egl-create-largest-pbuffer-surface.c + * + * Test EGLCreatePBufferSurface behaviour with EGL_LARGEST_PBUFFER attribute. + * + * From EGL 1.5 spec: + * + * "Use EGL_LARGEST_PBUFFER to get the largest available pbuffer when the + * allocation of the pbuffer would otherwise fail." + */ + +#include <limits.h> +#include "piglit-util-gl.h" +#include "egl-util.h" + +static enum piglit_result +draw(struct egl_state *state) +{ + EGLSurface surf; + const float purple[] = {1.0, 0.0, 1.0, 1.0}; + + static const EGLint srfPbufferAttr[] = + { + EGL_WIDTH, INT_MAX, + EGL_HEIGHT, INT_MAX, + EGL_TEXTURE_FORMAT, EGL_TEXTURE_RGBA, + EGL_TEXTURE_TARGET, EGL_TEXTURE_2D, + EGL_LARGEST_PBUFFER, EGL_TRUE, + EGL_NONE + }; + + surf = eglCreatePbufferSurface(state->egl_dpy, state->cfg, + srfPbufferAttr); + + if (eglGetError() != EGL_SUCCESS || surf == EGL_NO_SURFACE) { + fprintf(stderr, "eglCreatePbufferSurface failed\n"); + piglit_report_result(PIGLIT_FAIL); + } + + glEnable(GL_TEXTURE_2D); + + eglMakeCurrent(state->egl_dpy, state->surf, state->surf, state->ctx); + glClearColor(1.0, 1.0, 1.0, 0.0); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + eglBindTexImage(state->egl_dpy, surf, EGL_BACK_BUFFER); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + glViewport(0, 0, state->width, state->height); + piglit_ortho_projection(state->width, state->height, GL_FALSE); + + eglMakeCurrent(state->egl_dpy, surf, surf, state->ctx); + glClearColor(purple[0], purple[1], purple[2], purple[3]); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + eglMakeCurrent(state->egl_dpy, state->surf, state->surf, state->ctx); + piglit_draw_rect_tex(0, 0, state->width, state->height, 0, 0, 1, 1); + eglSwapBuffers(state->egl_dpy, state->surf); + + if (!piglit_probe_rect_rgba(0, 0, state->width, state->height, purple)) + piglit_report_result(PIGLIT_FAIL); + + piglit_report_result(PIGLIT_PASS); +} + +int +main(int argc, char *argv[]) +{ + struct egl_test test; + static const EGLint test_attribs[] = + { + EGL_RENDERABLE_TYPE, EGL_OPENGL_ES_BIT, EGL_NONE + }; + + egl_init_test(&test); + test.draw = draw; + test.stop_on_failure = true; + test.config_attribs = test_attribs; + + if (egl_util_run(&test, argc, argv) != PIGLIT_PASS) + return EXIT_FAILURE; + return EXIT_SUCCESS; +} |