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 */ /* FIXME: replace with proper typedefs */
typedef PVOID PVIDEO_CLUT; typedef PVOID PVIDEO_CLUT;
typedef PVOID PVIDEO_MEMORY;
typedef PVOID PVIDEO_MEMORY_INFORMATION; typedef struct _VIDEO_MEMORY
typedef PVOID PVIDEO_MODE; {
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_MODE_INFORMATION;
typedef PVOID PVIDEO_NUM_MODES; 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); ULONG STDCALL VideoPortCompareMemory(IN PVOID Source1, IN PVOID Source2, IN ULONG Length);
VOID STDCALL VideoPortDebugPrint(IN ULONG DebugPrintLevel, IN PCHAR DebugMessage, ...); 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, BOOL DRIVER_BuildDDIFunctions(PDRVENABLEDATA DED,
PDRIVER_FUNCTIONS DF); PDRIVER_FUNCTIONS DF);
BOOL DRIVER_UnregisterDriver(LPCWSTR Name); BOOL DRIVER_UnregisterDriver(LPCWSTR Name);
INT DRIVER_ReferenceDriver (LPCWSTR Name);
INT DRIVER_UnreferenceDriver (LPCWSTR Name);
#endif #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 * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -1374,7 +1374,6 @@ CmiObjectParse(PVOID ParsedObject, PWSTR *Path)
return NewKeyObject; return NewKeyObject;
} }
/* FIXME: this access of RootKeyBlock should be guarded by spinlock */
CurKeyBlock = CmiGetKeyBlock(RegistryFile, CurKeyBlock = CmiGetKeyBlock(RegistryFile,
RegistryFile->HeaderBlock->RootKeyBlock); 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 * GDI Driver support routines
* (mostly swiped from Wine) * (mostly swiped from Wine)
@ -18,6 +18,7 @@ typedef struct _GRAPHICS_DRIVER
{ {
PWSTR Name; PWSTR Name;
PGD_ENABLEDRIVER EnableDriver; PGD_ENABLEDRIVER EnableDriver;
int ReferenceCount;
struct _GRAPHICS_DRIVER *Next; struct _GRAPHICS_DRIVER *Next;
} GRAPHICS_DRIVER, *PGRAPHICS_DRIVER; } GRAPHICS_DRIVER, *PGRAPHICS_DRIVER;
@ -31,6 +32,7 @@ BOOL DRIVER_RegisterDriver(LPCWSTR Name, PGD_ENABLEDRIVER EnableDriver)
{ {
return FALSE; return FALSE;
} }
Driver->ReferenceCount = 0;
Driver->EnableDriver = EnableDriver; Driver->EnableDriver = EnableDriver;
if (Name) 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 * DC.C - Device context functions
* *
@ -105,7 +105,8 @@ HDC STDCALL W32kCreateCompatableDC(HDC hDC)
return NULL; return NULL;
} }
DRIVER_ReferenceDriver (NewDC->DriverName);
/* Copy information from original DC to new DC */ /* Copy information from original DC to new DC */
NewDC->hSelf = NewDC; NewDC->hSelf = NewDC;
@ -243,6 +244,8 @@ HDC STDCALL W32kCreateDC(LPCWSTR Driver,
/* Complete initialization of the physical device */ /* Complete initialization of the physical device */
NewDC->DriverFunctions.CompletePDev(NewDC->PDev, NewDC); NewDC->DriverFunctions.CompletePDev(NewDC->PDev, NewDC);
DRIVER_ReferenceDriver (Driver);
/* Enable the drawing surface */ /* Enable the drawing surface */
NewDC->Surface = NewDC->DriverFunctions.EnableSurface(NewDC->PDev); NewDC->Surface = NewDC->DriverFunctions.EnableSurface(NewDC->PDev);
@ -277,9 +280,12 @@ BOOL STDCALL W32kDeleteDC(HDC DCHandle)
return FALSE; return FALSE;
} }
DCToDelete->DriverFunctions.DisableSurface(DCToDelete->PDev); if (!DRIVER_UnreferenceDriver (DCToDelete->DriverName))
DCToDelete->DriverFunctions.DisablePDev(DCToDelete->PDev); {
DCToDelete->DriverFunctions.DisableSurface(DCToDelete->PDev);
DCToDelete->DriverFunctions.DisablePDev(DCToDelete->PDev);
}
/* First delete all saved DCs */ /* First delete all saved DCs */
while (DCToDelete->saveLevel) while (DCToDelete->saveLevel)
{ {