comparison vidix/drivers/nvidia_vid.c @ 11160:b5a3ef555164

double buffering fix for cards > NV04 && windows colorkeying fix
author faust3
date Fri, 17 Oct 2003 11:26:36 +0000
parents 8ac4d769a1fb
children e1c3f72da3d1
comparison
equal deleted inserted replaced
11159:8ac4d769a1fb 11160:b5a3ef555164
414 r = (chromakey & 0x00FF0000) >> 16; 414 r = (chromakey & 0x00FF0000) >> 16;
415 g = (chromakey & 0x0000FF00) >> 8; 415 g = (chromakey & 0x0000FF00) >> 8;
416 b = chromakey & 0x000000FF; 416 b = chromakey & 0x000000FF;
417 switch (info->depth) { 417 switch (info->depth) {
418 case 15: 418 case 15:
419 key = ((r >> 3) << 10) | ((g >> 3) << 5) | ((b >> 3)) | 0x00008000; 419 key = ((r >> 3) << 10) | ((g >> 3) << 5) | ((b >> 3));
420 #ifndef WIN32
421 key = key | 0x00008000;
422 #endif
420 break; 423 break;
421 case 16: // XXX unchecked 424 case 16: // XXX unchecked
422 key = ((r >> 3) << 11) | ((g >> 2) << 5) | ((b >> 3)) | 0x00008000; 425 key = ((r >> 3) << 11) | ((g >> 2) << 5) | ((b >> 3));
423 break; 426 #ifndef WIN32
424 case 24: // XXX unchecked, maybe swap order of masking 427 key = key | 0x00008000;
428 #endif
429 break;
430 case 24: // XXX unchecked, maybe swap order of masking - FIXME Can the card be in 24 bit mode anyway?
425 key = (chromakey & 0x00FFFFFF) | 0x00800000; 431 key = (chromakey & 0x00FFFFFF) | 0x00800000;
426 break; 432 break;
427 case 32: 433 case 32:
428 key = chromakey | 0x80000000; 434 key = chromakey;
435 #ifndef WIN32
436 key = key | 0x80000000;
437 #endif
429 break; 438 break;
430 } 439 }
431 //printf("[nvidia_vid] depth=%d %08X \n", info->depth, chromakey); 440 //printf("[nvidia_vid] depth=%d %08X \n", info->depth, chromakey);
432 switch (info->chip.arch) { 441 switch (info->chip.arch) {
433 case NV_ARCH_10: 442 case NV_ARCH_10:
513 case NV_ARCH_10: 522 case NV_ARCH_10:
514 case NV_ARCH_20: 523 case NV_ARCH_20:
515 case NV_ARCH_30: 524 case NV_ARCH_30:
516 525
517 /* NV_PVIDEO_BASE */ 526 /* NV_PVIDEO_BASE */
518 VID_WR32 (info->chip.PVIDEO, 0x900 + 0, base); 527 VID_WR32 (info->chip.PVIDEO, 0x900 + 0, base + offset);
519 //VID_WR32 (info->chip.PVIDEO, 0x900 + 4, base); 528 //VID_WR32 (info->chip.PVIDEO, 0x900 + 4, base);
520 /* NV_PVIDEO_LIMIT */ 529 /* NV_PVIDEO_LIMIT */
521 VID_WR32 (info->chip.PVIDEO, 0x908 + 0, base + size - 1); 530 VID_WR32 (info->chip.PVIDEO, 0x908 + 0, base + offset + size - 1);
522 //VID_WR32 (info->chip.PVIDEO, 0x908 + 4, base + size - 1); 531 //VID_WR32 (info->chip.PVIDEO, 0x908 + 4, base + size - 1);
523 532
524 /* extra code for NV20 && NV30 architectures */ 533 /* extra code for NV20 && NV30 architectures */
525 if (info->chip.arch == NV_ARCH_20 || info->chip.arch == NV_ARCH_30) { 534 if (info->chip.arch == NV_ARCH_20 || info->chip.arch == NV_ARCH_30) {
526 VID_WR32 (info->chip.PVIDEO, 0x800 + 0, base); 535 VID_WR32 (info->chip.PVIDEO, 0x800 + 0, base + offset);
527 //VID_WR32 (info->chip.PVIDEO, 0x800 + 4, base); 536 //VID_WR32 (info->chip.PVIDEO, 0x800 + 4, base);
528 VID_WR32 (info->chip.PVIDEO, 0x808 + 0, base + size - 1); 537 VID_WR32 (info->chip.PVIDEO, 0x808 + 0, base + offset + size - 1);
529 //VID_WR32 (info->chip.PVIDEO, 0x808 + 4, base + size - 1); 538 //VID_WR32 (info->chip.PVIDEO, 0x808 + 4, base + size - 1);
530 } 539 }
531 540
532 /* NV_PVIDEO_LUMINANCE */ 541 /* NV_PVIDEO_LUMINANCE */
533 VID_WR32 (info->chip.PVIDEO, 0x910 + 0, 0x00001000); 542 VID_WR32 (info->chip.PVIDEO, 0x910 + 0, 0x00001000);
535 /* NV_PVIDEO_CHROMINANCE */ 544 /* NV_PVIDEO_CHROMINANCE */
536 VID_WR32 (info->chip.PVIDEO, 0x918 + 0, 0x00001000); 545 VID_WR32 (info->chip.PVIDEO, 0x918 + 0, 0x00001000);
537 //VID_WR32 (info->chip.PVIDEO, 0x918 + 4, 0x00001000); 546 //VID_WR32 (info->chip.PVIDEO, 0x918 + 4, 0x00001000);
538 547
539 /* NV_PVIDEO_OFFSET */ 548 /* NV_PVIDEO_OFFSET */
540 VID_WR32 (info->chip.PVIDEO, 0x920 + 0, offset + 0); 549 VID_WR32 (info->chip.PVIDEO, 0x920 + 0, 0x0);
541 //VID_WR32 (info->chip.PVIDEO, 0x920 + 4, offset + pitch); 550 //VID_WR32 (info->chip.PVIDEO, 0x920 + 4, offset + pitch);
542 /* NV_PVIDEO_SIZE_IN */ 551 /* NV_PVIDEO_SIZE_IN */
543 VID_WR32 (info->chip.PVIDEO, 0x928 + 0, ((info->height) << 16) | info->width); 552 VID_WR32 (info->chip.PVIDEO, 0x928 + 0, ((info->height) << 16) | info->width);
544 //VID_WR32 (info->chip.PVIDEO, 0x928 + 4, ((port->org_height/2) << 16) | port->org_width); 553 //VID_WR32 (info->chip.PVIDEO, 0x928 + 4, ((port->org_height/2) << 16) | port->org_width);
545 /* NV_PVIDEO_POINT_IN */ 554 /* NV_PVIDEO_POINT_IN */