some more video code

svn path=/trunk/; revision=840
This commit is contained in:
Rex Jolliff 1999-12-09 02:45:06 +00:00
parent 258912bf48
commit f09720f7d7
5 changed files with 77 additions and 12 deletions

View file

@ -189,12 +189,36 @@ typedef VOID (*PBANKED_SECTION_ROUTINE)(IN ULONG ReadBank, IN ULONG WriteBank,
/* FIXME: replace with proper typedefs */
typedef PVOID PVIDEO_CLUT;
typedef PVOID PVIDEO_MEMORY;
typedef PVOID PVIDEO_MEMORY_INFORMATION;
typedef PVOID PVIDEO_MODE;
typedef struct _VIDEO_MEMORY
{
PVOID RequestedVirtualAddress;
} VIDEO_MEMORY, *PVIDEO_MEMORY;
typedef struct _VIDEO_MEMORY_INFORMATION
{
PVOID VideoRamBase;
ULONG VideoRamLength;
PVOID FrameBufferBase;
ULONG FrameBufferLength;
} VIDEO_MEMORY_INFORMATION, *PVIDEO_MEMORY_INFORMATION;
typedef struct _VIDEO_MODE
{
ULONG RequestedMode;
} VIDEO_MODE, *PVIDEO_MODE;
/* FIXME: replace with proper typedefs */
typedef PVOID PVIDEO_MODE_INFORMATION;
typedef PVOID PVIDEO_NUM_MODES;
typedef PVOID PVIDEO_SHARE_MEMORY;
typedef struct _VIDEO_SHARE_MEMORY
{
HANDLE ProcessHandle;
ULONG ViewOffset;
ULONG ViewSize;
PVOID RequestedVirtualAddress;
} VIDEO_SHARE_MEMORY, *PVIDEO_SHARE_MEMORY;
ULONG STDCALL VideoPortCompareMemory(IN PVOID Source1, IN PVOID Source2, IN ULONG Length);
VOID STDCALL VideoPortDebugPrint(IN ULONG DebugPrintLevel, IN PCHAR DebugMessage, ...);

View file

@ -159,6 +159,8 @@ HANDLE DRIVER_FindMPDriver(LPCWSTR Name);
BOOL DRIVER_BuildDDIFunctions(PDRVENABLEDATA DED,
PDRIVER_FUNCTIONS DF);
BOOL DRIVER_UnregisterDriver(LPCWSTR Name);
INT DRIVER_ReferenceDriver (LPCWSTR Name);
INT DRIVER_UnreferenceDriver (LPCWSTR Name);
#endif

View file

@ -1,4 +1,4 @@
/* $Id: registry.c,v 1.21 1999/11/24 11:51:46 dwelch Exp $
/* $Id: registry.c,v 1.22 1999/12/09 02:45:05 rex Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -1374,7 +1374,6 @@ CmiObjectParse(PVOID ParsedObject, PWSTR *Path)
return NewKeyObject;
}
/* FIXME: this access of RootKeyBlock should be guarded by spinlock */
CurKeyBlock = CmiGetKeyBlock(RegistryFile,
RegistryFile->HeaderBlock->RootKeyBlock);

View file

@ -1,4 +1,4 @@
/* $Id: driver.c,v 1.5 1999/11/20 21:51:19 ekohl Exp $
/* $Id: driver.c,v 1.6 1999/12/09 02:45:05 rex Exp $
*
* GDI Driver support routines
* (mostly swiped from Wine)
@ -18,6 +18,7 @@ typedef struct _GRAPHICS_DRIVER
{
PWSTR Name;
PGD_ENABLEDRIVER EnableDriver;
int ReferenceCount;
struct _GRAPHICS_DRIVER *Next;
} GRAPHICS_DRIVER, *PGRAPHICS_DRIVER;
@ -31,6 +32,7 @@ BOOL DRIVER_RegisterDriver(LPCWSTR Name, PGD_ENABLEDRIVER EnableDriver)
{
return FALSE;
}
Driver->ReferenceCount = 0;
Driver->EnableDriver = EnableDriver;
if (Name)
{
@ -174,3 +176,35 @@ BOOL DRIVER_UnregisterDriver(LPCWSTR Name)
}
}
INT DRIVER_ReferenceDriver (LPCWSTR Name)
{
GRAPHICS_DRIVER *Driver = DriverList;
while (Driver && Name)
{
if (!_wcsicmp( Driver->Name, Name))
{
return ++Driver->ReferenceCount;
}
Driver = Driver->Next;
}
return GenericDriver ? ++GenericDriver->ReferenceCount : 0;
}
INT DRIVER_UnreferenceDriver (LPCWSTR Name)
{
GRAPHICS_DRIVER *Driver = DriverList;
while (Driver && Name)
{
if (!_wcsicmp( Driver->Name, Name))
{
return --Driver->ReferenceCount;
}
Driver = Driver->Next;
}
return GenericDriver ? --GenericDriver->ReferenceCount : 0;
}

View file

@ -1,4 +1,4 @@
/* $Id: dc.c,v 1.9 1999/11/17 20:54:05 rex Exp $
/* $Id: dc.c,v 1.10 1999/12/09 02:45:06 rex Exp $
*
* DC.C - Device context functions
*
@ -105,7 +105,8 @@ HDC STDCALL W32kCreateCompatableDC(HDC hDC)
return NULL;
}
DRIVER_ReferenceDriver (NewDC->DriverName);
/* Copy information from original DC to new DC */
NewDC->hSelf = NewDC;
@ -243,6 +244,8 @@ HDC STDCALL W32kCreateDC(LPCWSTR Driver,
/* Complete initialization of the physical device */
NewDC->DriverFunctions.CompletePDev(NewDC->PDev, NewDC);
DRIVER_ReferenceDriver (Driver);
/* Enable the drawing surface */
NewDC->Surface = NewDC->DriverFunctions.EnableSurface(NewDC->PDev);
@ -277,9 +280,12 @@ BOOL STDCALL W32kDeleteDC(HDC DCHandle)
return FALSE;
}
DCToDelete->DriverFunctions.DisableSurface(DCToDelete->PDev);
DCToDelete->DriverFunctions.DisablePDev(DCToDelete->PDev);
if (!DRIVER_UnreferenceDriver (DCToDelete->DriverName))
{
DCToDelete->DriverFunctions.DisableSurface(DCToDelete->PDev);
DCToDelete->DriverFunctions.DisablePDev(DCToDelete->PDev);
}
/* First delete all saved DCs */
while (DCToDelete->saveLevel)
{