From 7069894238fe8a0fe2d8d4f91e1ce3916f195364 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Tue, 6 Dec 2011 22:58:44 -0800 Subject: glx_ext_import_context: Verify glXImportContextEXT across two processes This test fails on NVIDIA's closed-source driver because they do not generate a GLXBadContext error the invalid context ID 0 is imported. They do, however, correctly generate the error when 0xDEADBEEF is imported. This test fails on AMD's closed-source driver because it hits an assertion failure in XCB: xcb_io.c:515: _XReply: Assertion `!dpy->xcb->reply_data' failed. Signed-off-by: Ian Romanick Reviewed-by: Brian Paul --- .../spec/glx_ext_import_context/CMakeLists.gl.txt | 1 + .../import-context-multi-process.c | 66 ++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 tests/spec/glx_ext_import_context/import-context-multi-process.c (limited to 'tests/spec/glx_ext_import_context') diff --git a/tests/spec/glx_ext_import_context/CMakeLists.gl.txt b/tests/spec/glx_ext_import_context/CMakeLists.gl.txt index 9db02e4e..edb496ee 100644 --- a/tests/spec/glx_ext_import_context/CMakeLists.gl.txt +++ b/tests/spec/glx_ext_import_context/CMakeLists.gl.txt @@ -17,6 +17,7 @@ link_libraries ( IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux") add_executable (glx-free-context free-context.c common.c) add_executable (glx-get-context-id get-context-id.c common.c) + add_executable (glx-import-context-multi-process import-context-multi-process.c common.c) add_executable (glx-import-context-single-process import-context-single-process.c common.c) ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Linux") diff --git a/tests/spec/glx_ext_import_context/import-context-multi-process.c b/tests/spec/glx_ext_import_context/import-context-multi-process.c new file mode 100644 index 00000000..eec28b27 --- /dev/null +++ b/tests/spec/glx_ext_import_context/import-context-multi-process.c @@ -0,0 +1,66 @@ +/* Copyright © 2011 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. + */ + +#include +#include +#include + +#include "piglit-util.h" +#include "piglit-glx-util.h" +#include "common.h" + +int main(int argc, char **argv) +{ + bool pass = true; + pid_t child; + int status; + + GLX_EXT_import_context_setup(); + get_context_IDs(); + + child = fork(); + if (child == 0) { + GLX_EXT_import_context_setup_for_child(); + + pass = try_import_context(directID, direct_rendering) + && pass; + pass = try_import_context(indirectID, indirect_rendering) + && pass; + pass = try_import_context(None, invalid) + && pass; + pass = try_import_context(0xDEADBEEF, invalid) + && pass; + + exit(pass ? 0 : 1); + } + + /* The test passes if the child exited normally with a return value of + * zero. + */ + waitpid(child, &status, 0); + pass = WIFEXITED(status) && (WEXITSTATUS(status) == 0); + + GLX_EXT_import_context_teardown(); + + piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL); + return 0; +} -- cgit v1.2.3