Browse Source

support more modes, added -f cmd line option

tags/mesa_7_1_rc1
Brian 18 years ago
parent
commit
e8e5d9effe
1 changed files with 90 additions and 15 deletions
  1. 90
    15
      progs/fbdev/glfbdevtest.c

+ 90
- 15
progs/fbdev/glfbdevtest.c View File

@@ -23,11 +23,21 @@
#include <GL/glfbdev.h>
#include <math.h>

#define DEFAULT_DEPTH 8

/**
* Choose one of these modes
*/
/*static const int XRes = 1280, YRes = 1024, Hz = 75;*/
/*static const int XRes = 1280, YRes = 1024, Hz = 70;*/
/*static const int XRes = 1280, YRes = 1024, Hz = 60;*/
static const int XRes = 1024, YRes = 768, Hz = 70;

static int DesiredDepth = 32;

static int NumFrames = 100;

static struct fb_fix_screeninfo FixedInfo;
static struct fb_var_screeninfo VarInfo, OrigVarInfo;
static int DesiredDepth = 0;
static int OriginalVT = -1;
static int ConsoleFD = -1;
static int FrameBufferFD = -1;
@@ -227,7 +237,6 @@ initialize_fbdev( void )
VarInfo = OrigVarInfo;

/* set the depth, resolution, etc */
DesiredDepth = 32;
if (DesiredDepth)
VarInfo.bits_per_pixel = DesiredDepth;

@@ -251,16 +260,60 @@ initialize_fbdev( void )
VarInfo.blue.length = 8;
VarInfo.transp.length = 8;
}
/* timing values taken from /etc/fb.modes (1280x1024 @ 75Hz) */
VarInfo.xres_virtual = VarInfo.xres = 1280;
VarInfo.yres_virtual = VarInfo.yres = 1024;
VarInfo.pixclock = 7408;
VarInfo.left_margin = 248;
VarInfo.right_margin = 16;
VarInfo.upper_margin = 38;
VarInfo.lower_margin = 1;
VarInfo.hsync_len = 144;
VarInfo.vsync_len = 3;

/* timing values taken from /etc/fb.modes */
if (XRes == 1280 && YRes == 1024) {
VarInfo.xres_virtual = VarInfo.xres = XRes;
VarInfo.yres_virtual = VarInfo.yres = YRes;
if (Hz == 75) {
VarInfo.pixclock = 7408;
VarInfo.left_margin = 248;
VarInfo.right_margin = 16;
VarInfo.upper_margin = 38;
VarInfo.lower_margin = 1;
VarInfo.hsync_len = 144;
VarInfo.vsync_len = 3;
}
else if (Hz == 70) {
VarInfo.pixclock = 7937;
VarInfo.left_margin = 216;
VarInfo.right_margin = 80;
VarInfo.upper_margin = 36;
VarInfo.lower_margin = 1;
VarInfo.hsync_len = 112;
VarInfo.vsync_len = 5;
}
else if (Hz == 60) {
VarInfo.pixclock = 9260;
VarInfo.left_margin = 248;
VarInfo.right_margin = 48;
VarInfo.upper_margin = 38;
VarInfo.lower_margin = 1;
VarInfo.hsync_len = 112;
VarInfo.vsync_len = 3;
}
else {
fprintf(stderr, "invalid rate for 1280x1024\n");
exit(1);
}
}
else if (XRes == 1024 && YRes == 768 && Hz == 70) {
VarInfo.xres_virtual = VarInfo.xres = XRes;
VarInfo.yres_virtual = VarInfo.yres = YRes;
if (Hz == 70) {
VarInfo.pixclock = 13334;
VarInfo.left_margin = 144;
VarInfo.right_margin = 24;
VarInfo.upper_margin = 29;
VarInfo.lower_margin = 3;
VarInfo.hsync_len = 136;
VarInfo.vsync_len = 6;
}
else {
fprintf(stderr, "invalid rate for 1024x768\n");
exit(1);
}
}

VarInfo.xoffset = 0;
VarInfo.yoffset = 0;
@@ -338,7 +391,7 @@ initialize_fbdev( void )
printf("MMIOAddress = %p\n", MMIOAddress);

/* try out some simple MMIO register reads */
if (1)
if (0)
{
typedef unsigned int CARD32;
typedef unsigned char CARD8;
@@ -452,6 +505,7 @@ gltest( void )
GLFBDevVisualPtr vis;
int bytes, r, g, b, a;
float ang;
int i;

printf("GLFBDEV_VENDOR = %s\n", glFBDevGetString(GLFBDEV_VENDOR));
printf("GLFBDEV_VERSION = %s\n", glFBDevGetString(GLFBDEV_VERSION));
@@ -491,13 +545,17 @@ gltest( void )
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);

for (ang = 0; ang <= 180; ang += 15) {
printf("Drawing %d frames...\n", NumFrames);

ang = 0.0;
for (i = 0; i < NumFrames; i++) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(ang, 1, 0, 0);
doughnut(1, 3, 40, 20);
glPopMatrix();
glFBDevSwapBuffers(buf);
ang += 15.0;
}

/* clean up */
@@ -510,12 +568,29 @@ gltest( void )
}


static void
parse_args(int argc, char *argv[])
{
int i;

for (i = 1; i < argc; i++) {
if (strcmp(argv[i], "-f") == 0) {
NumFrames = atoi(argv[i+1]);
i++;
}
}
}


int
main( int argc, char *argv[] )
{
signal(SIGUSR1, signal_handler); /* exit if someone tries a vt switch */
signal(SIGSEGV, signal_handler); /* catch segfaults */

parse_args(argc, argv);

printf("Setting mode to %d x %d @ %d Hz, %d bpp\n", XRes, YRes, Hz, DesiredDepth);
initialize_fbdev();
gltest();
shutdown_fbdev();

Loading…
Cancel
Save