2 * PROJECT: Win32 subsystem
3 * LICENSE: GNU GPL, see COPYING in the top level directory
4 * FILE: win32ss/gdi/eng/drvdbg.c
5 * PURPOSE: Debug hooks for display driver callbacks
6 * PROGRAMMERS: Timo Kreuzer
10 DBG_DEFAULT_CHANNEL(EngDev
);
14 DbgLookupDHPDEV(DHPDEV dhpdev
);
26 _In_ LPWSTR pwszLogAddress
,
28 _In_opt_ HSURF
*phsurfPatterns
,
30 _Out_ ULONG
*pdevcaps
,
34 _In_ LPWSTR pwszDeviceName
,
37 PPDEVOBJ ppdev
= (PPDEVOBJ
)hdev
;
42 return ppdev
->pldev
->pfn
.EnablePDEV(pdm
,
61 PPDEVOBJ ppdev
= (PPDEVOBJ
)hdev
;
65 ppdev
->pldev
->pfn
.CompletePDEV(dhpdev
, hdev
);
73 PPDEVOBJ ppdev
= DbgLookupDHPDEV(dhpdev
);
77 ppdev
->pldev
->pfn
.DisablePDEV(dhpdev
);
85 PPDEVOBJ ppdev
= DbgLookupDHPDEV(dhpdev
);
89 return ppdev
->pldev
->pfn
.EnableSurface(dhpdev
);
97 PPDEVOBJ ppdev
= DbgLookupDHPDEV(dhpdev
);
101 ppdev
->pldev
->pfn
.DisableSurface(dhpdev
);
110 PPDEVOBJ ppdev
= DbgLookupDHPDEV(dhpdev
);
114 return ppdev
->pldev
->pfn
.AssertMode(dhpdev
, bEnable
);
125 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
137 PPDEVOBJ ppdev
= DbgLookupDHPDEV(dhpdev
);
141 return ppdev
->pldev
->pfn
.ResetDevice(dhpdev
, Reserved
);
146 DbgDrvDisableDriver(void)
153 DbgDrvCreateDeviceBitmap(
158 PPDEVOBJ ppdev
= DbgLookupDHPDEV(dhpdev
);
162 return ppdev
->pldev
->pfn
.CreateDeviceBitmap(dhpdev
, sizl
, iFormat
);
167 DbgDrvDeleteDeviceBitmap(
177 _Inout_ SURFOBJ
*psoTarget
,
178 _In_ SURFOBJ
*psoPattern
,
179 _In_opt_ SURFOBJ
*psoMask
,
183 PPDEVOBJ ppdev
= (PPDEVOBJ
)psoTarget
->hdev
;
196 PPDEVOBJ ppdev
= DbgLookupDHPDEV(dhpdev
);
200 return ppdev
->pldev
->pfn
.DitherColor(dhpdev
, iMode
, rgb
, pul
);
206 _Inout_ SURFOBJ
*pso
,
209 _In_opt_ XFORMOBJ
*pxo
,
211 _In_ POINTL
*pptlBrushOrg
,
212 _In_ LINEATTRS
*plineattrs
,
215 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
223 _Inout_ SURFOBJ
*pso
,
227 _In_ POINTL
*pptlBrushOrg
,
229 _In_ FLONG flOptions
)
231 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
238 DbgDrvStrokeAndFillPath(
239 _Inout_ SURFOBJ
*pso
,
240 _Inout_ PATHOBJ
*ppo
,
242 _In_opt_ XFORMOBJ
*pxo
,
243 _In_ BRUSHOBJ
*pboStroke
,
244 _In_ LINEATTRS
*plineattrs
,
245 _In_ BRUSHOBJ
*pboFill
,
246 _In_ POINTL
*pptlBrushOrg
,
248 _In_ FLONG flOptions
)
250 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
261 IN POINTL
*pptlBrushOrg
,
264 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
271 _Inout_ SURFOBJ
*psoTrg
,
272 _In_opt_ SURFOBJ
*psoSrc
,
273 _In_opt_ SURFOBJ
*psoMask
,
274 _In_opt_ CLIPOBJ
*pco
,
275 _In_opt_ XLATEOBJ
*pxlo
,
277 _When_(psoSrc
, _In_
) POINTL
*pptlSrc
,
278 _When_(psoMask
, _In_
) POINTL
*pptlMask
,
279 _In_opt_ BRUSHOBJ
*pbo
,
280 _When_(pbo
, _In_
) POINTL
*pptlBrush
,
283 PSURFACE psurfTrg
= CONTAINING_RECORD(psoTrg
, SURFACE
, SurfObj
);
284 PSURFACE psurfSrc
= CONTAINING_RECORD(psoSrc
, SURFACE
, SurfObj
);
287 /* Get the right BitBlt function */
288 if (psurfTrg
->flags
& HOOK_BITBLT
)
290 ppdev
= (PPDEVOBJ
)psoTrg
->hdev
;
294 ASSERT(ROP4_USES_SOURCE(rop4
));
295 ASSERT(psurfSrc
->flags
& HOOK_BITBLT
);
296 ppdev
= (PPDEVOBJ
)psoSrc
->hdev
;
300 ASSERT(IS_VALID_ROP4(rop4
));
302 ASSERT(psoTrg
->iBitmapFormat
>= BMF_1BPP
);
303 ASSERT(psoTrg
->iBitmapFormat
<= BMF_32BPP
);
305 ASSERT(prclTrg
->left
>= 0);
306 ASSERT(prclTrg
->top
>= 0);
307 ASSERT(prclTrg
->right
<= psoTrg
->sizlBitmap
.cx
);
308 ASSERT(prclTrg
->bottom
<= psoTrg
->sizlBitmap
.cy
);
309 ASSERT(RECTL_bIsWellOrdered(prclTrg
));
311 ASSERT(pco
->iDComplexity
!= DC_RECT
);
313 if (ROP4_USES_SOURCE(rop4
))
316 ASSERT(psoSrc
->iBitmapFormat
>= BMF_1BPP
);
317 ASSERT(psoSrc
->iBitmapFormat
<= BMF_8RLE
);
319 ASSERT(pptlSrc
->x
>= 0);
320 ASSERT(pptlSrc
->y
>= 0);
321 ASSERT(pptlSrc
->x
<= psoTrg
->sizlBitmap
.cx
);
322 ASSERT(pptlSrc
->y
<= psoTrg
->sizlBitmap
.cy
);
325 if (ROP4_USES_MASK(rop4
))
328 ASSERT(psoMask
->iBitmapFormat
== BMF_1BPP
);
330 ASSERT(pptlMask
->x
>= 0);
331 ASSERT(pptlMask
->y
>= 0);
332 ASSERT(pptlMask
->x
<= psoMask
->sizlBitmap
.cx
);
333 ASSERT(pptlMask
->y
<= psoMask
->sizlBitmap
.cy
);
337 if (ROP4_USES_PATTERN(rop4
))
344 return ppdev
->pldev
->pfn
.BitBlt(psoTrg
,
367 PSURFACE psurfTrg
= CONTAINING_RECORD(psoTrg
, SURFACE
, SurfObj
);
368 PSURFACE psurfSrc
= CONTAINING_RECORD(psoSrc
, SURFACE
, SurfObj
);
371 /* Get the right BitBlt function */
372 if (psurfTrg
->flags
& HOOK_COPYBITS
)
374 ppdev
= (PPDEVOBJ
)psoTrg
->hdev
;
378 ASSERT(psurfSrc
->flags
& HOOK_COPYBITS
);
379 ppdev
= (PPDEVOBJ
)psoSrc
->hdev
;
382 return ppdev
->pldev
->pfn
.CopyBits(psoTrg
,
394 _Inout_ SURFOBJ
*psoTrg
,
395 _Inout_ SURFOBJ
*psoSrc
,
396 _In_opt_ SURFOBJ
*psoMask
,
398 _In_opt_ XLATEOBJ
*pxlo
,
399 _In_opt_ COLORADJUSTMENT
*pca
,
400 _In_ POINTL
*pptlHTOrg
,
401 _In_ RECTL
*prclDest
,
403 _In_opt_ POINTL
*pptlMask
,
406 PSURFACE psurfTrg
= CONTAINING_RECORD(psoTrg
, SURFACE
, SurfObj
);
407 PSURFACE psurfSrc
= CONTAINING_RECORD(psoSrc
, SURFACE
, SurfObj
);
421 PPDEVOBJ ppdev
= DbgLookupDHPDEV(dhpdev
);
425 return ppdev
->pldev
->pfn
.SetPalette(dhpdev
, ppalo
, fl
, iStart
, cColors
);
442 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
456 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
470 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
482 PPDEVOBJ ppdev
= DbgLookupDHPDEV(dhpdev
);
486 return ppdev
->pldev
->pfn
.QueryFont(dhpdev
, iFile
, iFace
, pid
);
512 PPDEVOBJ ppdev
= DbgLookupDHPDEV(dhpdev
);
516 return ppdev
->pldev
->pfn
.QueryFontData(dhpdev
, pfo
, iMode
, hg
, pgd
, pv
, cjSize
);
521 DbgDrvSetPointerShape(
523 _In_ SURFOBJ
*psoMask
,
524 _In_ SURFOBJ
*psoColor
,
533 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
545 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
561 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
570 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
579 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
589 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
597 _In_ LPWSTR pwszDocName
,
600 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
610 PPDEVOBJ ppdev
= DbgLookupDHPDEV(dhpdev
);
614 return ppdev
->pldev
->pfn
.GetGlyphMode(dhpdev
, pfo
);
623 PPDEVOBJ ppdev
= DbgLookupDHPDEV(dhpdev
);
627 ppdev
->pldev
->pfn
.Synchronize(dhpdev
, prcl
);
632 DbgDrvSaveScreenBits(
638 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
647 _Out_opt_ DEVMODEW
*pdm
)
685 ULONG ulFastCheckSum
)
692 DbgDrvUnloadFontFile(
700 DbgDrvFontManagement(
702 _In_opt_ FONTOBJ
*pfo
,
714 DbgDrvQueryTrueTypeTable(
729 DbgDrvQueryTrueTypeOutline(
736 TTPOLYGONHEADER
*ppoly
)
738 PPDEVOBJ ppdev
= DbgLookupDHPDEV(dhpdev
);
744 DbgDrvGetTrueTypeFile(
769 ERR("Obsolete driver function %s called!\n", __FUNCTION__
);
775 DbgDrvQueryAdvanceWidths(
780 _Out_ PVOID pvWidths
,
783 PPDEVOBJ ppdev
= DbgLookupDHPDEV(dhpdev
);
789 DbgDrvSetPixelFormat(
794 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
800 DbgDrvDescribePixelFormat(
804 PIXELFORMATDESCRIPTOR
*ppfd
)
806 PPDEVOBJ ppdev
= DbgLookupDHPDEV(dhpdev
);
810 return ppdev
->pldev
->pfn
.DescribePixelFormat(dhpdev
, iPixelFormat
, cjpfd
, ppfd
);
819 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
829 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
839 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
845 DbgDrvGetDirectDrawInfo(
847 DD_HALINFO
*pHalInfo
,
849 VIDEOMEMORY
*pvmList
,
850 DWORD
*pdwNumFourCCCodes
,
853 PPDEVOBJ ppdev
= DbgLookupDHPDEV(dhpdev
);
857 return ppdev
->pldev
->pfn
.GetDirectDrawInfo(dhpdev
,
867 DbgDrvEnableDirectDraw(
869 DD_CALLBACKS
*pCallBacks
,
870 DD_SURFACECALLBACKS
*pSurfaceCallBacks
,
871 DD_PALETTECALLBACKS
*pPaletteCallBacks
)
873 PPDEVOBJ ppdev
= DbgLookupDHPDEV(dhpdev
);
877 return ppdev
->pldev
->pfn
.EnableDirectDraw(dhpdev
,
885 DbgDrvDisableDirectDraw(
888 PPDEVOBJ ppdev
= DbgLookupDHPDEV(dhpdev
);
892 ppdev
->pldev
->pfn
.DisableDirectDraw(dhpdev
);
897 DbgDrvQuerySpoolType(DHPDEV PDev
, LPWSTR SpoolType
)
899 ERR("Obsolete driver function %s called!\n", __FUNCTION__
);
906 DbgDrvIcmCreateColorTransform(
908 _In_ LPLOGCOLORSPACEW pLogColorSpace
,
909 _In_opt_ PVOID pvSourceProfile
,
910 _In_ ULONG cjSourceProfile
,
911 _In_ PVOID pvDestProfile
,
912 _In_ ULONG cjDestProfile
,
913 _In_opt_ PVOID pvTargetProfile
,
914 _In_ ULONG cjTargetProfile
,
915 _In_ DWORD dwReserved
)
917 PPDEVOBJ ppdev
= DbgLookupDHPDEV(dhpdev
);
921 return ppdev
->pldev
->pfn
.IcmCreateColorTransform(dhpdev
,
934 DbgDrvIcmDeleteColorTransform(
936 _In_ HANDLE hcmXform
)
938 PPDEVOBJ ppdev
= DbgLookupDHPDEV(dhpdev
);
942 return ppdev
->pldev
->pfn
.IcmDeleteColorTransform(dhpdev
, hcmXform
);
947 DbgDrvIcmCheckBitmapBits(
949 HANDLE hColorTransform
,
953 PPDEVOBJ ppdev
= DbgLookupDHPDEV(dhpdev
);
957 return ppdev
->pldev
->pfn
.IcmCheckBitmapBits(dhpdev
,
965 DbgDrvIcmSetDeviceGammaRamp(
970 PPDEVOBJ ppdev
= DbgLookupDHPDEV(dhpdev
);
974 return ppdev
->pldev
->pfn
.IcmSetDeviceGammaRamp(dhpdev
, iFormat
, lpRamp
);
980 _Inout_ SURFOBJ
*psoTrg
,
982 _In_opt_ XLATEOBJ
*pxlo
,
983 _In_ TRIVERTEX
*pVertex
,
987 _In_ RECTL
*prclExtents
,
988 _In_ POINTL
*pptlDitherOrg
,
991 PPDEVOBJ ppdev
= (PPDEVOBJ
)psoTrg
->hdev
;
998 _Inout_ SURFOBJ
*psoTrg
,
999 _Inout_ SURFOBJ
*psoSrc
,
1000 _In_opt_ SURFOBJ
*psoMask
,
1002 _In_opt_ XLATEOBJ
*pxlo
,
1003 _In_opt_ COLORADJUSTMENT
*pca
,
1004 _In_ POINTL
*pptlHTOrg
,
1005 _In_ RECTL
*prclDest
,
1006 _In_ RECTL
*prclSrc
,
1007 _In_opt_ POINTL
*pptlMask
,
1012 PPDEVOBJ ppdev
= (PPDEVOBJ
)psoTrg
->hdev
;
1019 _Inout_ SURFOBJ
*psoTrg
,
1020 _Inout_ SURFOBJ
*psoSrc
,
1021 _In_opt_ SURFOBJ
*psoMsk
,
1023 _In_opt_ XLATEOBJ
*pxlo
,
1024 _In_opt_ COLORADJUSTMENT
*pca
,
1025 _In_opt_ POINTL
*pptlBrushOrg
,
1026 _In_ POINTFIX
*pptfx
,
1028 _In_opt_ POINTL
*pptl
,
1031 PPDEVOBJ ppdev
= (PPDEVOBJ
)psoTrg
->hdev
;
1038 _Inout_ SURFOBJ
*psoDest
,
1039 _In_ SURFOBJ
*psoSrc
,
1041 _In_opt_ XLATEOBJ
*pxlo
,
1042 _In_ RECTL
*prclDest
,
1043 _In_ RECTL
*prclSrc
,
1044 _In_ BLENDOBJ
*pBlendObj
)
1051 DbgSynthesizeFont(void)
1058 DbgGetSynthesizedFontFiles(void)
1065 DbgDrvTransparentBlt(
1066 _Inout_ SURFOBJ
*psoTrg
,
1067 _In_ SURFOBJ
*psoSrc
,
1069 _In_opt_ XLATEOBJ
*pxlo
,
1070 _In_ RECTL
*prclDst
,
1071 _In_ RECTL
*prclSrc
,
1072 _In_ ULONG iTransColor
,
1073 _In_ ULONG ulReserved
)
1075 PPDEVOBJ ppdev
= (PPDEVOBJ
)psoTrg
->hdev
;
1081 DbgDrvQueryPerBandInfo(
1083 _Inout_ PERBANDINFO
*pbi
)
1085 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
1091 DbgDrvQueryDeviceSupport(
1101 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
1104 return ppdev
->pldev
->pfn
.QueryDeviceSupport(pso
,
1106 (PVOID
)pxo
, // FIXME!!!
1116 DbgDrvDeriveSurface(
1117 DD_DIRECTDRAW_GLOBAL
*pDirectDraw
,
1118 DD_SURFACE_LOCAL
*pSurface
)
1125 DbgDrvQueryGlyphAttrs(
1139 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
1142 ppdev
->pldev
->pfn
.Notify(pso
, iType
, pvData
);
1147 DbgDrvSynchronizeSurface(
1152 PPDEVOBJ ppdev
= (PPDEVOBJ
)pso
->hdev
;
1155 ppdev
->pldev
->pfn
.SynchronizeSurface(pso
, prcl
, fl
);
1164 PPDEVOBJ ppdev
= DbgLookupDHPDEV(dhpdev
);
1167 return ppdev
->pldev
->pfn
.ResetDevice(dhpdev
, Reserved
);
1171 apfnDbgDrvFunctions
[] =
1176 DbgDrvEnableSurface
,
1177 DbgDrvDisableSurface
,
1181 NULL
, //DbgDrvDisableDriver,
1182 DbgDrvReserved
, // Unknown1
1183 DbgDrvCreateDeviceBitmap
,
1184 NULL
, //DbgDrvDeleteDeviceBitmap,
1189 DbgDrvStrokeAndFillPath
,
1192 NULL
, //DbgDrvCopyBits,
1193 NULL
, //DbgDrvStretchBlt,
1196 NULL
, //DbgDrvTextOut,
1197 NULL
, //DbgDrvEscape,
1198 NULL
, //DbgDrvDrawEscape,
1200 NULL
, //DbgDrvQueryFontTree,
1201 DbgDrvQueryFontData
,
1202 NULL
, //DbgDrvSetPointerShape,
1203 NULL
, //DbgDrvMovePointer,
1204 NULL
, //DbgDrvLineTo,
1205 NULL
, //DbgDrvSendPage,
1206 NULL
, //DbgDrvStartPage,
1207 NULL
, //DbgDrvEndDoc,
1208 NULL
, //DbgDrvStartDoc,
1213 NULL
, //DbgDrvSaveScreenBits,
1214 NULL
, //DbgDrvGetModes,
1216 NULL
, //DbgDrvDestroyFont,
1217 NULL
, //DbgDrvQueryFontCaps,
1218 NULL
, //DbgDrvLoadFontFile,
1219 NULL
, //DbgDrvUnloadFontFile,
1220 NULL
, //DbgDrvFontManagement,
1221 NULL
, //DbgDrvQueryTrueTypeTable,
1222 NULL
, //DbgDrvQueryTrueTypeOutline,
1223 NULL
, //DbgDrvGetTrueTypeFile,
1224 NULL
, //DbgDrvQueryFontFile,
1226 NULL
, //DbgDrvQueryAdvanceWidths,
1227 NULL
, //DbgDrvSetPixelFormat,
1228 DbgDrvDescribePixelFormat
,
1229 NULL
, //DbgDrvSwapBuffers,
1230 NULL
, //DbgDrvStartBanding,
1231 NULL
, //DbgDrvNextBand,
1232 DbgDrvGetDirectDrawInfo
,
1233 DbgDrvEnableDirectDraw
,
1234 DbgDrvDisableDirectDraw
,
1235 DbgDrvQuerySpoolType
,
1237 DbgDrvIcmCreateColorTransform
,
1238 DbgDrvIcmDeleteColorTransform
,
1239 DbgDrvIcmCheckBitmapBits
,
1240 DbgDrvIcmSetDeviceGammaRamp
,
1241 NULL
, //DbgDrvGradientFill,
1242 NULL
, //DbgDrvStretchBltROP,
1243 NULL
, //DbgDrvPlgBlt,
1244 NULL
, //DbgDrvAlphaBlend,
1245 NULL
, //DbgSynthesizeFont,
1246 NULL
, //DbgGetSynthesizedFontFiles,
1247 NULL
, //DbgDrvTransparentBlt,
1248 NULL
, //DbgDrvQueryPerBandInfo,
1249 DbgDrvQueryDeviceSupport
,
1258 NULL
, //DbgDrvDeriveSurface,
1259 NULL
, //DbgDrvQueryGlyphAttrs,
1261 DbgDrvSynchronizeSurface
,