Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers...
[reactos.git] / win32ss / reactx / ntddraw / eng.c
diff --git a/win32ss/reactx/ntddraw/eng.c b/win32ss/reactx/ntddraw/eng.c
new file mode 100644 (file)
index 0000000..426ea70
--- /dev/null
@@ -0,0 +1,215 @@
+/*
+ * COPYRIGHT:        See COPYING in the top level directory
+ * PROJECT:          ReactOS kernel
+ * PURPOSE:          Native DirectDraw implementation
+ * FILE:             win32ss/reactx/ntddraw/eng.c
+ * PROGRAMER:        Magnus olsen (magnus@greatlord.com)
+ * REVISION HISTORY:
+ *       19/1-2006   Magnus Olsen
+ */
+
+
+#include <win32k.h>
+#include <debug.h>
+
+/************************************************************************/
+/* HeapVidMemAllocAligned                                               */
+/************************************************************************/
+FLATPTR
+APIENTRY
+HeapVidMemAllocAligned(LPVIDMEM lpVidMem,
+                       DWORD dwWidth,
+                       DWORD dwHeight,
+                       LPSURFACEALIGNMENT lpAlignment,
+                       LPLONG lpNewPitch)
+{
+    PGD_HEAPVIDMEMALLOCALIGNED pfnHeapVidMemAllocAligned = (PGD_HEAPVIDMEMALLOCALIGNED)gpDxFuncs[DXG_INDEX_DxDdHeapVidMemAllocAligned].pfn;
+
+    if (pfnHeapVidMemAllocAligned == NULL)
+    {
+        DPRINT1("Warning: no pfnHeapVidMemAllocAligned\n");
+        return 0;
+    }
+
+    DPRINT1("Calling dxg.sys pfnHeapVidMemAllocAligned\n");
+    return pfnHeapVidMemAllocAligned(lpVidMem, dwWidth, dwHeight, lpAlignment, lpNewPitch);
+}
+
+/************************************************************************/
+/* VidMemFree                                                           */
+/************************************************************************/
+VOID
+APIENTRY
+VidMemFree(LPVMEMHEAP pvmh,
+           FLATPTR ptr)
+{
+    PGD_VIDMEMFREE pfnVidMemFree = (PGD_VIDMEMFREE)gpDxFuncs[DXG_INDEX_DxDdHeapVidMemFree].pfn;
+
+    if (pfnVidMemFree == NULL)
+    {
+        DPRINT1("Warning: no pfnVidMemFree\n");
+    }
+    else
+    {
+        DPRINT1("Calling dxg.sys pfnVidMemFree\n");
+        pfnVidMemFree(pvmh, ptr);
+    }
+}
+
+/************************************************************************/
+/* EngAllocPrivateUserMem                                               */
+/************************************************************************/
+_Must_inspect_result_
+_Ret_opt_bytecount_(cjMemSize)
+__drv_allocatesMem(PrivateUserMem)
+ENGAPI
+PVOID
+APIENTRY
+EngAllocPrivateUserMem(
+    _In_ PDD_SURFACE_LOCAL psl,
+    _In_ SIZE_T cjMemSize,
+    _In_ ULONG ulTag)
+{
+    PGD_ENGALLOCPRIVATEUSERMEM pfnEngAllocPrivateUserMem = (PGD_ENGALLOCPRIVATEUSERMEM)gpDxFuncs[DXG_INDEX_DxDdAllocPrivateUserMem].pfn;
+
+    if (pfnEngAllocPrivateUserMem == NULL)
+    {
+        DPRINT1("Warning: no pfnEngAllocPrivateUserMem\n");
+        return DDHAL_DRIVER_NOTHANDLED;
+    }
+
+    DPRINT1("Calling dxg.sys pfnEngAllocPrivateUserMem\n");
+    return pfnEngAllocPrivateUserMem(psl, cjMemSize, ulTag);
+}
+
+/************************************************************************/
+/* EngFreePrivateUserMem                                                */
+/************************************************************************/
+VOID
+APIENTRY
+EngFreePrivateUserMem(PDD_SURFACE_LOCAL  psl,
+                      PVOID  pv)
+{
+    PGD_ENGFREEPRIVATEUSERMEM pfnEngFreePrivateUserMem = (PGD_ENGFREEPRIVATEUSERMEM)gpDxFuncs[DXG_INDEX_DxDdFreePrivateUserMem].pfn;
+
+    if (pfnEngFreePrivateUserMem == NULL)
+    {
+        DPRINT1("Warning: no pfnEngFreePrivateUserMem\n");
+    }
+    else
+    {
+        DPRINT1("Calling dxg.sys pfnEngFreePrivateUserMem\n");
+        pfnEngFreePrivateUserMem(psl, pv);
+    }
+}
+
+/*++
+* @name EngDxIoctl
+* @implemented
+*
+* The function EngDxIoctl is the ioctl call to different DirectX functions
+* in the driver dxg.sys
+*
+* @param ULONG ulIoctl
+* The ioctl code that we want call to
+*
+* @param PVOID pBuffer
+* Our in or out buffer with data to the ioctl code we are using
+*
+* @param ULONG ulBufferSize
+* The buffer size in bytes
+*
+* @return
+* Always returns DDERR_UNSUPPORTED
+*
+* @remarks.
+* dxg.sys EngDxIoctl call is redirected to dxg.sys
+* This function is no longer used in Windows NT 2000/XP/2003
+*
+*--*/
+HRESULT
+APIENTRY
+EngDxIoctl(ULONG ulIoctl,
+           PVOID pBuffer,
+           ULONG ulBufferSize)
+{
+    PGD_ENGDXIOCTL pfnEngDxIoctl = (PGD_ENGDXIOCTL)gpDxFuncs[DXG_INDEX_DxDdIoctl].pfn;
+    DWORD retVal = DDERR_UNSUPPORTED;
+
+    DPRINT1("Calling dxg.sys pfnEngDxIoctl\n");
+
+    if (pfnEngDxIoctl != NULL)
+    {
+        retVal = pfnEngDxIoctl(ulIoctl, pBuffer, ulBufferSize);
+    }
+
+    return retVal;
+}
+
+/*++
+* @name EngLockDirectDrawSurface
+* @implemented
+*
+* The function EngUnlockDirectDrawSurface locks the DirectX surface.
+
+* @param HANDLE hSurface
+* The handle of a surface
+*
+* @return
+* This return a vaild or NULL pointer to a PDD_SURFACE_LOCAL object
+*
+* @remarks.
+* None
+*
+*--*/
+PDD_SURFACE_LOCAL
+APIENTRY
+EngLockDirectDrawSurface(HANDLE hSurface)
+{
+    PGD_ENGLOCKDIRECTDRAWSURFACE pfnEngLockDirectDrawSurface = (PGD_ENGLOCKDIRECTDRAWSURFACE)gpDxFuncs[DXG_INDEX_DxDdLockDirectDrawSurface].pfn;
+    PDD_SURFACE_LOCAL retVal = NULL;
+
+    DPRINT1("Calling dxg.sys pfnEngLockDirectDrawSurface\n");
+
+    if (pfnEngLockDirectDrawSurface != NULL)
+    {
+       retVal = pfnEngLockDirectDrawSurface(hSurface);
+    }
+
+    return retVal;
+}
+
+
+/*++
+* @name EngUnlockDirectDrawSurface
+* @implemented
+*
+* The function EngUnlockDirectDrawSurface unlocks the DirectX surface
+
+* @param PDD_SURFACE_LOCAL pSurface
+* The Surface we want to unlock
+*
+* @return
+* This return TRUE for success, FALSE for failure
+*
+* @remarks.
+* None
+*
+*--*/
+BOOL
+APIENTRY
+EngUnlockDirectDrawSurface(PDD_SURFACE_LOCAL pSurface)
+{
+    PGD_ENGUNLOCKDIRECTDRAWSURFACE pfnEngUnlockDirectDrawSurface = (PGD_ENGUNLOCKDIRECTDRAWSURFACE)gpDxFuncs[DXG_INDEX_DxDdUnlockDirectDrawSurface].pfn;
+    BOOL retVal = FALSE;
+
+    DPRINT1("Calling dxg.sys pfnEngUnlockDirectDrawSurface\n");
+
+    if (pfnEngUnlockDirectDrawSurface != NULL)
+    {
+        retVal = pfnEngUnlockDirectDrawSurface(pSurface);
+    }
+
+    return retVal;
+}
+