Author: evb Date: Tue Dec 14 04:10:14 2010 New Revision: 50029
URL: http://svn.reactos.org/svn/reactos?rev=50029&view=rev Log: - Mode detect look for 4BPP, planar, graphics < 0x800 mode now - Add GDIINFO from NT4 VGA DDK sample driver - Set 4BPP prefer DIB format - No graphics caps set for VGA driver - Put static palette/color buffer for when VGA IOCTL send later - Convert almost done, bInitSURF is last
Modified: trunk/reactos/drivers/video/displays/vga_new/screen.c
Modified: trunk/reactos/drivers/video/displays/vga_new/screen.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/video/displays/vga_... ============================================================================== --- trunk/reactos/drivers/video/displays/vga_new/screen.c [iso-8859-1] (original) +++ trunk/reactos/drivers/video/displays/vga_new/screen.c [iso-8859-1] Tue Dec 14 04:10:14 2010 @@ -16,7 +16,9 @@ // on information passed back from the miniport driver.
const DEVINFO gDevInfoFrameBuffer = { - ( GCAPS_OPAQUERECT +// eVb: 2.1 [VGARISC CHANGE] - No capabilities + ( 0 +// eVb: 2.1 [END] // eVb: 2.8 [DDK CHANGE] - No dithering support // eVb: 2.8 [END] ), /* Graphics capabilities */ @@ -24,7 +26,9 @@ HELVE_LOGFONT, /* ANSI variable font description */ COURI_LOGFONT, /* ANSI fixed font description */ 0, /* Count of device fonts */ - 0, /* Preferred DIB format */ +// eVb: 2.2 [VGARISC CHANGE] - DIB format is 4BPP + BMF_4BPP, /* Preferred DIB format */ +// eVb: 2.2 [END] // eVb: 2.9 [DDK CHANGE] - No dithering support 0, /* Width of color dither */ 0, /* Height of color dither */ @@ -32,6 +36,127 @@ 0 /* Default palette to use for this device */ };
+// eVb: 2.3 [VGARISC CHANGE] - Add VGA structures from NT4 DDK Sample VGA driver +/******************************Public*Data*Struct*************************\ +* This contains the GDIINFO structure that contains the device capabilities +* which are passed to the NT GDI engine during dhpdevEnablePDEV. +* +**************************************************************************/ + +GDIINFO gaulCap = { + + GDI_DRIVER_VERSION, + DT_RASDISPLAY, // ulTechnology + 0, // ulHorzSize + 0, // ulVertSize + 0, // ulHorzRes (filled in at initialization) + 0, // ulVertRes (filled in at initialization) + 4, // cBitsPixel + 1, // cPlanes + 16, // ulNumColors + 0, // flRaster (DDI reserved field) + + 0, // ulLogPixelsX (filled in at initialization) + 0, // ulLogPixelsY (filled in at initialization) + + TC_RA_ABLE | TC_SCROLLBLT, // flTextCaps + + 6, // ulDACRed + 6, // ulDACGree + 6, // ulDACBlue + + 0x0024, // ulAspectX (one-to-one aspect ratio) + 0x0024, // ulAspectY + 0x0033, // ulAspectXY + + 1, // xStyleStep + 1, // yStyleSte; + 3, // denStyleStep + + { 0, 0 }, // ptlPhysOffset + { 0, 0 }, // szlPhysSize + + 0, // ulNumPalReg (win3.1 16 color drivers say 0 too) + +// These fields are for halftone initialization. + + { // ciDevice, ColorInfo + { 6700, 3300, 0 }, // Red + { 2100, 7100, 0 }, // Green + { 1400, 800, 0 }, // Blue + { 1750, 3950, 0 }, // Cyan + { 4050, 2050, 0 }, // Magenta + { 4400, 5200, 0 }, // Yellow + { 3127, 3290, 0 }, // AlignmentWhite + 20000, // RedGamma + 20000, // GreenGamma + 20000, // BlueGamma + 0, 0, 0, 0, 0, 0 + }, + + 0, // ulDevicePelsDPI (filled in at initialization) + PRIMARY_ORDER_CBA, // ulPrimaryOrder + HT_PATSIZE_4x4_M, // ulHTPatternSize + HT_FORMAT_4BPP_IRGB, // ulHTOutputFormat + HT_FLAG_ADDITIVE_PRIMS, // flHTFlags + + 0, // ulVRefresh +// eVb: 2.4 [VGARISC DDK CHANGE] - Use 1 bit alignment, not 8 + 1, // ulBltAlignment (preferred window alignment +// eVb: 2.4 [END] + // for fast-text routines) + 0, // ulPanningHorzRes + 0, // ulPanningVertRes +}; + +/******************************Module*Header*******************************\ +* Color tables +**************************************************************************/ + +// Values for the internal, EGA-compatible palette. + +static WORD PaletteBuffer[] = { + + 16, // 16 entries + 0, // start with first palette register + +// On the VGA, the palette contains indices into the array of color DACs. +// Since we can program the DACs as we please, we'll just put all the indices +// down at the beginning of the DAC array (that is, pass pixel values through +// the internal palette unchanged). + + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 +}; + + +// These are the values for the first 16 DAC registers, the only ones we'll +// work with. These correspond to the RGB colors (6 bits for each primary, with +// the fourth entry unused) for pixel values 0-15. + +static BYTE ColorBuffer[] = { + + 16, // 16 entries + 0, + 0, + 0, // start with first palette register + 0x00, 0x00, 0x00, 0x00, // black + 0x2A, 0x00, 0x15, 0x00, // red + 0x00, 0x2A, 0x15, 0x00, // green + 0x2A, 0x2A, 0x15, 0x00, // mustard/brown + 0x00, 0x00, 0x2A, 0x00, // blue + 0x2A, 0x15, 0x2A, 0x00, // magenta + 0x15, 0x2A, 0x2A, 0x00, // ScanLinesan + 0x21, 0x22, 0x23, 0x00, // dark gray 2A + 0x30, 0x31, 0x32, 0x00, // light gray 39 + 0x3F, 0x00, 0x00, 0x00, // bright red + 0x00, 0x3F, 0x00, 0x00, // bright green + 0x3F, 0x3F, 0x00, 0x00, // bright yellow + 0x00, 0x00, 0x3F, 0x00, // bright blue + 0x3F, 0x00, 0x3F, 0x00, // bright magenta + 0x00, 0x3F, 0x3F, 0x00, // bright ScanLinesan + 0x3F, 0x3F, 0x3F, 0x00 // bright white +}; +// eVb: 2.3 [END] /******************************Public*Routine******************************\ * bInitSURF * @@ -288,13 +413,18 @@ ppdev->ulMode = pVideoModeSelected->ModeIndex; ppdev->cxScreen = pVideoModeSelected->VisScreenWidth; ppdev->cyScreen = pVideoModeSelected->VisScreenHeight; + ppdev->lDeltaScreen = pVideoModeSelected->ScreenStride; +// eVb: 2.8 [VGARISC CHANGE] - Extra fields not required on VGA, start with defaults +#if 0 ppdev->ulBitCount = pVideoModeSelected->BitsPerPlane * pVideoModeSelected->NumberOfPlanes; - ppdev->lDeltaScreen = pVideoModeSelected->ScreenStride; - ppdev->flRed = pVideoModeSelected->RedMask; ppdev->flGreen = pVideoModeSelected->GreenMask; ppdev->flBlue = pVideoModeSelected->BlueMask; +#else + *pGdiInfo = gaulCap; +#endif +// eVb: 2.8 [END]
pGdiInfo->ulVersion = GDI_DRIVER_VERSION; @@ -316,6 +446,8 @@ pGdiInfo->ulLogPixelsX = pDevMode->dmLogPixels; pGdiInfo->ulLogPixelsY = pDevMode->dmLogPixels;
+// eVb: 2.9 [VGARISC CHANGE] - Extra fields not required on VGA +#if 0 #ifdef MIPS if (ppdev->ulBitCount == 8) pGdiInfo->flTextCaps = (TC_RA_ABLE | TC_SCROLLBLT); @@ -324,11 +456,15 @@ pGdiInfo->flTextCaps = TC_RA_ABLE;
pGdiInfo->flRaster = 0; // flRaster is reserved by DDI +#endif +// eVb: 2.9 [END]
pGdiInfo->ulDACRed = pVideoModeSelected->NumberRedBits; pGdiInfo->ulDACGreen = pVideoModeSelected->NumberGreenBits; pGdiInfo->ulDACBlue = pVideoModeSelected->NumberBlueBits;
+// eVb: 2.7 [VGARISC CHANGE] - Extra fields not required on VGA +#if 0 pGdiInfo->ulAspectX = 0x24; // One-to-one aspect ratio pGdiInfo->ulAspectY = 0x24; pGdiInfo->ulAspectXY = 0x33; @@ -439,11 +575,15 @@ pGdiInfo->ulHTPatternSize = HT_PATSIZE_4x4_M;
pGdiInfo->flHTFlags = HT_FLAG_ADDITIVE_PRIMS; +// eVb: 2.7 [END] +#endif
// Fill in the basic devinfo structure
*pDevInfo = gDevInfoFrameBuffer;
+// eVb: 2.6 [VGARISC CHANGE] - Use defaults in gaulCap for GDI Info +#if 0 // Fill in the rest of the devinfo and GdiInfo structures.
if (ppdev->ulBitCount == 8) @@ -483,6 +623,8 @@ pDevInfo->iDitherFormat = BMF_32BPP; } } +#endif +// eVb: 2.6 [END]
EngFreeMem(pVideoBuffer);
@@ -575,22 +717,19 @@ ulTemp = modes.NumModes; pVideoTemp = *modeInformation;
- // - // Mode is rejected if it is not one plane, or not graphics, or is not - // one of 8, 16 or 32 bits per pel. +// eVb: 2.5 [VGARISC CHANGE] - Add correct mode checks for VGA + // + // Mode is rejected if it is not 4 planes, or not graphics, or is not + // one of 1 bits per pel. //
while (ulTemp--) { - if ((pVideoTemp->NumberOfPlanes != 1 ) || + if ((pVideoTemp->NumberOfPlanes != 4 ) || !(pVideoTemp->AttributeFlags & VIDEO_MODE_GRAPHICS) || -// eVb: 2.6 [DDK CHANGE] - Do not process banked video modes - (pVideoTemp->AttributeFlags & VIDEO_MODE_BANKED) || -// eVb: 2.6 [END] - ((pVideoTemp->BitsPerPlane != 8) && - (pVideoTemp->BitsPerPlane != 16) && - (pVideoTemp->BitsPerPlane != 24) && - (pVideoTemp->BitsPerPlane != 32))) + ((pVideoTemp->BitsPerPlane != 1) || + (pVideoTemp->VisScreenWidth > 800))) +// eVb: 2.5 [END] { pVideoTemp->Length = 0; }