diff --git a/reactos/drivers/directx/dxg/dxg.rbuild b/reactos/drivers/directx/dxg/dxg.rbuild
index 8a08f8f4e72..57421e86592 100644
--- a/reactos/drivers/directx/dxg/dxg.rbuild
+++ b/reactos/drivers/directx/dxg/dxg.rbuild
@@ -6,7 +6,9 @@ installbase="system32/drivers" installname="dxg.sys">
.
dxgthk
+ ntoskrnl
main.c
+ eng.c
historic.c
dxg.rc
diff --git a/reactos/drivers/directx/dxg/dxg_int.h b/reactos/drivers/directx/dxg/dxg_int.h
index a8340f79444..996b3941f80 100644
--- a/reactos/drivers/directx/dxg/dxg_int.h
+++ b/reactos/drivers/directx/dxg/dxg_int.h
@@ -27,6 +27,8 @@
#include
#include
+#include "tags.h"
+
/* exported functions */
NTSTATUS DriverEntry(IN PVOID Context1, IN PVOID Context2);
@@ -39,5 +41,6 @@ DWORD STDCALL DxDxgGenericThunk(ULONG_PTR ulIndex, ULONG_PTR ulHandle, SIZE_T *p
DWORD STDCALL DxDdIoctl(ULONG ulIoctl, PVOID pBuffer, ULONG ulBufferSize);
/* Internel functions */
+BOOL DdHmgCreate();
BOOL DdHmgDestroy();
diff --git a/reactos/drivers/directx/dxg/eng.c b/reactos/drivers/directx/dxg/eng.c
new file mode 100644
index 00000000000..f83a44bfa74
--- /dev/null
+++ b/reactos/drivers/directx/dxg/eng.c
@@ -0,0 +1,14 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS kernel
+ * PURPOSE: Native driver for dxg implementation
+ * FILE: drivers/directx/dxg/main.c
+ * PROGRAMER: Magnus olsen (magnus@greatlord.com)
+ * REVISION HISTORY:
+ * 15/10-2007 Magnus Olsen
+ */
+
+
+
+
+
diff --git a/reactos/drivers/directx/dxg/main.c b/reactos/drivers/directx/dxg/main.c
index 98756498971..52926cd513c 100644
--- a/reactos/drivers/directx/dxg/main.c
+++ b/reactos/drivers/directx/dxg/main.c
@@ -20,6 +20,11 @@ HSEMAPHORE ghsemHmgr = NULL;
HSEMAPHORE ghsemDummyPage = NULL;
VOID *gpDummyPage = NULL;
PEPROCESS gpepSession = NULL;
+PLARGE_INTEGER gpLockShortDelay = NULL;
+HANDLE ghFreeDdHmgr = 0;
+VOID *gpentDdHmgr = NULL;
+VOID *gpentDdHmgrLast = NULL;
+
PDRVFN gpEngFuncs;
const ULONG gcDxgFuncs = DXG_INDEX_DxDdIoctl + 1;
@@ -92,7 +97,6 @@ DxDdStartupDxGraphics (ULONG SizeEngDrv,
/* Note 12/1-2004 : Why is this set to 0x618 */
*DirectDrawContext = 0x618;
-#if 0
if (DdHmgCreate())
{
ghsemDummyPage = EngCreateSemaphore();
@@ -103,7 +107,6 @@ DxDdStartupDxGraphics (ULONG SizeEngDrv,
return STATUS_SUCCESS;
}
}
-#endif
DdHmgDestroy();
@@ -119,16 +122,13 @@ DxDdStartupDxGraphics (ULONG SizeEngDrv,
NTSTATUS
DxDdCleanupDxGraphics()
{
-
DdHmgDestroy();
if (!ghsemDummyPage)
{
if (!gpDummyPage)
{
-#if 0
ExFreePoolWithTag(gpDummyPage,0);
-#endif
gpDummyPage = NULL;
gcDummyPageRefCnt = 0;
}
@@ -143,16 +143,15 @@ DdHmgDestroy()
{
gcMaxDdHmgr = 0;
gcSizeDdHmgr = 0;
-#if 0
ghFreeDdHmgr = 0;
- gpentDdHmgrLast = 0;
+ gpentDdHmgrLast = NULL;
if (gpentDdHmgr)
{
EngFreeMem(gpentDdHmgr);
- gpentDdHmgr = 0;
+ gpentDdHmgr = NULL;
}
-#endif
+
if (ghsemHmgr)
{
EngDeleteSemaphore(ghsemHmgr);
@@ -162,3 +161,35 @@ DdHmgDestroy()
return TRUE;
}
+
+BOOL
+DdHmgCreate()
+{
+ gpentDdHmgr = EngAllocMem(FL_ZERO_MEMORY, gcSizeDdHmgr, TAG_THDD);
+ ghFreeDdHmgr = 0;
+ gcMaxDdHmgr = 1;
+
+ if (gpentDdHmgr)
+ {
+ ghsemHmgr = EngCreateSemaphore();
+
+ if (ghsemHmgr)
+ {
+ gpLockShortDelay = EngAllocMem(FL_ZERO_MEMORY | FL_NONPAGED_MEMORY, sizeof(LARGE_INTEGER), TAG_GINI);
+
+ if (gpLockShortDelay)
+ {
+ gpLockShortDelay->QuadPart = ((LONGLONG)-100000);
+ return TRUE;
+ }
+
+ EngDeleteSemaphore(ghsemHmgr);
+ ghsemHmgr = NULL;
+ }
+
+ EngFreeMem(gpentDdHmgr);
+ gpentDdHmgr = NULL;
+ }
+
+ return FALSE;
+}
diff --git a/reactos/drivers/directx/dxg/tags.h b/reactos/drivers/directx/dxg/tags.h
new file mode 100644
index 00000000000..2dadac66208
--- /dev/null
+++ b/reactos/drivers/directx/dxg/tags.h
@@ -0,0 +1,8 @@
+
+
+
+#define TAG_THDD TAG('t', 'h', 'd', 'd')
+#define TAG_GINI TAG('G', 'i', 'n', 'i')
+
+
+