Using glutCreateWindow() seeds RNG with predictable value
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
xf86-video-intel |
Fix Released
|
Medium
|
|||
mesa (Ubuntu) |
Fix Released
|
Low
|
Unassigned | ||
xserver-xorg-video-intel (Ubuntu) |
Invalid
|
Undecided
|
Unassigned |
Bug Description
Binary package hint: xserver-
The bug is what it says on the tin.
When glutCreateWindow() is called in the attached OpenGL program, the random number generator appears to be reseeded with a predictable number. This results in predictable output unless srand(time(NULL)) called again.
This appears to be an Intel driver specific bug; when the program was tested on an Nvidia card in a Linux distro running a similar version of freeglut there was no reseeding.
$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 0c)
$ lsb_release -rd
Description: Ubuntu karmic (development branch)
Release: 9.10
$ apt-cache policy xserver-
xserver-
Installed: 2:2.8.1-1ubuntu1
Candidate: 2:2.8.1-1ubuntu1
Version table:
*** 2:2.8.1-1ubuntu1 0
500 http://
100 /var/lib/
ProblemType: Bug
Architecture: amd64
Date: Sun Aug 30 16:43:21 2009
DistroRelease: Ubuntu 9.10
MachineType: Dell Inc. Vostro1510
NonfreeKernelMo
Package: xserver-
PccardctlIdent:
PccardctlStatus:
ProcCmdLine: BOOT_IMAGE=
ProcEnviron:
LANG=en_US.UTF-8
SHELL=/bin/bash
ProcVersionSign
RelatedPackageV
xserver-xorg 1:7.4+3ubuntu5
libgl1-mesa-glx 7.6.0~git200908
libdrm2 2.4.12+
xserver-
xserver-
SourcePackage: xserver-
Uname: Linux 2.6.31-8-generic x86_64
XorgConf: Error: [Errno 2] No such file or directory: '/etc/X11/
dmi.bios.date: 07/10/2008
dmi.bios.vendor: Dell Inc.
dmi.bios.version: A10
dmi.board.name: 0M277C
dmi.board.vendor: Dell Inc.
dmi.chassis.type: 8
dmi.chassis.vendor: Dell Inc.
dmi.chassis.
dmi.modalias: dmi:bvnDellInc.
dmi.product.name: Vostro1510
dmi.product.
dmi.sys.vendor: Dell Inc.
fglrx: Not loaded
system:
distro: Ubuntu
architecture: x86_64kernel: 2.6.31-8-generic
Related branches
Changed in xserver-xorg-video-intel (Ubuntu): | |
status: | New → Confirmed |
tags: | added: 965gm |
Changed in xserver-xorg-video-intel: | |
status: | Unknown → Confirmed |
Changed in xserver-xorg-video-intel: | |
status: | Confirmed → Fix Released |
Changed in xserver-xorg-video-intel: | |
importance: | Unknown → Undecided |
status: | Fix Released → New |
status: | New → Invalid |
Changed in xserver-xorg-video-intel: | |
importance: | Undecided → Unknown |
status: | Invalid → Unknown |
Changed in xserver-xorg-video-intel (Ubuntu): | |
status: | Fix Committed → Invalid |
Changed in xserver-xorg-video-intel: | |
status: | Unknown → Fix Released |
Changed in xserver-xorg-video-intel: | |
importance: | Unknown → Medium |
Changed in xserver-xorg-video-intel: | |
importance: | Medium → Unknown |
Changed in xserver-xorg-video-intel: | |
importance: | Unknown → Medium |
Thank you for including a test program that demonstrates the problem.
I think the bug probably is in the intel specific part of mesa. Using your program I traced the glutCreateWindow call and added lines like window. c) calls fgCreateWindow (in src/freeglut_ structure. c) which calls fgOpenWindow (in src/freeglut_ window. c) which again calls glXMakeCurrent like this:
printf("Random number 11 (fgOpenWindow): %i\n",rand());
in relevant places in the source code of the freeglut source package. glutCreateWindow (in src/freeglut_
glXMakeCurrent(
fgDisplay. Display,
window- >Window. Handle,
window- >Window. Context
);
Before the glXMakeCurrent call, rand() returns a random number, while after the call it returns the same every time.