[ros-diffs] [greatlrd] 49971: Start cleanup the old dx code for 2d add DdMapMemory not yet finish. The code are not mapped out yet. Plan to add hw support for DdLock and DdUnlock

greatlrd at svn.reactos.org greatlrd at svn.reactos.org
Tue Dec 7 15:38:52 UTC 2010


Author: greatlrd
Date: Tue Dec  7 15:38:51 2010
New Revision: 49971

URL: http://svn.reactos.org/svn/reactos?rev=49971&view=rev
Log:
Start cleanup the old dx code for 2d
add DdMapMemory not yet finish.
The code are not mapped out yet.
Plan to add hw support for DdLock and DdUnlock

Modified:
    branches/reactx/reactos/drivers/video/displays/framebuf/dd.c
    branches/reactx/reactos/drivers/video/displays/framebuf/ddenable.c
    branches/reactx/reactos/drivers/video/displays/framebuf/enable.c
    branches/reactx/reactos/drivers/video/displays/framebuf/framebuf.h
    branches/reactx/reactos/drivers/video/displays/framebuf/framebuf.rbuild

Modified: branches/reactx/reactos/drivers/video/displays/framebuf/dd.c
URL: http://svn.reactos.org/svn/reactos/branches/reactx/reactos/drivers/video/displays/framebuf/dd.c?rev=49971&r1=49970&r2=49971&view=diff
==============================================================================
--- branches/reactx/reactos/drivers/video/displays/framebuf/dd.c [iso-8859-1] (original)
+++ branches/reactx/reactos/drivers/video/displays/framebuf/dd.c [iso-8859-1] Tue Dec  7 15:38:51 2010
@@ -24,93 +24,169 @@
 
 
 DWORD CALLBACK
-DdCanCreateSurface(LPDDHAL_CANCREATESURFACEDATA pccsd)
+DdCanCreateSurface( LPDDHAL_CANCREATESURFACEDATA pccsd)
 {
+    /* We do not needit if we need it here it is 
+       PPDEV ppdev=(PPDEV)pccsd->lpDD->dhpdev;
+    */
 
-	 /* We do not support 3d buffer so we fail here */
-	 if ((pccsd->lpDDSurfaceDesc->ddsCaps.dwCaps & DDSCAPS_ZBUFFER) &&
-		(pccsd->lpDDSurfaceDesc->ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY))
-	 {
-		pccsd->ddRVal = DDERR_INVALIDPIXELFORMAT;
-        return DDHAL_DRIVER_HANDLED;
-	 }
-
-
-	 /* Check if another pixel format or not, we fail for now */
-	 if (pccsd->bIsDifferentPixelFormat)
-     {
-		/* check the fourcc diffent FOURCC, but we only support BMP for now */
-		//if(pccsd->lpDDSurfaceDesc->ddpfPixelFormat.dwFlags & DDPF_FOURCC)
-        //{
-		//	/* We do not support other pixel format */
-		//	switch (pccsd->lpDDSurfaceDesc->ddpfPixelFormat.dwFourCC)
-		//	{
-		//		default:
-		//			pccsd->ddRVal = DDERR_INVALIDPIXELFORMAT;
-		//			return DDHAL_DRIVER_HANDLED;
-		//	}
-		//}
-		// /* check the texture support, we do not support testure for now */
-		//else if((pccsd->lpDDSurfaceDesc->ddsCaps.dwCaps & DDSCAPS_TEXTURE))
-		//{
-		//	/* We do not support texture surface */
-		//	pccsd->ddRVal = DDERR_INVALIDPIXELFORMAT;
-		//	return DDHAL_DRIVER_HANDLED;
-		//}
-
-		/* Fail */
-		pccsd->ddRVal = DDERR_INVALIDPIXELFORMAT;
-		return DDHAL_DRIVER_HANDLED;
+    pccsd->ddRVal = DD_OK;
+    /* We do not support 3d buffer in video ram so we fail here */
+    if (pccsd->lpDDSurfaceDesc->ddsCaps.dwCaps & DDSCAPS_ZBUFFER)
+    {
+        pccsd->ddRVal = DDERR_INVALIDPIXELFORMAT;
     }
 
-	 pccsd->ddRVal = DD_OK;
-	 return DDHAL_DRIVER_HANDLED;
+    /* We do not support texture yet so we fail here */
+    if (pccsd->lplpSList[0]->lpSurfMore->ddsCapsEx.dwCaps2 & DDSCAPS2_TEXTUREMANAGE)
+    {
+        pccsd->ddRVal = DDERR_INVALIDPIXELFORMAT;
+    }
+
+    /* Check if another pixel format or not, we fail for now */
+    if (pccsd->bIsDifferentPixelFormat)
+     {
+        /* We do not support FOUR_CC */
+        pccsd->ddRVal = DDERR_INVALIDPIXELFORMAT;
+    }
+
+    return DDHAL_DRIVER_HANDLED;
 }
 
 DWORD CALLBACK
-DdCreateSurface(PDD_CREATESURFACEDATA pcsd)
+DdCreateSurface( LPDDHAL_CREATESURFACEDATA pcsd )
 {
-	int i;
+    PPDEV pDev = (PPDEV)pcsd->lpDD->dhpdev;
+    DD_SURFACE_LOCAL*   lpSurfaceLocal;
+    DD_SURFACE_GLOBAL*  lpSurfaceGlobal;
+    LPDDSURFACEDESC     lpSurfaceDesc;
 
-	if (pcsd->dwSCnt < 1)
-	{
-		pcsd->ddRVal = DDERR_GENERIC;
-        return DDHAL_DRIVER_NOTHANDLED;
-	}
+    /* Driver DdCreateSurface should only support to create one surface not more that */
+    if (pcsd->dwSCnt != 1)
+    {
+        pcsd->ddRVal = DDERR_GENERIC;
+        return DDHAL_DRIVER_HANDLED;
+    }
+
+    lpSurfaceLocal = pcsd->lplpSList[0];
+    lpSurfaceGlobal = lpSurfaceLocal->lpGbl;
+    lpSurfaceDesc   = pcsd->lpDDSurfaceDesc;
 
 
-	for (i=0; i<(int)pcsd->dwSCnt; i++)
+    /* ReactOS / Windows NT is supposed to guarantee that ddpfSurface.dwSize is valid */
+    if ( lpSurfaceGlobal->ddpfSurface.dwSize == sizeof(DDPIXELFORMAT) )
     {
-		pcsd->lplpSList[i]->lpGbl->lPitch = (DWORD)(pcsd->lplpSList[i]->lpGbl->wWidth *
-			                                (pcsd->lplpSList[i]->lpGbl->ddpfSurface.dwRGBBitCount / 8));
+        pcsd->ddRVal = DDERR_GENERIC;
+        return DDHAL_DRIVER_HANDLED;
+    }
 
-		pcsd->lplpSList[i]->lpGbl->dwBlockSizeX = pcsd->lplpSList[i]->lpGbl->lPitch *
-			                                      (DWORD)(pcsd->lplpSList[i]->lpGbl->wHeight);
+    /* We do not have any private surface data for dx */
+    lpSurfaceGlobal->dwReserved1 = 0;
 
-        pcsd->lplpSList[i]->lpGbl->dwBlockSizeY = 1;
 
-        if ( pcsd->lplpSList[i] ->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE)
+    /* Support diffent Bpp deep */
+    if (lpSurfaceDesc->ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED4)
+    {
+        lpSurfaceGlobal->lPitch = ((lpSurfaceGlobal->wWidth/2) + 31) & ~31;
+    }
+    else if (lpSurfaceDesc->ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8)
+    {
+        lpSurfaceGlobal->lPitch = (lpSurfaceGlobal->wWidth + 31) & ~31;
+    }
+    else
+    {
+        lpSurfaceGlobal->lPitch = lpSurfaceGlobal->wWidth*(lpSurfaceDesc->ddpfPixelFormat.dwRGBBitCount/8);
+    }
+
+    if ( lpSurfaceDesc->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE)
+    {
+        /* We maybe should alloc it with EngAlloc
+           for now we trusting ddraw alloc it        */
+        lpSurfaceGlobal->lpGbl->fpVidMem = 0;
+    }
+    else
+    {
+        /* We maybe should alloc it with EngAlloc
+            for now we trusting ddraw alloc it        */
+
+        lpSurfaceGlobal->lpGbl->fpVidMem = 0;
+
+        if ( (lpSurfaceLocal->lpSurfMore->ddsCapsEx.dwCaps2 & DDSCAPS2_TEXTUREMANAGE) &&
         {
-			/* We maybe should alloc it with EngAlloc
-			   for now we trusting ddraw alloc it        */
-            pcsd->lplpSList[i]->lpGbl->fpVidMem = 0;
+            if (lpSurfaceDesc->dwFlags & DDSD_PIXELFORMAT)
+            {
+                lpSurfaceGlobal->lPitch = ((lpSurfaceDesc->ddpfPixelFormat.dwRGBBitCount * lpSurfaceGlobal->wWidth+31)/32)*4;  //make it DWORD aligned
+                lpSurfaceGlobal->dwUserMemSize = lpSurfaceGlobal->wWidth * lpSurfaceGlobal->wHeight * lpSurfaceGlobal->lPitch;
+                lpSurfaceGlobal->fpVidMem = DDHAL_PLEASEALLOC_USERMEM;
+            }
+        } 
+        else
+        {
+            lpSurfaceGlobal->dwBlockSizeX = lpSurfaceGlobal->wWidth;
+            lpSurfaceGlobal->dwBlockSizeY = lpSurfaceGlobal->wHeight;
+            lpSurfaceGlobal->fpVidMem = DDHAL_PLEASEALLOC_BLOCKSIZE;
+        }
+    }
+
+    pcsd->lpDDSurfaceDesc->lPitch = lpSurfaceGlobal->lPitch;
+    pcsd->lpDDSurfaceDesc->dwFlags |= DDSD_PITCH;
+
+    pcsd->ddRVal = DD_OK;
+    return DDHAL_DRIVER_HANDLED;
+}
+
+DWORD CALLBACK
+DdMapMemory(PDD_MAPMEMORYDATA lpMapMemory)
+{
+    
+    VIDEO_SHARE_MEMORY              ShareMemory;
+    VIDEO_SHARE_MEMORY_INFORMATION  ShareMemoryInformation;
+    DWORD                           ReturnedDataLength;
+    PPDEV                           ppdev = (PPDEV) lpMapMemory->lpDD->dhpdev;
+
+    lpMapMemory->ddRVal = DD_OK;
+
+    if (lpMapMemory->bMap)
+    {
+        ShareMemory.ProcessHandle = lpMapMemory->hProcess;
+        ShareMemory.RequestedVirtualAddress = 0;
+        ShareMemory.ViewOffset = 0;
+        ShareMemory.ViewSize = ppdev->ScreenHeight * ppdev->ScreenDelta;
+
+        if (EngDeviceIoControl(ppdev->hDriver,
+                       IOCTL_VIDEO_SHARE_VIDEO_MEMORY,
+                       &ShareMemory,
+                       sizeof(VIDEO_SHARE_MEMORY),
+                       &ShareMemoryInformation,
+                       sizeof(VIDEO_SHARE_MEMORY_INFORMATION),
+                       &ReturnedDataLength))
+        {
+            lpMapMemory->ddRVal = DDERR_GENERIC;
         }
         else
         {
+            lpMapMemory->fpProcess = (FLATPTR) ShareMemoryInformation.VirtualAddress;
+        }
+    }
+    else
+    {
+        ShareMemory.ProcessHandle           = lpMapMemory->hProcess;
+        ShareMemory.ViewOffset              = 0;
+        ShareMemory.ViewSize                = 0;
+        ShareMemory.RequestedVirtualAddress = (VOID*) lpMapMemory->fpProcess;
 
-			/* We maybe should alloc it with EngAlloc
-			   for now we trusting ddraw alloc it        */
-            pcsd->lplpSList[i]->lpGbl->fpVidMem = DDHAL_PLEASEALLOC_BLOCKSIZE;
+        if (EngDeviceIoControl(ppdev->hDriver,
+                       IOCTL_VIDEO_UNSHARE_VIDEO_MEMORY,
+                       &ShareMemory,
+                       sizeof(VIDEO_SHARE_MEMORY),
+                       NULL,
+                       0,
+                       &ReturnedDataLength))
+        {
+            lpMapMemory->ddRVal = DDERR_GENERIC;
         }
+    }
 
-        pcsd->lpDDSurfaceDesc->lPitch = pcsd->lplpSList[i]->lpGbl->lPitch;
-        pcsd->lpDDSurfaceDesc->dwFlags |= DDSD_PITCH;
-
-    } // for i
-
-
-
-	pcsd->ddRVal = DD_OK;
-    return DDHAL_DRIVER_HANDLED;
+    
+    return(DDHAL_DRIVER_HANDLED);
 }
-

Modified: branches/reactx/reactos/drivers/video/displays/framebuf/ddenable.c
URL: http://svn.reactos.org/svn/reactos/branches/reactx/reactos/drivers/video/displays/framebuf/ddenable.c?rev=49971&r1=49970&r2=49971&view=diff
==============================================================================
--- branches/reactx/reactos/drivers/video/displays/framebuf/ddenable.c [iso-8859-1] (original)
+++ branches/reactx/reactos/drivers/video/displays/framebuf/ddenable.c [iso-8859-1] Tue Dec  7 15:38:51 2010
@@ -36,95 +36,79 @@
   OUT DD_SURFACECALLBACKS  *pSurfaceCallBacks,
   OUT DD_PALETTECALLBACKS  *pPaletteCallBacks)
 {
-	 PPDEV ppdev = (PPDEV)dhpdev;
-
-	 if (ppdev->bDDInitialized == TRUE)
-	 {
-		 return TRUE;
-	 }
-
-	 /* Setup pixel format */
-	 ppdev->ddpfDisplay.dwSize = sizeof( DDPIXELFORMAT );
-     ppdev->ddpfDisplay.dwFourCC = 0;
-
-     ppdev->ddpfDisplay.dwRBitMask = ppdev->RedMask;
-     ppdev->ddpfDisplay.dwGBitMask = ppdev->GreenMask;
-     ppdev->ddpfDisplay.dwBBitMask = ppdev->BlueMask;
-
-     ppdev->ddpfDisplay.dwRGBBitCount=ppdev->BitsPerPixel;
-	 ppdev->ddpfDisplay.dwRGBAlphaBitMask = 0;
-	 ppdev->ddpfDisplay.dwFlags = DDPF_RGB;
-
-	 ppdev->pvmList = NULL;
-
-	 switch(ppdev->iDitherFormat)
-	 {
-		case BMF_8BPP:
-             ppdev->ddpfDisplay.dwFlags  |= DDPF_PALETTEINDEXED8;
-             break;
-
-        case BMF_16BPP:
-             switch(ppdev->RedMask)
-             {
-                case 0x7C00:
-                     ppdev->ddpfDisplay.dwRGBAlphaBitMask = 0x8000;
-                     break;
-
-                default:
-                     break;
-			 }
-             break;
-
-        case BMF_24BPP:
-             break;
-
-        case BMF_32BPP:
-             ppdev->ddpfDisplay.dwRGBAlphaBitMask = 0xff000000;
-             break;
-
-        default:
-           /* FIXME unknown pixel bits */
-			ppdev->ddpfDisplay.dwRGBBitCount=0;
-            break;
-	 }
-
-	 if (pCallBacks !=NULL)
-	 {
-		 memset(pCallBacks,0,sizeof(DD_CALLBACKS));
-
-		 /* FILL pCallBacks with hal stuff */
-         pCallBacks->dwSize = sizeof(DDHAL_DDCALLBACKS);
-         pCallBacks->CanCreateSurface = (PDD_CANCREATESURFACE)DdCanCreateSurface;
-         pCallBacks->CreateSurface =  (PDD_CREATESURFACE)DdCreateSurface;
-
-         /* Fill in the HAL Callback flags */
-         pCallBacks->dwFlags = DDHAL_CB32_CANCREATESURFACE | DDHAL_CB32_CREATESURFACE;
-	 }
-
-	 if (pSurfaceCallBacks !=NULL)
-	 {
-		 memset(pSurfaceCallBacks,0,sizeof(DD_SURFACECALLBACKS));
-
-		 /* FILL pSurfaceCallBacks with hal stuff */
-         // pSurfaceCallBacks.dwSize = sizeof(DDHAL_DDSURFACECALLBACKS);
-         // pSurfaceCallBacks.DestroySurface = DdDestroySurface;
-         // pSurfaceCallBacks.Lock = DdLock;
-         // pSurfaceCallBacks.Blt = DdBlt;
-
-        // pSurfaceCallBacks->dwFlags = DDHAL_SURFCB32_DESTROYSURFACE | DDHAL_SURFCB32_LOCK | DDHAL_SURFCB32_BLT ;
-	 }
-
-	 if (pPaletteCallBacks !=NULL)
-	 {
-		 memset(pPaletteCallBacks,0,sizeof(DD_PALETTECALLBACKS));
-		 /* FILL pPaletteCallBacks with hal stuff */
-		 /* We will not support this callback in the framebuf.dll */
-	 }
-
-
-	 /* Fixme fill the ppdev->dxHalInfo with the info we need */
-	 ppdev->bDDInitialized = TRUE;
-	 return ppdev->bDDInitialized;
+    PPDEV ppdev = (PPDEV)dhpdev;
+
+    if (ppdev->bDDInitialized == TRUE)
+    {
+        return TRUE;
+    }
+
+    if (pCallBacks !=NULL)
+    {
+        memset(pCallBacks,0,sizeof(DD_CALLBACKS));
+        /* Fill in the HAL Callback pointers */
+
+        pCallBacks->dwSize                = sizeof(DD_CALLBACKS);
+        pCallBacks->dwFlags               = DDHAL_CB32_CANCREATESURFACE |
+                                            DDHAL_CB32_CREATESURFACE ;
+        //                                = DDHAL_CB32_WAITFORVERTICALBLANK |
+        //                                  DDHAL_CB32_MAPMEMORY |
+        //                                  DDHAL_CB32_GETSCANLINE |
+
+        pCallBacks->CreateSurface         = DdCreateSurface;
+        // pCallBacks->SetColorKey           = DdSetColorKey;
+        // pCallBacks->WaitForVerticalBlank  = DdWaitForVerticalBlank;
+        pCallBacks->CanCreateSurface      = DdCanCreateSurface;
+        // pCallBacks->CreatePalette         = DdCreatePalette;
+        // pCallBacks->GetScanLine           = DdGetScanLine;
+        // pCallBacks->MapMemory             = DdMapMemory;
+
+        /* Unused on Microsoft Windows 2000 and later and should be ignored by the driver.  '
+            pCallBacks->DestroyDriver
+            pCallBacks->SetMode
+         */
+
+    }
+
+    if (pSurfaceCallBacks !=NULL)
+    {
+        memset(pSurfaceCallBacks,0,sizeof(DD_SURFACECALLBACKS));
+
+        /* FILL pSurfaceCallBacks with hal stuff */
+        // pSurfaceCallBacks->dwSize              = sizeof(DDHAL_DDSURFACECALLBACKS);
+        //                                          DDHAL_SURFCB32_DESTROYSURFACE |
+        //                                          DDHAL_SURFCB32_FLIP     |
+        //                                          DDHAL_SURFCB32_LOCK     |
+        //                                          DDHAL_SURFCB32_BLT |
+        //                                          DDHAL_SURFCB32_GETBLTSTATUS |
+        //                                          DDHAL_SURFCB32_GETFLIPSTATUS;
+        // pSurfaceCallBacks->DestroySurface      = DdDestroySurface;
+        // pSurfaceCallBacks->Flip                = DdFlip;
+        // pSurfaceCallBacks->SetClipList         = DdSetClipList;
+        // pSurfaceCallBacks->Lock                = DdLock;
+        // pSurfaceCallBacks->Unlock              = DdUnlock;
+        // pSurfaceCallBacks->Blt                 = DdBlt;
+        // pSurfaceCallBacks->SetColorKey         = DdSetColorKey;
+        // pSurfaceCallBacks->AddAttachedSurface  = DdAddAttachedSurface;
+        // pSurfaceCallBacks->GetBltStatus        = DdGetBltStatus;
+        // pSurfaceCallBacks->GetFlipStatus       = DdGetFlipStatus;
+        // pSurfaceCallBacks->UpdateOverlay       = DdUpdateOverlay;
+        // pSurfaceCallBacks->SetOverlayPosition  = DdSetOverlayPosition;
+        // pSurfaceCallBacks->SetPalette          = DdSetPalette;
+    }
+
+    if (pPaletteCallBacks !=NULL)
+    {
+        memset(pPaletteCallBacks,0,sizeof(DD_PALETTECALLBACKS));
+        /* FILL pPaletteCallBacks with hal stuff */
+        pPaletteCallBacks->dwSize           = sizeof(DD_PALETTECALLBACKS);
+        pPaletteCallBacks->dwFlags          = 0;
+        // pPaletteCallBacks->DestroyPalette;
+        // pPaletteCallBacks->SetEntries;
+    }
+
+    ppdev->bDDInitialized = TRUE;
+    return ppdev->bDDInitialized;
 }
 
 BOOL APIENTRY
@@ -136,29 +120,17 @@
   OUT DWORD  *pdwNumFourCCCodes,
   OUT DWORD  *pdwFourCC)
 {
-	PPDEV ppdev = (PPDEV)dhpdev;
-	LONG i;
-	DWORD heap = 1; /* we always alloc one heap */
-	BOOL bDDrawHeap = FALSE;
-
-	if  (ppdev == NULL)
+    PPDEV ppdev = (PPDEV)dhpdev;
+    DWORD heap = 1; /* we always alloc one heap */
+    BOOL bDDrawHeap = FALSE;
+
+    if (ppdev->bDDInitialized == FALSE);
+    {
         return FALSE;
-
-	/*   check so pHalInfo,  pdwNumHeaps, pdwNumFourCCCodes is not NULL
-	     pdwFourCC and pvmList can be null
-	 */
-
-	if (pHalInfo == NULL)
-		return FALSE;
-
-	if (pdwNumHeaps == NULL)
-		return FALSE;
-
-	if (pdwNumFourCCCodes == NULL)
-		return FALSE;
-
-	/*  Setup heap */
-	if ( (ppdev->ScreenWidth < ppdev->MemWidth) || (ppdev->ScreenHeight < ppdev->MemHeight))
+    }
+
+    /*  Setup heap */
+    if ( (ppdev->ScreenWidth < ppdev->MemWidth) || (ppdev->ScreenHeight < ppdev->MemHeight))
     {
        bDDrawHeap = TRUE;
        heap++;
@@ -167,41 +139,45 @@
     ppdev->dwHeap = heap;
     *pdwNumHeaps  = heap;
 
-	/* We do not support other fourcc */
+    /* We do not support other fourcc */
     *pdwNumFourCCCodes = 0;
 
 
-	/*
-	   check see if pvmList and pdwFourCC are frist call
-	   or frist. Secon call  we fill in pHalInfo info
+    /*
+        check see if pvmList and pdwFourCC are frist call
+        or frist. Secon call  we fill in pHalInfo info
     */
 
-	if(!(pvmList && pdwFourCC))
-	{
-
-         RtlZeroMemory(pHalInfo, sizeof(DD_HALINFO));
-         pHalInfo->dwSize = sizeof(DD_HALINFO);
-
-		 pHalInfo->ddCaps.dwCaps =  DDCAPS_BLT        | DDCAPS_BLTQUEUE | DDCAPS_BLTCOLORFILL | DDCAPS_READSCANLINE |
-			                        DDCAPS_BLTSTRETCH | DDCAPS_COLORKEY | DDCAPS_CANBLTSYSMEM;
-
-		 pHalInfo->ddCaps.dwFXCaps = DDFXCAPS_BLTSTRETCHY     | DDFXCAPS_BLTSTRETCHX        |
-			                         DDFXCAPS_BLTSTRETCHYN    | DDFXCAPS_BLTSTRETCHXN       |
-									 DDFXCAPS_BLTSHRINKY      | DDFXCAPS_BLTSHRINKX         |
-                                     DDFXCAPS_BLTSHRINKYN     | DDFXCAPS_BLTSHRINKXN        |
-									 DDFXCAPS_BLTMIRRORUPDOWN | DDFXCAPS_BLTMIRRORLEFTRIGHT;
-
-		pHalInfo->ddCaps.dwCaps2 = DDCAPS2_NONLOCALVIDMEM | DDCAPS2_NONLOCALVIDMEMCAPS;
-
-		pHalInfo->ddCaps.ddsCaps.dwCaps =  DDSCAPS_OFFSCREENPLAIN | DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP;
-
-		pHalInfo->ddCaps.dwCKeyCaps = DDCKEYCAPS_SRCBLT | DDCKEYCAPS_SRCBLTCLRSPACE;
-
-	    pHalInfo->ddCaps.dwSVBCaps = DDCAPS_BLT;
-	    pHalInfo->ddCaps.ddsCaps.dwCaps |= DDSCAPS_LOCALVIDMEM | DDSCAPS_NONLOCALVIDMEM;
-
-		/* Calc how much memmory is left on the video cards memmory */
-		pHalInfo->ddCaps.dwVidMemTotal = (ppdev->MemHeight - ppdev->ScreenHeight) * ppdev->ScreenDelta;
+    if(!(pvmList && pdwFourCC))
+    {
+        RtlZeroMemory(pHalInfo, sizeof(DD_HALINFO));
+        pHalInfo->dwSize = sizeof(DD_HALINFO);
+
+        pHalInfo->ddCaps.dwCaps = DDCAPS_NOHARDWARE;
+        /* we do not support all this caps
+        pHalInfo->ddCaps.dwCaps =  DDCAPS_BLT        | DDCAPS_BLTQUEUE | DDCAPS_BLTCOLORFILL | DDCAPS_READSCANLINE |
+                                   DDCAPS_BLTSTRETCH | DDCAPS_COLORKEY | DDCAPS_CANBLTSYSMEM;
+
+        pHalInfo->ddCaps.dwFXCaps = DDFXCAPS_BLTSTRETCHY     | DDFXCAPS_BLTSTRETCHX        |
+                                    DDFXCAPS_BLTSTRETCHYN    | DDFXCAPS_BLTSTRETCHXN       |
+                                    DDFXCAPS_BLTSHRINKY      | DDFXCAPS_BLTSHRINKX         |
+                                    DDFXCAPS_BLTSHRINKYN     | DDFXCAPS_BLTSHRINKXN        |
+                                    DDFXCAPS_BLTMIRRORUPDOWN | DDFXCAPS_BLTMIRRORLEFTRIGHT;
+
+        pHalInfo->ddCaps.dwCaps2 = DDCAPS2_NONLOCALVIDMEM | DDCAPS2_NONLOCALVIDMEMCAPS;
+
+        pHalInfo->ddCaps.ddsCaps.dwCaps =  DDSCAPS_OFFSCREENPLAIN | DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP;
+
+        pHalInfo->ddCaps.dwCKeyCaps = DDCKEYCAPS_SRCBLT | DDCKEYCAPS_SRCBLTCLRSPACE;
+
+        pHalInfo->ddCaps.dwSVBCaps = DDCAPS_BLT;
+        pHalInfo->ddCaps.ddsCaps.dwCaps |= DDSCAPS_LOCALVIDMEM | DDSCAPS_NONLOCALVIDMEM;
+        */
+
+        pHalInfo->ddCaps.ddsCaps.dwCaps =  DDSCAPS_OFFSCREENPLAIN | DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP;
+
+        /* Calc how much memmory is left on the video cards memmory */
+        pHalInfo->ddCaps.dwVidMemTotal = (ppdev->MemHeight - ppdev->ScreenHeight) * ppdev->ScreenDelta;
 
         /* fill in some basic info that we need */
         pHalInfo->vmiData.pvPrimary                 = ppdev->ScreenPtr;
@@ -211,50 +187,45 @@
         pHalInfo->vmiData.ddpfDisplay.dwSize        = sizeof(DDPIXELFORMAT);
         pHalInfo->vmiData.ddpfDisplay.dwFlags       = DDPF_RGB;
         pHalInfo->vmiData.ddpfDisplay.dwRGBBitCount = ppdev->BitsPerPixel;
-		pHalInfo->vmiData.ddpfDisplay.dwRBitMask    = ppdev->RedMask;
+        pHalInfo->vmiData.ddpfDisplay.dwRBitMask    = ppdev->RedMask;
         pHalInfo->vmiData.ddpfDisplay.dwGBitMask    = ppdev->GreenMask;
         pHalInfo->vmiData.ddpfDisplay.dwBBitMask    = ppdev->BlueMask;
         pHalInfo->vmiData.dwOffscreenAlign = 4;
 
-		if ( ppdev->BitsPerPixel == 8 )
-		{
+        if ( ppdev->BitsPerPixel == 8 )
+        {
             pHalInfo->vmiData.ddpfDisplay.dwFlags |= DDPF_PALETTEINDEXED8;
         }
 
-	    /*  FIXME
-		    Config the rops we do not doing that yet
-		     for we need write the rops table
-        */
-        for(i=0;i<DD_ROP_SPACE;i++ )
+        if ( ppdev->BitsPerPixel == 4 )
         {
-           // pHALInfo->ddCaps.dwSVBRops[i] = rops[i];
-		  //  pHALInfo->ddCaps.dwRops[i] = rops[i];
+            pHalInfo->vmiData.ddpfDisplay.dwFlags |= DDPF_PALETTEINDEXED4;
         }
-	}
-
-	/* Now build pvmList info */
-	if(pvmList)
-	{
-		ppdev->pvmList = pvmList;
-
-		if ( bDDrawHeap == TRUE)
-		{
-			pvmList->dwFlags        = VIDMEM_ISLINEAR ;
+    }
+
+    /* Now build pvmList info */
+    if(pvmList)
+    {
+        ppdev->pvmList = pvmList;
+
+        if ( bDDrawHeap == TRUE)
+        {
+            pvmList->dwFlags        = VIDMEM_ISLINEAR ;
             pvmList->fpStart        = ppdev->ScreenHeight * ppdev->ScreenDelta;
             pvmList->fpEnd          = ppdev->MemHeight * ppdev->ScreenDelta - 1;
-			pvmList->ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
-			pvmList++;
-		}
-
-		pvmList->fpStart = 0;
-		pvmList->fpEnd = (ppdev->MemHeight * ppdev->ScreenDelta)  - 1;
-		pvmList->dwFlags = VIDMEM_ISNONLOCAL | VIDMEM_ISLINEAR | VIDMEM_ISWC;
-		pvmList->ddsCaps.dwCaps =  DDSCAPS_FRONTBUFFER | DDSCAPS_BACKBUFFER ;
-		pvmList->ddsCapsAlt.dwCaps = DDSCAPS_FRONTBUFFER | DDSCAPS_BACKBUFFER;
-
-		pvmList = ppdev->pvmList;
-	}
-
-	return TRUE;
+            pvmList->ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
+            pvmList++;
+        }
+
+        pvmList->fpStart = 0;
+        pvmList->fpEnd = (ppdev->MemHeight * ppdev->ScreenDelta)  - 1;
+        pvmList->dwFlags = VIDMEM_ISNONLOCAL | VIDMEM_ISLINEAR | VIDMEM_ISWC;
+        pvmList->ddsCaps.dwCaps =  DDSCAPS_FRONTBUFFER | DDSCAPS_BACKBUFFER ;
+        pvmList->ddsCapsAlt.dwCaps = DDSCAPS_FRONTBUFFER | DDSCAPS_BACKBUFFER;
+
+        pvmList = ppdev->pvmList;
+    }
+
+    return TRUE;
 }
 

Modified: branches/reactx/reactos/drivers/video/displays/framebuf/enable.c
URL: http://svn.reactos.org/svn/reactos/branches/reactx/reactos/drivers/video/displays/framebuf/enable.c?rev=49971&r1=49970&r2=49971&view=diff
==============================================================================
--- branches/reactx/reactos/drivers/video/displays/framebuf/enable.c [iso-8859-1] (original)
+++ branches/reactx/reactos/drivers/video/displays/framebuf/enable.c [iso-8859-1] Tue Dec  7 15:38:51 2010
@@ -19,6 +19,8 @@
  */
 
 #include "framebuf.h"
+
+HSEMAPHORE g_cs = (HSEMAPHORE)0;
 
 static DRVFN DrvFunctionTable[] =
 {
@@ -52,17 +54,39 @@
    ULONG cj,
    PDRVENABLEDATA pded)
 {
+   ULONG i;
+   BOOL status = FALSE;
+   ULONG SupportedVersions[] =
+   {
+      DDI_DRIVER_VERSION_NT5,         // win2000
+      DDI_DRIVER_VERSION_NT5_01,      // win xp
+      DDI_DRIVER_VERSION_NT5_01_SP1,  // win xp sp1
+   };
+
    if (cj >= sizeof(DRVENABLEDATA))
    {
       pded->c = sizeof(DrvFunctionTable) / sizeof(DRVFN);
       pded->pdrvfn = DrvFunctionTable;
-      pded->iDriverVersion = DDI_DRIVER_VERSION_NT5;
-      return TRUE;
+
+      // check see if it win2000/win xp or reactos, if no version found return false
+      for (i=0; i < sizeof(SupportedVersions) / sizeof(ULONG) ; i++)
+      {
+          if (SupportedVersions[i] == iEngineVersion )
+          {
+              pded->iDriverVersion = SupportedVersions[i];
+
+              // Initialize sync semaphore.
+              g_cs = EngCreateSemaphore();
+              if (g_cs)
+              {
+                 status = TRUE;
+              }
+              break;
+          }
+      }
+
    }
-   else
-   {
-      return FALSE;
-   }
+   return status;
 }
 
 /*

Modified: branches/reactx/reactos/drivers/video/displays/framebuf/framebuf.h
URL: http://svn.reactos.org/svn/reactos/branches/reactx/reactos/drivers/video/displays/framebuf/framebuf.h?rev=49971&r1=49970&r2=49971&view=diff
==============================================================================
--- branches/reactx/reactos/drivers/video/displays/framebuf/framebuf.h [iso-8859-1] (original)
+++ branches/reactx/reactos/drivers/video/displays/framebuf/framebuf.h [iso-8859-1] Tue Dec  7 15:38:51 2010
@@ -27,6 +27,7 @@
 #include <winddi.h>
 #include <winioctl.h>
 #include <ntddvdeo.h>
+#include <ddrawi.h>
 
 //#define EXPERIMENTAL_MOUSE_CURSOR_SUPPORT
 
@@ -69,6 +70,15 @@
 
 #define DEVICE_NAME	L"framebuf"
 #define ALLOC_TAG	'FUBF'
+
+DWORD CALLBACK 
+DdCanCreateSurface( LPDDHAL_CANCREATESURFACEDATA pccsd );
+
+DWORD CALLBACK 
+DdCreateSurface( LPDDHAL_CREATESURFACEDATA pcsd);
+
+DWORD CALLBACK
+DdMapMemory(PDD_MAPMEMORYDATA lpMapMemory);
 
 
 DHPDEV APIENTRY
@@ -159,3 +169,24 @@
    IN PPALETTEENTRY ppalent,
    IN ULONG iStart,
    IN ULONG cColors);
+
+VOID APIENTRY
+DrvDisableDirectDraw(
+  IN DHPDEV  dhpdev);
+
+BOOL APIENTRY
+DrvEnableDirectDraw(
+  IN DHPDEV  dhpdev,
+  OUT DD_CALLBACKS  *pCallBacks,
+  OUT DD_SURFACECALLBACKS  *pSurfaceCallBacks,
+  OUT DD_PALETTECALLBACKS  *pPaletteCallBacks);
+
+BOOL APIENTRY
+DrvGetDirectDrawInfo(
+  IN DHPDEV  dhpdev,
+  OUT DD_HALINFO  *pHalInfo,
+  OUT DWORD  *pdwNumHeaps,
+  OUT VIDEOMEMORY  *pvmList,
+  OUT DWORD  *pdwNumFourCCCodes,
+  OUT DWORD  *pdwFourCC);
+

Modified: branches/reactx/reactos/drivers/video/displays/framebuf/framebuf.rbuild
URL: http://svn.reactos.org/svn/reactos/branches/reactx/reactos/drivers/video/displays/framebuf/framebuf.rbuild?rev=49971&r1=49970&r2=49971&view=diff
==============================================================================
--- branches/reactx/reactos/drivers/video/displays/framebuf/framebuf.rbuild [iso-8859-1] (original)
+++ branches/reactx/reactos/drivers/video/displays/framebuf/framebuf.rbuild [iso-8859-1] Tue Dec  7 15:38:51 2010
@@ -9,5 +9,7 @@
 	<file>pointer.c</file>
 	<file>screen.c</file>
 	<file>surface.c</file>
+	<file>ddenable.c</file>	
+	<file>dd.c</file>		
 	<file>framebuf.rc</file>
 </module>




More information about the Ros-diffs mailing list