Reactos
at master 211 lines 5.8 kB view raw
1/* 2 * COPYRIGHT: See COPYING in the top level directory 3 * PROJECT: ReactOS kernel 4 * PURPOSE: Native DirectDraw implementation 5 * FILE: win32ss/reactx/ntddraw/eng.c 6 * PROGRAMER: Magnus olsen (magnus@greatlord.com) 7 * REVISION HISTORY: 8 * 19/1-2006 Magnus Olsen 9 */ 10 11#include <win32k.h> 12 13// #define NDEBUG 14#include <debug.h> 15 16/************************************************************************/ 17/* HeapVidMemAllocAligned */ 18/************************************************************************/ 19FLATPTR 20APIENTRY 21HeapVidMemAllocAligned(LPVIDMEM lpVidMem, 22 DWORD dwWidth, 23 DWORD dwHeight, 24 LPSURFACEALIGNMENT lpAlignment, 25 LPLONG lpNewPitch) 26{ 27 PGD_HEAPVIDMEMALLOCALIGNED pfnHeapVidMemAllocAligned = (PGD_HEAPVIDMEMALLOCALIGNED)gpDxFuncs[DXG_INDEX_DxDdHeapVidMemAllocAligned].pfn; 28 29 if (pfnHeapVidMemAllocAligned == NULL) 30 { 31 DPRINT1("Warning: no pfnHeapVidMemAllocAligned\n"); 32 return 0; 33 } 34 35 DPRINT("Calling dxg.sys pfnHeapVidMemAllocAligned\n"); 36 return pfnHeapVidMemAllocAligned(lpVidMem, dwWidth, dwHeight, lpAlignment, lpNewPitch); 37} 38 39/************************************************************************/ 40/* VidMemFree */ 41/************************************************************************/ 42VOID 43APIENTRY 44VidMemFree(LPVMEMHEAP pvmh, 45 FLATPTR ptr) 46{ 47 PGD_VIDMEMFREE pfnVidMemFree = (PGD_VIDMEMFREE)gpDxFuncs[DXG_INDEX_DxDdHeapVidMemFree].pfn; 48 49 if (pfnVidMemFree == NULL) 50 { 51 DPRINT1("Warning: no pfnVidMemFree\n"); 52 } 53 else 54 { 55 DPRINT("Calling dxg.sys pfnVidMemFree\n"); 56 pfnVidMemFree(pvmh, ptr); 57 } 58} 59 60/************************************************************************/ 61/* EngAllocPrivateUserMem */ 62/************************************************************************/ 63_Must_inspect_result_ 64_Ret_opt_bytecount_(cjMemSize) 65__drv_allocatesMem(PrivateUserMem) 66ENGAPI 67PVOID 68APIENTRY 69EngAllocPrivateUserMem( 70 _In_ PDD_SURFACE_LOCAL psl, 71 _In_ SIZE_T cjMemSize, 72 _In_ ULONG ulTag) 73{ 74 PGD_ENGALLOCPRIVATEUSERMEM pfnEngAllocPrivateUserMem = (PGD_ENGALLOCPRIVATEUSERMEM)gpDxFuncs[DXG_INDEX_DxDdAllocPrivateUserMem].pfn; 75 76 if (pfnEngAllocPrivateUserMem == NULL) 77 { 78 DPRINT1("Warning: no pfnEngAllocPrivateUserMem\n"); 79 return DDHAL_DRIVER_NOTHANDLED; 80 } 81 82 DPRINT("Calling dxg.sys pfnEngAllocPrivateUserMem\n"); 83 return pfnEngAllocPrivateUserMem(psl, cjMemSize, ulTag); 84} 85 86/************************************************************************/ 87/* EngFreePrivateUserMem */ 88/************************************************************************/ 89VOID 90APIENTRY 91EngFreePrivateUserMem(PDD_SURFACE_LOCAL psl, 92 PVOID pv) 93{ 94 PGD_ENGFREEPRIVATEUSERMEM pfnEngFreePrivateUserMem = (PGD_ENGFREEPRIVATEUSERMEM)gpDxFuncs[DXG_INDEX_DxDdFreePrivateUserMem].pfn; 95 96 if (pfnEngFreePrivateUserMem == NULL) 97 { 98 DPRINT1("Warning: no pfnEngFreePrivateUserMem\n"); 99 } 100 else 101 { 102 DPRINT("Calling dxg.sys pfnEngFreePrivateUserMem\n"); 103 pfnEngFreePrivateUserMem(psl, pv); 104 } 105} 106 107/*++ 108* @name EngDxIoctl 109* @implemented 110* 111* The function EngDxIoctl is the ioctl call to different DirectX functions 112* in the driver dxg.sys 113* 114* @param ULONG ulIoctl 115* The ioctl code that we want call to 116* 117* @param PVOID pBuffer 118* Our in or out buffer with data to the ioctl code we are using 119* 120* @param ULONG ulBufferSize 121* The buffer size in bytes 122* 123* @return 124* Always returns DDERR_UNSUPPORTED 125* 126* @remarks. 127* dxg.sys EngDxIoctl call is redirected to dxg.sys 128* This function is no longer used in Windows NT 2000/XP/2003 129* 130*--*/ 131HRESULT 132APIENTRY 133EngDxIoctl(ULONG ulIoctl, 134 PVOID pBuffer, 135 ULONG ulBufferSize) 136{ 137 PGD_ENGDXIOCTL pfnEngDxIoctl = (PGD_ENGDXIOCTL)gpDxFuncs[DXG_INDEX_DxDdIoctl].pfn; 138 DWORD retVal = DDERR_UNSUPPORTED; 139 140 DPRINT("Calling dxg.sys pfnEngDxIoctl\n"); 141 if (pfnEngDxIoctl != NULL) 142 { 143 retVal = pfnEngDxIoctl(ulIoctl, pBuffer, ulBufferSize); 144 } 145 146 return retVal; 147} 148 149/*++ 150* @name EngLockDirectDrawSurface 151* @implemented 152* 153* The function EngUnlockDirectDrawSurface locks the DirectX surface. 154 155* @param HANDLE hSurface 156* The handle of a surface 157* 158* @return 159* This return a vaild or NULL pointer to a PDD_SURFACE_LOCAL object 160* 161* @remarks. 162* None 163* 164*--*/ 165PDD_SURFACE_LOCAL 166APIENTRY 167EngLockDirectDrawSurface(HANDLE hSurface) 168{ 169 PGD_ENGLOCKDIRECTDRAWSURFACE pfnEngLockDirectDrawSurface = (PGD_ENGLOCKDIRECTDRAWSURFACE)gpDxFuncs[DXG_INDEX_DxDdLockDirectDrawSurface].pfn; 170 PDD_SURFACE_LOCAL retVal = NULL; 171 172 DPRINT("Calling dxg.sys pfnEngLockDirectDrawSurface\n"); 173 if (pfnEngLockDirectDrawSurface != NULL) 174 { 175 retVal = pfnEngLockDirectDrawSurface(hSurface); 176 } 177 178 return retVal; 179} 180 181/*++ 182* @name EngUnlockDirectDrawSurface 183* @implemented 184* 185* The function EngUnlockDirectDrawSurface unlocks the DirectX surface 186 187* @param PDD_SURFACE_LOCAL pSurface 188* The Surface we want to unlock 189* 190* @return 191* This return TRUE for success, FALSE for failure 192* 193* @remarks. 194* None 195* 196*--*/ 197BOOL 198APIENTRY 199EngUnlockDirectDrawSurface(PDD_SURFACE_LOCAL pSurface) 200{ 201 PGD_ENGUNLOCKDIRECTDRAWSURFACE pfnEngUnlockDirectDrawSurface = (PGD_ENGUNLOCKDIRECTDRAWSURFACE)gpDxFuncs[DXG_INDEX_DxDdUnlockDirectDrawSurface].pfn; 202 BOOL retVal = FALSE; 203 204 DPRINT("Calling dxg.sys pfnEngUnlockDirectDrawSurface\n"); 205 if (pfnEngUnlockDirectDrawSurface != NULL) 206 { 207 retVal = pfnEngUnlockDirectDrawSurface(pSurface); 208 } 209 210 return retVal; 211}