[Piglit] [PATCH 4/5] glx_ext_create_context_es2_profile: Verify that indirect-rendering is impossible

2012-06-12 Thread Ian Romanick
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

2012-06-12 Thread Ian Romanick

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

2012-06-12 Thread James Jones
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