示例#1
0
文件: vfb.c 项目: bojoer/advancemame
static adv_error fb_detect(void)
{
	struct fb_var_screeninfo var;

	/* test bit depth */
	log_std(("video:fb: test bits depths\n"));
	if (fb_test(&var, 25175200, 640, 656, 752, 800, 480, 490, 492, 525, 0, 0, 1, 1, MODE_FLAGS_INDEX_PALETTE8) != 0
		|| (var.bits_per_pixel != 8)) {
		log_std(("video:fb: disable palette8 bits modes, not supported\n"));
		fb_state.flags &= ~VIDEO_DRIVER_FLAGS_MODE_PALETTE8;
	}

	if (fb_test(&var, 25175200, 640, 656, 752, 800, 480, 490, 492, 525, 0, 0, 1, 1, MODE_FLAGS_INDEX_BGR15) != 0
		|| (var.bits_per_pixel != 16 || var.green.length != 5)) {
		log_std(("video:fb: disable bgr15 bits modes, not supported\n"));
		fb_state.flags &= ~VIDEO_DRIVER_FLAGS_MODE_BGR15;
	}

	if (fb_test(&var, 25175200, 640, 656, 752, 800, 480, 490, 492, 525, 0, 0, 1, 1, MODE_FLAGS_INDEX_BGR16) != 0
		|| (var.bits_per_pixel != 16 || var.green.length != 6)) {
		log_std(("video:fb: disable bgr16 bits modes, not supported\n"));
		fb_state.flags &= ~VIDEO_DRIVER_FLAGS_MODE_BGR16;
	}

	if (fb_test(&var, 25175200, 640, 656, 752, 800, 480, 490, 492, 525, 0, 0, 1, 1, MODE_FLAGS_INDEX_BGR24) != 0
		|| (var.bits_per_pixel != 24 || var.green.length != 8)) {
		log_std(("video:fb: disable bgr24 bits modes, not supported\n"));
		fb_state.flags &= ~VIDEO_DRIVER_FLAGS_MODE_BGR24;
	}

	if (fb_test(&var, 25175200, 640, 656, 752, 800, 480, 490, 492, 525, 0, 0, 1, 1, MODE_FLAGS_INDEX_BGR32) != 0
		|| (var.bits_per_pixel != 32 || var.green.length != 8)) {
		log_std(("video:fb: disable bgr32 bits modes, not supported\n"));
		fb_state.flags &= ~VIDEO_DRIVER_FLAGS_MODE_BGR32;
	}

	/* test interlace modes */
	log_std(("video:fb: test interlace modes\n"));
	if (fb_test_auto(&var, 40280300, 1024, 1048, 1200, 1280, 768, 784, 787, 840, 0, 1, 1, 1) != 0
		|| (var.vmode & FB_VMODE_INTERLACED) == 0) {
		log_std(("video:fb: disable interlaced modes, not supported\n"));
		fb_state.flags &= ~VIDEO_DRIVER_FLAGS_PROGRAMMABLE_INTERLACE;
	}

	if (strstr(fb_state.fixinfo.id, "GeForce")!=0) {
		log_std(("video:fb: disable interlaced modes, not supported by the GeForce hardware\n"));
		/* the GeForce hardware doesn't support interlace */
		fb_state.flags &= ~VIDEO_DRIVER_FLAGS_PROGRAMMABLE_INTERLACE;
	}

	/* test doublescan modes */
	log_std(("video:fb: test doublescan modes\n"));
	if (fb_test_auto(&var, 12676000, 320, 328, 376, 400, 240, 245, 246, 262, 1, 0, 1, 1) != 0
		|| (var.vmode & FB_VMODE_DOUBLE) == 0) {
		log_std(("video:fb: disable doublescan modes, not supported\n"));
		fb_state.flags &= ~VIDEO_DRIVER_FLAGS_PROGRAMMABLE_DOUBLESCAN;
	}

	if (strstr(fb_state.fixinfo.id, "nVidia")!=0) {
		log_std(("video:fb: disable doublescan modes, not supported by the nVidia driver\n"));
		/* the Linux 2.4.20/2.4.21/2.4.22/2.4.23/2.4.24/2.4.25 driver doesn't support doublescan */
		fb_state.flags &= ~VIDEO_DRIVER_FLAGS_PROGRAMMABLE_DOUBLESCAN;
	}

	return 0;
}
示例#2
0
int main(int argc, const char *argv[])
{
	fb_test();
	return 0;
}