framebuffer config broken on linux w/ nvidia 23.13/4?

New Message Reply Date view Thread view Subject view Author view

From: jan p. springer (jsd++at++igroup.org)
Date: 02/07/2002 14:49:06


pfHi,

(this may not really a performer problem but i hope the performer team may
  have ways of dealing w/ this :-)

it seems that the framebuffer config for pfWindow is broken under linux w/
the nvidia 23.13/4 drivers on geforce3 hardware. how does it look like?
we're using pfPipeWindow::setFBConfigAttr() for initially setting and later
pfPipeWindow::chooseFBConfig() for redefining a certain set of attributes.
as this was originally developed under irix there are things like multisampling
and stencil buffer requested. when setting the framebuffer attributes we also
specify our own config function that tries to reduce or switch off features
from the attribute set until a valid pfFBConfig is returned by
pfPipeWindow::chooseFBConfig(). this actually works under irix and linux w/
the firegl drivers (current: 1.9.11) and the nvidia drivers up to 15.xx.
with the 23.13/4 drivers requesting f.ex. PFFB_RGBA and PFFB_SAMPLES,1
returns a non-null pointer from pfPipeWindow::chooseFBConfig(). when actually
calling open() on the pfPipeWindow pointer the gfx system looks up, i.e. the
x server freezes. remote login is possible but calling reboot on a command
line doesn't succeed. for any practical purpose the system has crashed!

i've attached a slightly modified simple.C for people to play around w/,
but beware of the consequences.

question: should i file a bugreport w/ sgi?

any comments, suggestions are welcome.

[hw: various pc systems (single and dual cpu), geforce3
  sw: redhat linux 7.2, xfree86 4.1, nividia 23.13/4, pf2.5.0
  additional info on request]

        j.

ps.: what happened to the semaphore problem from

[http://oss.sgi.com/projects/performer/mail/info-performer/perf-01-12/0019.html]?

        j.

-- 
+------------------------------------+--------------------------------------+
| jan p. springer                    | jsd++at++igroup.org                       |
| computer science, buw.media.vrsys  | jan.springer++at++medien.uni-weimar.de    |
+------------------------------------+--------------------------------------+

// // Copyright 1995, Silicon Graphics, Inc. // ALL RIGHTS RESERVED // // This source code ("Source Code") was originally derived from a // code base owned by Silicon Graphics, Inc. ("SGI") // // LICENSE: SGI grants the user ("Licensee") permission to reproduce, // distribute, and create derivative works from this Source Code, // provided that: (1) the user reproduces this entire notice within // both source and binary format redistributions and any accompanying // materials such as documentation in printed or electronic format; // (2) the Source Code is not to be used, or ported or modified for // use, except in conjunction with OpenGL Performer; and (3) the // names of Silicon Graphics, Inc. and SGI may not be used in any // advertising or publicity relating to the Source Code without the // prior written permission of SGI. No further license or permission // may be inferred or deemed or construed to exist with regard to the // Source Code or the code base of which it forms a part. All rights // not expressly granted are reserved. // // This Source Code is provided to Licensee AS IS, without any // warranty of any kind, either express, implied, or statutory, // including, but not limited to, any warranty that the Source Code // will conform to specifications, any implied warranties of // merchantability, fitness for a particular purpose, and freedom // from infringement, and any warranty that the documentation will // conform to the program, or any warranty that the Source Code will // be error free. // // IN NO EVENT WILL SGI BE LIABLE FOR ANY DAMAGES, INCLUDING, BUT NOT // LIMITED TO DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES, // ARISING OUT OF, RESULTING FROM, OR IN ANY WAY CONNECTED WITH THE // SOURCE CODE, WHETHER OR NOT BASED UPON WARRANTY, CONTRACT, TORT OR // OTHERWISE, WHETHER OR NOT INJURY WAS SUSTAINED BY PERSONS OR // PROPERTY OR OTHERWISE, AND WHETHER OR NOT LOSS WAS SUSTAINED FROM, // OR AROSE OUT OF USE OR RESULTS FROM USE OF, OR LACK OF ABILITY TO // USE, THE SOURCE CODE. // // Contact information: Silicon Graphics, Inc., // 1600 Amphitheatre Pkwy, Mountain View, CA 94043, // or: http://www.sgi.com // // // simple.C: simple Performer program for programmer's guide // // $Revision: 1.13 $ // $Date: 2000/10/06 21:26:25 $ //

#include <stdlib.h>

#include <Performer/pf/pfChannel.h> #include <Performer/pf/pfLightSource.h> #include <Performer/pf/pfNode.h> #include <Performer/pf/pfScene.h>

#include <Performer/pfutil.h> #include <Performer/pfdu.h>

// // Usage() -- print usage advice and exit. This // procedure is executed in the application process. // static void Usage (void) { pfNotify(PFNFY_FATAL, PFNFY_USAGE, "Usage: simpleC file.ext ...\n"); exit(1); }

static void openWinCB (pfPipeWindow *pw) { pw->open(); pfNotify( PFNFY_INFO, PFNFY_RESOURCE, "openWinCB: using visual id: 0x%x (%d)", pw->getFBConfigId(), pw->getFBConfigId() ); }

int main (int argc, char *argv[]) { float t = 0.0f; if (argc < 2) Usage(); // Initialize Performer pfInit(); pfNotifyLevel( PFNFY_DEBUG );

// Use default multiprocessing mode based on number of // processors. // pfMultiprocess( PFMP_APPCULLDRAW ); // Load all loader DSO's before pfConfig() forks pfdInitConverter(argv[1]);

// initiate multi-processing mode set in pfMultiprocess call // FORKs for Performer processes, CULL and DRAW, etc. happen here. // pfConfig(); // Append to Performer search path, PFPATH, files in // /usr/share/Performer/data */ pfFilePath(".:/usr/share/Performer/data"); pfNode *root = pfdLoadFile(argv[1]); if (root == NULL) { pfExit(); exit(-1); } // Attach loaded file to a new pfScene pfScene *scene = new pfScene; scene->addChild(root); // Create a pfLightSource and attach it to scene scene->addChild(new pfLightSource);

int fbattr[20];

fbattr[0] = PFFB_DEPTH_SIZE; fbattr[1] = 1; fbattr[2] = PFFB_STENCIL_SIZE; fbattr[3] = 1; fbattr[4] = PFFB_RGBA; fbattr[5] = PFFB_DOUBLEBUFFER; #if 0 // enable this and the nvidia 23.13/4 drivers crash your system fbattr[6] = PFFB_SAMPLES; fbattr[7] = 1; fbattr[8] = None; #else fbattr[6] = None; #endif // Configure and open GL window pfPipe *p = pfGetPipe(0); pfPipeWindow *pw = new pfPipeWindow(p); pw->setWinType(PFPWIN_TYPE_X); pw->setName("OpenGL Performer"); pw->setOriginSize(0,0,500,500); pw->setConfigFunc(openWinCB); pw->setFBConfigAttrs(fbattr); pw->config(); // Create and configure a pfChannel. pfChannel *chan = new pfChannel(p); chan->setScene(scene); chan->setFOV(45.0f, 0.0f); // determine extent of scene's geometry pfSphere bsphere; root->getBound(&bsphere); chan->setNearFar(1.0f, 10.0f * bsphere.radius); // Simulate for twenty seconds. while (t < 5.0f) { pfCoord view; float s, c; // Go to sleep until next frame time. pfSync(); // Initiate cull/draw for this frame. pfFrame(); // Compute new view position. t = pfGetTime(); pfSinCos(45.0f*t, &s, &c); view.hpr.set(45.0f*t, -10.0f, 0); view.xyz.set(2.0f * bsphere.radius * s, -2.0f * bsphere.radius *c, 0.5f * bsphere.radius); chan->setView(view.xyz, view.hpr); } // Terminate parallel processes and exit pfExit(); return 0; }


New Message Reply Date view Thread view Subject view Author view

This archive was generated by hypermail 2b29 : Thu Feb 07 2002 - 14:53:10 PST

This message has been cleansed for anti-spam protection. Replace '++at++' in any mail addresses with the '@' symbol.