[ros-diffs] [greatlrd] 37731: Implement DdCanCreateSurface for wined3d
greatlrd at svn.reactos.org
greatlrd at svn.reactos.org
Sat Nov 29 17:09:06 CET 2008
Author: greatlrd
Date: Sat Nov 29 10:09:06 2008
New Revision: 37731
URL: http://svn.reactos.org/svn/reactos?rev=37731&view=rev
Log:
Implement DdCanCreateSurface for wined3d
Modified:
branches/reactx/reactos/dll/win32/gdi32/misc/gdientryhelgl.c
Modified: branches/reactx/reactos/dll/win32/gdi32/misc/gdientryhelgl.c
URL: http://svn.reactos.org/svn/reactos/branches/reactx/reactos/dll/win32/gdi32/misc/gdientryhelgl.c?rev=37731&r1=37730&r2=37731&view=diff
==============================================================================
--- branches/reactx/reactos/dll/win32/gdi32/misc/gdientryhelgl.c [iso-8859-1] (original)
+++ branches/reactx/reactos/dll/win32/gdi32/misc/gdientryhelgl.c [iso-8859-1] Sat Nov 29 10:09:06 2008
@@ -332,21 +332,58 @@
WINAPI
DdCanCreateSurface(LPDDHAL_CANCREATESURFACEDATA CanCreateSurface)
{
- /* Fixme for opengl hel emulations */
- HEL_OGL_STUB;
-
-#if 0
- /*
- * Note : This functions are basic same, in win32k
- * NtGdiDdCanCreateD3DBuffer and NtGdiDdCanCreateSurface are mergs
- * toghter in win32k at end and retrurn same data, it is still sepreated
- * at user mode but in kmode it is not.
- */
-
- /* Call win32k */
- return NtGdiDdCanCreateSurface(GetDdHandle(CanCreateSurface->lpDD->hDD),
- (PDD_CANCREATESURFACEDATA)CanCreateSurface);
-#endif
+ DWORD i = 0;
+ if (CanCreateSurface->lpDDSurfaceDesc)
+ {
+
+ CanCreateSurface->ddRVal = DDERR_INVALIDPIXELFORMAT;
+
+ if ((CanCreateSurface->lpDDSurfaceDesc->dwSize == sizeof(DDSURFACEDESC) ||
+ CanCreateSurface->lpDDSurfaceDesc->dwSize == sizeof(DDSURFACEDESC2)))
+ {
+ if (CanCreateSurface->bIsDifferentPixelFormat == FALSE)
+ {
+ // Maybe more check before we return DD_OK
+ CanCreateSurface->ddRVal = DD_OK;
+ }
+ else
+ {
+ if (CanCreateSurface->lpDDSurfaceDesc->dwFlags & DDPF_FOURCC)
+ {
+
+ for (i=0;i<CanCreateSurface->lpDD->dwNumFourCC;i++)
+ {
+ if (CanCreateSurface->lpDD->lpdwFourCC[i] == CanCreateSurface->lpDDSurfaceDesc->ddpfPixelFormat.dwFourCC)
+ {
+ // calc yuvBitCount
+ switch ( CanCreateSurface->lpDDSurfaceDesc->ddpfPixelFormat.dwFourCC )
+ {
+ case MAKEFOURCC('Y','U','Y','2') :
+ CanCreateSurface->lpDDSurfaceDesc->ddpfPixelFormat.dwYUVBitCount = 16;
+ break;
+
+ case MAKEFOURCC('U','Y','V','Y') :
+ CanCreateSurface->lpDDSurfaceDesc->ddpfPixelFormat.dwYUVBitCount = 16;
+ break;
+
+ case MAKEFOURCC('Y','V','1','2') :
+ CanCreateSurface->lpDDSurfaceDesc->ddpfPixelFormat.dwYUVBitCount = 12;
+ break;
+
+ default:
+ break;
+ }
+
+ // Maybe more check before we return DD_OK
+ CanCreateSurface->ddRVal = DD_OK;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ return DDHAL_DRIVER_HANDLED;
}
/*
More information about the Ros-diffs
mailing list