[Piglit] [PATCH 4/5] glx_ext_create_context_es2_profile: Verify that indirect-rendering is impossible
From: Ian Romanick ian.d.roman...@intel.com The spec doesn't forbid indirect rendering with OpenGL ES 2.0. There's no protocol defined, so it seems impossible that this could ever work. NVIDIA's closed-source driver fails this test. An indirect-rendering ES2 context is created. I have not verified whether this context is actually usable, or it is garbage. AMD's closed-source driver has not been tested. Signed-off-by: Ian Romanick ian.d.roman...@intel.com Cc: James Jones jajo...@nvidia.com --- tests/all.tests|4 + .../spec/glx_arb_create_context/CMakeLists.gl.txt |1 + .../glx_arb_create_context/indirect-es2-profile.c | 75 3 files changed, 80 insertions(+), 0 deletions(-) create mode 100644 tests/spec/glx_arb_create_context/indirect-es2-profile.c diff --git a/tests/all.tests b/tests/all.tests index 923e278..1c158e7 100644 --- a/tests/all.tests +++ b/tests/all.tests @@ -690,6 +690,10 @@ create_context_profile['3.2 core profile required'] = PlainExecTest(['glx-create create_context_profile['invalid profile'] = PlainExecTest(['glx-create-context-invalid-profile']) create_context_profile['pre-GL3 profile'] = PlainExecTest(['glx-create-context-pre-GL3-profile']) +create_context_es2_profile = Group(); +glx['GLX_EXT_create_context_es2_profile'] = create_context_es2_profile +create_context_es2_profile['indirect rendering ES2 profile'] = PlainExecTest(['glx-create-context-indirect-es2-profile']) + texturing = Group() add_concurrent_test(texturing, '1-1-linear-texture') add_plain_test(texturing, 'array-texture') diff --git a/tests/spec/glx_arb_create_context/CMakeLists.gl.txt b/tests/spec/glx_arb_create_context/CMakeLists.gl.txt index 5b78843..e64f410 100644 --- a/tests/spec/glx_arb_create_context/CMakeLists.gl.txt +++ b/tests/spec/glx_arb_create_context/CMakeLists.gl.txt @@ -25,6 +25,7 @@ IF(BUILD_GLX_TESTS) piglit_add_executable (glx-create-context-core-profile core-profile.c common.c) piglit_add_executable (glx-create-context-default-major-version default-major-version.c common.c) piglit_add_executable (glx-create-context-default-minor-version default-minor-version.c common.c) + piglit_add_executable (glx-create-context-indirect-es2-profile indirect-es2-profile.c common.c) piglit_add_executable (glx-create-context-invalid-attribute invalid-attribute.c common.c) piglit_add_executable (glx-create-context-invalid-flag invalid-flag.c common.c) piglit_add_executable (glx-create-context-invalid-flag-forward-compatible invalid-flag-forward-compatible.c common.c) diff --git a/tests/spec/glx_arb_create_context/indirect-es2-profile.c b/tests/spec/glx_arb_create_context/indirect-es2-profile.c new file mode 100644 index 000..bdfbdad --- /dev/null +++ b/tests/spec/glx_arb_create_context/indirect-es2-profile.c @@ -0,0 +1,75 @@ +/* Copyright © 2012 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 piglit-util.h +#include piglit-glx-util.h +#include common.h + +int main(int argc, char **argv) +{ + static const int attribs[] = { + GLX_CONTEXT_MAJOR_VERSION_ARB, + 2, + GLX_CONTEXT_MINOR_VERSION_ARB, + 0, + GLX_CONTEXT_PROFILE_MASK_ARB, + GLX_CONTEXT_ES2_PROFILE_BIT_EXT, + None + }; + + bool pass = true; + GLXContext ctx; + + GLX_ARB_create_context_setup(); + piglit_require_glx_extension(dpy, GLX_ARB_create_context_profile); + piglit_require_glx_extension(dpy, GLX_EXT_create_context_es2_profile); + + /* The GLX_EXT_create_context_es2_profile doesn't say anything about +* indirect-rendering contexts for ES2. However, there is no protocol +* defined, so it seems impossible that this could ever work. +*/ + ctx =
Re: [Piglit] [PATCH 4/5] glx_ext_create_context_es2_profile: Verify that indirect-rendering is impossible
On 06/12/2012 02:56 PM, James Jones wrote: On 6/12/12 2:47 PM, Ian Romanick wrote: On 06/12/2012 02:35 PM, James Jones wrote: On 6/12/12 2:25 PM, Ian Romanick wrote: From: Ian Romanickian.d.roman...@intel.com The spec doesn't forbid indirect rendering with OpenGL ES 2.0. There's no protocol defined, so it seems impossible that this could ever work. NVIDIA's closed-source driver fails this test. An indirect-rendering ES2 context is created. I have not verified whether this context is actually usable, or it is garbage. Yeah, I didn't test, but in theory it just works with the existing GLX protocol, so I saw no reason to disable it. Since GLX owns the GL command protocol specification, not GL or GLES, and this extension is creating contexts using GLX, I see no reason this should be considered a required error. So... how do commands like glReleaseShaderCompiler, glShaderBinary, and glGetShaderPrecisionFormat, which have no GLX protocol, work? They work just as good as the subset of GL commands that don't have protocol defined today which many implementations (including ours) allow contexts to be created for. I'm not saying it's correct that our That seems dodgy. :) implementation currently allows creation of GLES contexts that only partially work (or maybe not at all for all I know), but I don't think it's necessarily correct to require ALL implementations to fail either. Presumably they could have their own in-house protocol in place. For example, we implement Beta protocol for many GL operations that don't have ARB-defined protocol, because we have customers that want indirect rendering support now and the ARB approval process often drags on forever. It only works when using both our client and server, both with beta protocol support enabled, but it is a usable solution and doesn't violate the spec in any way that I know of. Right. I knew you guys did that, and I can't think of anything wrong with that. That's why I didn't make a similar test for desktop GL. (see also http://lists.x.org/archives/xorg-devel/2012-June/031602.html). I think I'll rework the test to use the context that was created. If that works, the test will pass. Does that seem like a fair compromise? ___ Piglit mailing list Piglit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/piglit
Re: [Piglit] [PATCH 4/5] glx_ext_create_context_es2_profile: Verify that indirect-rendering is impossible
On 6/12/12 3:12 PM, Ian Romanick wrote: On 06/12/2012 02:56 PM, James Jones wrote: On 6/12/12 2:47 PM, Ian Romanick wrote: On 06/12/2012 02:35 PM, James Jones wrote: On 6/12/12 2:25 PM, Ian Romanick wrote: From: Ian Romanickian.d.roman...@intel.com The spec doesn't forbid indirect rendering with OpenGL ES 2.0. There's no protocol defined, so it seems impossible that this could ever work. NVIDIA's closed-source driver fails this test. An indirect-rendering ES2 context is created. I have not verified whether this context is actually usable, or it is garbage. Yeah, I didn't test, but in theory it just works with the existing GLX protocol, so I saw no reason to disable it. Since GLX owns the GL command protocol specification, not GL or GLES, and this extension is creating contexts using GLX, I see no reason this should be considered a required error. So... how do commands like glReleaseShaderCompiler, glShaderBinary, and glGetShaderPrecisionFormat, which have no GLX protocol, work? They work just as good as the subset of GL commands that don't have protocol defined today which many implementations (including ours) allow contexts to be created for. I'm not saying it's correct that our That seems dodgy. :) We were more worried about regressing existing working apps by downgrading our GL version when we found the bug internally, since no one ever actually complained about the inflated version numbers until very recently. implementation currently allows creation of GLES contexts that only partially work (or maybe not at all for all I know), but I don't think it's necessarily correct to require ALL implementations to fail either. Presumably they could have their own in-house protocol in place. For example, we implement Beta protocol for many GL operations that don't have ARB-defined protocol, because we have customers that want indirect rendering support now and the ARB approval process often drags on forever. It only works when using both our client and server, both with beta protocol support enabled, but it is a usable solution and doesn't violate the spec in any way that I know of. Right. I knew you guys did that, and I can't think of anything wrong with that. That's why I didn't make a similar test for desktop GL. (see also http://lists.x.org/archives/xorg-devel/2012-June/031602.html). I think I'll rework the test to use the context that was created. If that works, the test will pass. Does that seem like a fair compromise? Yeah, sounds good. Depending on what you actually mean by use, we'll pass or fail, but that's fair. Thanks, -James nvpublic ___ Piglit mailing list Piglit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/piglit