On Sat, Feb 20, 2010 at 5:22 PM, Brian Paul <brian.e.p...@gmail.com> wrote:
> On Fri, Feb 19, 2010 at 7:34 PM, Xavier Chantry
> <chantry.xav...@gmail.com> wrote:
>> It seems the commit below will always report an user error when
>> glxinfo -l is called.
>> And indeed I always get the following :
>> $ glxinfo -l
>> ...
>>    GL_VERTEX_PROGRAM_ARB:
>> ...
>> Mesa: User error: GL_INVALID_ENUM in glGetProgramivARB(pname)
>> Mesa: User error: GL_INVALID_ENUM in glGetProgramivARB(pname)
>> Mesa: User error: GL_INVALID_ENUM in glGetProgramivARB(pname)
>> Mesa: User error: GL_INVALID_ENUM in glGetProgramivARB(pname)
>> Mesa: User error: GL_INVALID_ENUM in glGetProgramivARB(pname)
>> Mesa: User error: GL_INVALID_ENUM in glGetProgramivARB(pname)
>>
>> Should glxinfo be fixed to avoid this error ?
>> We could just put the fragment program only parameter in its own list,
>> and not use them when target is vertex program.
>
> Well, normally GL errors aren't reported to stderr so most people
> running non-debug builds won't see those.  But yeah, we probably
> shouldn't generate the errors anyway.  Feel free to write a patch to
> glxinfo...
>

I only realized yesterday that non-debug was the reason other people
(and some of my systems) didn't show these errors. It had been bugging
me for a while :)

Attached patch should fix it.
From 6bbb70ec1fdd88997afbb31c5308395a09b5dd88 Mon Sep 17 00:00:00 2001
From: Xavier Chantry <chantry.xav...@gmail.com>
Date: Sat, 20 Feb 2010 03:45:15 +0100
Subject: [PATCH] glxinfo: Fix User error in glGetProgramivARB

glxinfo needed fixing after commit 4bccd69.

Move fragment program only parameters into their own list
so that they are not queried for a vertex program.

Signed-off-by: Xavier Chantry <chantry.xav...@gmail.com>
---
 progs/xdemos/glxinfo.c |   21 +++++++++++++++++----
 1 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/progs/xdemos/glxinfo.c b/progs/xdemos/glxinfo.c
index d871088..cad365c 100644
--- a/progs/xdemos/glxinfo.c
+++ b/progs/xdemos/glxinfo.c
@@ -171,7 +171,7 @@ print_program_limits(GLenum target)
       GLenum token;
       const char *name;
    };
-   static const struct token_name limits[] = {
+   static const struct token_name common_limits[] = {
       { GL_MAX_PROGRAM_INSTRUCTIONS_ARB, "GL_MAX_PROGRAM_INSTRUCTIONS_ARB" },
       { GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, "GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB" },
       { GL_MAX_PROGRAM_TEMPORARIES_ARB, "GL_MAX_PROGRAM_TEMPORARIES_ARB" },
@@ -184,6 +184,9 @@ print_program_limits(GLenum target)
       { GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB, "GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB" },
       { GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB, "GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB" },
       { GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, "GL_MAX_PROGRAM_ENV_PARAMETERS_ARB" },
+      { (GLenum) 0, NULL }
+   };
+   static const struct token_name fragment_limits[] = {
       { GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB, "GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB" },
       { GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB, "GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB" },
       { GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB, "GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB" },
@@ -192,8 +195,10 @@ print_program_limits(GLenum target)
       { GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB, "GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB" },
       { (GLenum) 0, NULL }
    };
+
    PFNGLGETPROGRAMIVARBPROC GetProgramivARB_func = (PFNGLGETPROGRAMIVARBPROC)
       glXGetProcAddressARB((GLubyte *) "glGetProgramivARB");
+
    GLint max[1];
    int i;
 
@@ -207,12 +212,20 @@ print_program_limits(GLenum target)
       return; /* something's wrong */
    }
 
-   for (i = 0; limits[i].token; i++) {
-      GetProgramivARB_func(target, limits[i].token, max);
+   for (i = 0; common_limits[i].token; i++) {
+      GetProgramivARB_func(target, common_limits[i].token, max);
       if (glGetError() == GL_NO_ERROR) {
-         printf("        %s = %d\n", limits[i].name, max[0]);
+         printf("        %s = %d\n", common_limits[i].name, max[0]);
       }
    }
+   if (target == GL_FRAGMENT_PROGRAM_ARB) {
+	   for (i = 0; fragment_limits[i].token; i++) {
+		   GetProgramivARB_func(target, fragment_limits[i].token, max);
+		   if (glGetError() == GL_NO_ERROR) {
+			   printf("        %s = %d\n", fragment_limits[i].name, max[0]);
+		   }
+	   }
+   }
 #endif /* GL_ARB_vertex_program / GL_ARB_fragment_program */
 }
 
-- 
1.7.0

------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to