Bug 5002

Summary: indirect rendering of glDrawArrays() to an NVidia machine is broke.
Product: Mesa Reporter: tom <flynnt>
Component: Mesa coreAssignee: mesa-dev
Status: RESOLVED MOVED QA Contact:
Severity: normal    
Priority: high CC: martin.vogt, t4bs
Version: unspecified   
Hardware: x86 (IA32)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:
Attachments: Small glut program that causes the GLXBadRenderRequest
draws an empty window instead a quad

Description tom 2005-11-09 16:58:14 UTC
Running an app that uses glDrawArrays() from a machine without graphics to a
machine with an NVidia card with NVidia's driver, produces a blank window.

If I set LIBGL_NO_DRAWARRAYS=1 before running the app, everything is drawn ok.

Given that the NVidia driver exports EXT_vertex_arrays and supports vbo, I guess
DrawArrays_old is sending the old opcode and the nvidia driver isn't supporting
it and is instead expecting the new opcode.  (if I understand that all correctly)
Comment 1 Ian Romanick 2005-11-10 09:05:30 UTC
There is currently no GLX protocol defined for ARB_vertex_buffer_object.  There
are two opcodes that can be used for glDrawArrays, but, other than the opcode
number being different, the protocol is identical.  I suspect that Nvidia's
server-side GLX code, like most, supports both.

Are you able to reproduce this bug when not using glInterleavedArrays (as in bug
#5001)?  My best guess is that the problem you identified in that bug is the
root cause here.
Comment 2 tom 2005-11-10 14:20:37 UTC
I can reproduce this bug without using glInterleavedArrays() and just use
glVertexPointer() and friends.  There's only one section of our code that uses
InterleavedArrays(), even if i turn that off (ifdef it out), I still get a blank
window.  That's why I decided to file this as a separate bug.

btw, I grabbed a knoppix cd from a friend.  He said it was kinda old (knoppix
3.7).  It's running XFree86 4.3.0.1 with glxinfo reporting 1.3 Mesa 4.0.4 for
the version string.

With my display set to the knoppix machine and enable InterleavedArrays, I get
some glx error saying the request is too large (we do have like 4,000 vertices
in that InterleavedArray call).

If I disable InterleavedArrays, I get a:

X Error of failed request:  GLXBadRenderRequest
  Major opcode of failed request:  144 (GLX)
  Minor opcode of failed request:  1 (X_GLXRender)
  Serial number of failed request:  187
  Current serial number in output stream:  189

haven't narrowed down why that is yet.  Not sure I want to spend time on it
right now.  I care more about making sure things display on the nvidia machine.

If I keep InterleavedArrays disabled and set LIBGL_NO_DRAWARRAYS=1, everything
renders fine on the knoppix machine.
Comment 3 Colin McDonald 2006-02-16 23:50:27 UTC
Are you running the app from a big-endian system?  I have filed bug 5911
regarding a byte-swapping problem in the Xorg server for glDrawArrays.
Comment 4 tom 2006-02-17 05:33:49 UTC
Yes, I am running from a big-endian machine and displaying onto a little endian
machine.
Comment 5 Jeff Epler 2006-08-24 07:08:15 UTC
Created attachment 6671 [details]
Small glut program that causes the GLXBadRenderRequest

Hi.  I ran into a similar problem.  I am running the program on an Ubuntu 6.06
machine and displaying to a debian "sarge"-based machine.  Both are x86
machines running inside vmware, so there are no endian issues and no NVIDIA
closed-source drivers.

As another commenter noted, setting LIBGL_NO_DRAWARRAYS=1 conceals the problem.


The Ubuntu system (running "glt") has "xserver-xorg 7.0.0-0ubuntu4" and
"libgl1-mesa 6.4.1-0ubuntu8"

The debian system (used as the DISPLAY) has "xserver-xfree86
4.3.0.dfsg.1-14sarge1" and "xlibmesa-gl-dev 4.3.0.dfsg.1-14sarge1"
Comment 6 martin.vogt 2010-02-09 07:37:41 UTC
Created attachment 33195 [details]
draws an empty window instead a quad
Comment 7 martin.vogt 2010-02-09 07:41:39 UTC
Hello,

seems I hit the same problem.
(3 years and a few month later its still present. :)

I added my demo attachment.

The problematic code is:

  // vertex test
  glEnableClientState(GL_VERTEX_ARRAY);
  glVertexPointer(3,GL_FLOAT,0,vertices);
  glDrawArrays(GL_QUADS,0,4);
  glDisableClientState(GL_VERTEX_ARRAY);

This only draws an empty window.

setting LIBGL_NO_DRAWARRAYS=1 fixes the problem for me.
The latest nvidia driver which worked was:

-173.14

The first one which didnt work for me was:(there may be earlier drivers)

-185.18

This is still true for the current linux beta driver:

-195.30

I have posted this to the mesa-devel mailinglist with the subject:

"mesa / nvidia indirect GLX question (OpenSuSE 11.1)"

This is the posting:

http://sourceforge.net/mailarchive/forum.php?thread_name=4B700921.504%40itwm.fraunhofer.de&forum_name=mesa3d-dev

and the reply:
http://sourceforge.net/mailarchive/forum.php?thread_name=4B705700.2000406%40freedesktop.org&forum_name=mesa3d-dev

regards,

Martin

Comment 8 Trevor Forbes 2011-06-30 21:39:59 UTC
I also keep running into this problem with workstations running NVIDIA drivers > 180.  Try running Googleearth from a remote server for example..

Some people are getting around it by using an old NVIDIA driver or by copying the proprietary NVIDIA lib to the server and replacing the Mesa lib. 

In my case, I am setting LIBGL_NO_DRAWARRAYS=1 on the server before launching the application which works but is really a workaround rather than a solution.
Comment 9 GitLab Migration User 2019-09-18 20:21:40 UTC
-- GitLab Migration Automatic Message --

This bug has been migrated to freedesktop.org's GitLab instance and has been closed from further activity.

You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.freedesktop.org/mesa/mesa/issues/953.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.